我需要帮助弄清楚为什么我在这个函数中得到NaN

Adr*_*cas 3 javascript nan

function multipleLetterCount(str){
  var finalObj = {};
  for(var i = 0; i < str.length; i++){
    if(!str[i] in finalObj){
        finalObj[str[i]] = 1;
    } else {
        finalObj[str[i]]++;
    }
}
return finalObj;
}

console.log(multipleLetterCount("SomeWord"));
Run Code Online (Sandbox Code Playgroud)

我需要帮助弄清楚为什么这些价值会以NaN的形式出现.谢谢

Mam*_*mun 5

为什么这些价值观会以NaN的形式出现

str[i]表示每次迭代中的不同字符.当你否定那个角色时!str[i]就会变成这样false.因此,condition(if(false in finalObj))始终false只执行else部分.此时finalObj[str[i]]undefined.最后,递增undefined(undefined++)给你NaN.

尝试使用Object.prototype.hasOwnProperty()返回一个布尔值来指示对象是否具有指定的属性作为其自己的属性:

function multipleLetterCount(str){
  var finalObj = {};
  for(var i = 0; i < str.length; i++){
    if(!finalObj.hasOwnProperty(str[i])){
        finalObj[str[i]] = 1;
    } else {
        finalObj[str[i]]++;
    }
  }
  return finalObj;
}

console.log(multipleLetterCount("SomeWord"));
Run Code Online (Sandbox Code Playgroud)