let arr = [];
arr[3] = undefined;
console.log('length: ',arr.length);
if(arr.length === 0){
//I wanted to come here
}else{
//But instead coming here
console.log('>>',arr[0]);
console.log('>>',arr[3]);
}
我刚刚注意到,如果我们不使用push
函数将项目插入数组,即使分配了undefined
,长度也会被更新。显然,上面显示的arr
里面什么也没有。
在条件检查期间,我们如何真正确定数组为空?我只能想到手动遍历数组并执行count++
,这看起来确实很多余。
答案 0 :(得分:5)
该值是一个无符号的32位整数,在数值上始终大于数组中的最高索引。
当您分配 undefined
到数组的索引时,该索引将成为该数组的现有属性。但是,就像任何变量一样,它可以分配任何内容,包括null
和undefined
。
如果遇到这种情况(您不应该-稀疏数组是一个糟糕的主意),则可以检查keys
或keys
和values
数组:
const arr = [];
arr[3] = undefined;
console.log(Object.keys(arr)); // Not empty!
const allArrElmsAreUndefined = arr => Object.values(arr).every(item => item === undefined);
console.log(allArrElmsAreUndefined(arr));