0

我有以下代码片段:

return (AllowableCharacters.indexOf(String.fromCharCode(k)) != -1);

现在,我不太明白这个脚本中 -1 的用法。

脚本的读取方式如下:

first String.fromCharCode(k) != -1被执行(k 是关键代码,我是从其他脚本动态获取的)。

然后我从 AllowableCharacters 获得 indexof(String.fromCharCode(k) != -1)。

这是一个类似这样的字符串:

AllowableCharacters = "abc" ; 

我也明白,如果 indexof 在上面的字符串中找不到值,它会返回 -1。

然而,回到我的问题,为什么 -1 在脚本中?

编辑 ::

为了使我的问题更简单,您将如何阅读以下行:

String.fromCharCode(k))!=-1

用简单的英语。

编辑 2::

好的,所以我只是阅读了 guffa 的答案并制作了一个随机脚本来检查,脚本如下:

 var store = "abcdefgpS";

        function check_index(){
            console.log(store.indexOf(String.fromCharCode(83))); 
        };

在上面的函数中 !-1 被排除在外,所以在 console.log 中,如果找到匹配项,我们将获得找到该字符的 indexOf ,如果未找到匹配项,我们将获得 -1 。

现在,这不是我们想要的,我们想要的是“告诉我值是否存在”(返回 true)或“告诉我值是否不存在”(返回 false)。

所以我们要做的就是将上面的脚本更改为:

 var store = "abcdefgpS";

        function check_index(){
            console.log(store.indexOf(String.fromCharCode(83)) !-1); 
        };

其中,给出你的真值或假值。

现在如何:

返回 (store.indexOf(String.fromCharCode(83)) !-1)

读作:

if (store.indexOf(String.fromCharCode(83)) !-1){
      return true;
}else { return false; } 

我没有看到 if 语句。 return (store.indexOf(String.fromCharCode(83)) !-1);

谢谢,

亚历山大

4

2 回答 2

2

这是一个验证字符是否被允许的条件。它将返回一个boolean(比较的结果)。

让我们分解一下。

  1. 首先,我们从 char 代码中获取一个字符串String.fromCharCode。大概我们已经从某种输入事件中收到了这个。
  2. AllowableCharacters接下来,我们在using中获取这个生成的单字符串的索引indexOf
  3. 最后,我们测试该结果是否为-1。测试评估为一个boolean值,它可以像任何其他值一样从函数返回。的值-1表示该字符是不允许的,所以我们用它!=来判断该字符是否有效。
于 2015-01-26T00:38:31.183 回答
1

你弄错了执行顺序。

首先评估这个表达式:String.fromCharCode(k)

让我们假设结果是字符串"b"。这在表达式中使用:AllowableCharacters.indexOf("b").

让我们假设在字符串中的第二个字符处找到该字符,该字符的索引为 1,因此结果为1. 那是在表达式中使用的1 != -1

由于1不等于-1,结果为true,返回。

简而言之,将-1indexOf方法的结果进行比较,因为方法-1在找不到任何内容时返回。


比较运算符!=导致值为trueor false。它比较值,结果取决于它们是否相等。将结果转换为orif不需要语句,这已经是比较表达式的值。truefalse

有时你会看到如下代码:

if (AllowableCharacters.indexOf(String.fromCharCode(k)) != -1) {
  return true;
} else {
  return false;
}

在这种情况下,这种if说法是多余的。语句中的表达式if已经是trueor false,所以可以直接返回:

return AllowableCharacters.indexOf(String.fromCharCode(k)) != -1;
于 2015-01-26T00:53:13.463 回答