增量运算符返回NaN

时间:2011-11-29 05:03:08

标签: javascript increment nan post-increment

我正在尝试使用++运算符增加变量,但我不断得到NaN,我不知道为什么。这是我的代码:

var wordCounts = { };
var x = 0
var compare = "groove is in the heart";
        var words = compare.split(/\b/);
        for(var i = 1; i < words.length; i++){
            if(words[i].length > 2){
                wordCounts["_" + words[i]]++;
            }
        }


alert(wordCounts.toSource());

5 个答案:

答案 0 :(得分:10)

wordCounts["_" + words[i]]的值最初是undefined所以当你使用它时,它会给你NaN。只需将您的代码更改为:

if (wordCounts["_" + words[i]]) {
    wordCounts["_" + words[i]]++;
} else {
    wordCounts["_" + words[i]] = 1;
}

答案 1 :(得分:2)

尝试类似......

var key = "_" + words[i];

if (wordCounts[key]) {
    wordCounts[key]++
} else {
    wordCounts[key] = 1;
}

您正在尝试增加undefined NaN。{/ 1}。

答案 2 :(得分:1)

为了能够使用++运算符(它取一个数字并将其递增1),目标需要首先得到一个数字。

尝试检查对象是否已定义,如果未通过将其值设置为1来初始化对象。

if ('undefined' === typeof wordCounts["_" + words[i]]) {
            wordCounts["_" + words[i]] = 0;
}

类似的东西:

var wordCounts = {};
var x = 0
var compare = "groove is in the heart";
var words = compare.split(/\b/);
for (var i = 1; i < words.length; i++) {
    if ('undefined' === typeof wordCounts["_" + words[i]]) {
        wordCounts["_" + words[i]] = 0;
    }
    if (words[i].length > 2) {
        wordCounts["_" + words[i]]++;
    }
}
alert( JSON.stringify( wordCounts ) );

答案 3 :(得分:1)

你基本上做的是

undefined++

这将导致......

NaN

...试

wordCounts["_" + words[i]] = (wordCounts["_" + words[i]]++ || 1);

由于NaN是&#34; falsey&#34;重视||将回落到1。

答案 4 :(得分:0)

你正试图增加一个对象(wordCounts [] ++)它不是一个数字所以它不能递增,这就是你得到那个错误的原因。你究竟想做什么(用简单的英语)?