可以信任array.length吗?

时间:2018-06-20 01:29:00

标签: javascript

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++,这看起来确实很多余。

1 个答案:

答案 0 :(得分:5)

Array.length:

  

该值是一个无符号的32位整数,在数值上始终大于数组中的最高索引。

当您分配 undefined到数组的索引时,该索引将成为该数组的现有属性。但是,就像任何变量一样,它可以分配任何内容,包括nullundefined

如果遇到这种情况(您不应该-稀疏数组是一个糟糕的主意),则可以检查keyskeysvalues数组:

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));