将数组索引处的值更改为 falsey 会使数组稀疏吗?

  • 本文关键字:数组 falsey 索引 javascript
  • 更新时间 :
  • 英文 :


稀疏数组的例子:

// first
let array = new Array(3);
// second 
let array = [1,,3];
// third
let array = [1, 2, 3]; // not sparse
delete array[1]; // now it is
// fourth
let array = [1,2 3]; // not sparse
array[1000] = 'foo'; // now it is

将现有值设置为undefinednull是否也会使其稀疏?


我有一个对象数组,我需要以某种方式表达空插槽而不使其成为稀疏,因为它在现代浏览器引擎中被标记为稀疏,并且查找速度与对象键查找大致相同 - 它需要遍历原型链(比索引查找慢得多(。

No.数组对象在该数组索引处仍将具有 own-属性:

const arr = [1, 2, 3];
arr[0] = null;
arr[1] = undefined;
console.log(arr.hasOwnProperty('0'));
console.log(arr.hasOwnProperty('1'));

与稀疏数组相比,稀疏数组不会:

const arr = [ ,  , 3];
console.log(arr.hasOwnProperty('0'));
console.log(arr.hasOwnProperty('1'));

然后在现代浏览器引擎中将其标记为稀疏,查找速度与对象键查找大致相同 - 它需要遍历原型链(比索引查找慢得多(。

访问普通非稀疏数组的指示符 如果在实例上找不到指示符,则必须遍历原型链(尽管几乎永远不会找到某些内容(:

Object.prototype[4] = 'foo';
const arr = [0, 1];
console.log(arr[4]);

如果我是你,我会使用带有数字指示的对象来代替,以避免稀疏数组。如果您的脚本中存在性能瓶颈,那么几乎肯定不会出现在这段代码中(这意味着在这里担心性能不会真正有帮助(。

最新更新