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

Javascript 我需要帮助弄清楚我为什么';我在这个函数中得到NaN,javascript,nan,Javascript,Nan,函数多路计数(str){ var finalObj={}; 对于(变量i=0;i

函数多路计数(str){
var finalObj={};
对于(变量i=0;i
为什么这些值会变成NaN

str[i]
表示每次迭代中的不同字符。当你像
那样否定这个字符时!str[i]
变为
false
。因此,条件(
if(finalObj中为false)
)总是
false
,只执行
else
部分。此时,
finalObj[str[i]
未定义的
。最后,递增
undefined
undefined++
)可以得到
NaN

尝试使用,返回一个布尔值,指示对象是否将指定的属性作为其自己的属性:

函数多路计数(str){
var finalObj={};
对于(变量i=0;ilog(multiplettercount(“SomeWord”)您可以像这样简化代码

函数多路计数(str){
var finalObj={};
对于(变量i=0;ilog(multiplettercount(“SomeWord”)请注意,解决此问题的方法有很多种,所有这些都取决于您需要函数的健壮性

为了简单起见,不要使用
if(!str[i]在finalObj中)
,而是使用
if(!(str[i]在finalObj中))

怎么样

let string='SomeWord';
const result=string.split(“”).reduce((a,b)=>{
a[b]?a[b]+:a[b]=1
返回a;
}, {});

控制台日志(结果)!finalObj中的str[i]
与finalObj中的
(!str[i])相同。将
(!str[i]in finalObj)
更改为
(!(str[i]in finalObj))
我不推荐这种方式,它不是非常向前兼容的(如果
finalObj[str[i]==0
),它只是检查属性是否已经存在。如果未定义,则返回false<代码>{}
将返回false,因为该属性不存在。如果该属性未定义,则返回false、false、null、0。。。(许多假值)在这种情况下,我不建议使用它,因为
0
false-ness@Joven28不,它将为其他事情返回false,如上面所评论的
0
。我知道false==0。但由于该属性的初始值为1,因此它不可能遇到finalObj[str[i]]==0。你能解释一下为什么会遇到finalObj[str[i]]==0吗?。对不起,我就是不明白:)