首页 > 解决方案 > 我需要帮助弄清楚为什么我在这个函数中得到 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"));

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

标签: javascriptnan

解决方案


为什么这些值会以 NaN 出现

str[i]在每次迭代中代表不同的字符。当你否定那个字符时!str[i],就变成了false。因此,条件 ( if(false in finalObj)) 始终是false并且只执行else部分。此时finalObj[str[i]]undefined。最后,递增undefined( undefined++) 为您提供NaN.

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

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"));


推荐阅读