检查javascript数组中的空值时出现奇怪的行为

时间:2016-03-24 12:24:23

标签: javascript arrays

我有一个带有空值的数字数组。我想得到非空元素数的数量。我的代码:

var arrayWithNulls = [null, 8, 3, null, 5, 0, 9];

var cleanArray = [];

for(i = 0; i < arrayWithNulls.length; i++){ 
    if(arrayWithNulls[i])
        cleanArray.push(arrayWithNulls[i]);
}

console.log(cleanArray.length);

但是我得到4而不是5。我错过了什么?

2 个答案:

答案 0 :(得分:3)

您收到此行为是因为0是一个假值。

如果代码仅包含数字,则可以将代码更改为以下代码:

var arrayWithNulls = [null, 8, 3, null, 5, 0, 9];

var cleanArray = [];
for(i = 0; i < arrayWithNulls.length; i++){ 
    if(typeof arrayWithNulls[i] === 'number')
        cleanArray.push(arrayWithNulls[i]);
}
document.write(cleanArray.length);

这些是JS中的虚假值供您参考:     false, null, undefined, '', 0, NaN

答案 1 :(得分:2)

为了计算,我建议使用Array#reduce()和数字变量代替数组而不是长度。

&#13;
&#13;
var arrayWithNulls = [null, 8, 3, null, 5, 0, 9],
    nullCount = arrayWithNulls.reduce(function (r, a) {
        return r + +(a === null);
    }, 0);

document.write(nullCount);
&#13;
&#13;
&#13;