布尔运算符在函数中的混淆

时间:2017-04-24 19:33:29

标签: javascript boolean

我写了一个函数来找到传递的字母范围内的缺失字母并将其返回。如果范围内存在所有字母,则应返回undefined。

这是我的代码:

function fearNotLetter(str) {
  for (var i = 0; i < str.length;i++ ) {
    if(str.charCodeAt(i+1) - str.charCodeAt(i)>1) {
     return String.fromCharCode(str.charCodeAt(i)+1);
    }
  }
 return undefined;
} 
fearNotLetter("bcd");

现在此代码可以使用,但之前在 if语句中,而不是&gt; ,我使用了!== ,这个功能不适用于我应该获得undefined的案例。而不是它,我收到了一封信或一些符号。

为什么会发生这种情况,为什么上面的代码能够正常运行?

1 个答案:

答案 0 :(得分:4)

在循环的最后一次迭代中,这一行:

if(str.charCodeAt(i+1) - str.charCodeAt(i)>1) {

...将NaN与字符串中的最后一个字符进行比较,因为str.charCodeAt(i+1)正在尝试将代码超出最后一个字符。

NaN > anyNumber始终为false,但NaN !== anyNumber始终为true

您可能希望在< str.length - 1停止循环。