Оператор приращения возвращает NaN - PullRequest
5 голосов
/ 29 ноября 2011

Я пытаюсь увеличить переменную с помощью оператора ++, но в результате получаю 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 ]

10 голосов
/ 29 ноября 2011

Значение wordCounts["_" + words[i]] изначально undefined, поэтому, когда вы ++ его, оно дает вам NaN. Просто измените свой код на:

if (wordCounts["_" + words[i]]) {
    wordCounts["_" + words[i]]++;
} else {
    wordCounts["_" + words[i]] = 1;
}
2 голосов
/ 29 ноября 2011

Попробуйте что-то вроде ...

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

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

Вы пытаетесь увеличить undefined, что дает вам NaN.

1 голос
/ 29 ноября 2011

То, что вы в основном делаете, это

undefined++

Что приведет к ...

NaN

Try ...

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

Поскольку NaN является значением "фальси", то || вернется к 1.

1 голос
/ 29 ноября 2011

Чтобы иметь возможность использовать оператор ++ (который принимает число и увеличивает его на единицу), цель должна сначала получить число.

Попытаться проверить, определен ли объект,и если не инициализировать его, установив его значение 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 ) );
0 голосов
/ 29 ноября 2011

Вы пытаетесь увеличить объект (wordCounts [] ++), это не число, поэтому его нельзя увеличить, поэтому вы получаете эту ошибку.Что вы на самом деле пытаетесь сделать (простым английским языком)?

...