5

我正在尝试使用++运算符增加一个变量,但我不断得到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());
4

5 回答 5

10

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

if (wordCounts["_" + words[i]]) {
    wordCounts["_" + words[i]]++;
} else {
    wordCounts["_" + words[i]] = 1;
}
于 2011-11-29T05:06:04.027 回答
2

尝试类似...

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

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

您正在尝试增加undefined哪个给您NaN

于 2011-11-29T05:08:46.673 回答
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 ) );
于 2011-11-29T05:05:28.690 回答
1

你基本上在做的是

undefined++

这将导致...

NaN

尝试...

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

由于NaN是“假”值,|| 将回落到 1。

于 2011-11-29T05:05:49.253 回答
0

您正在尝试增加一个对象 (wordCounts[]++),它不是一个数字,因此无法增加,这就是您收到该错误的原因。你实际上想做什么(用简单的英语)?

于 2011-11-29T05:05:30.033 回答