稀疏数组的例子:
// 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
将现有值设置为undefined
或null
是否也会使其稀疏?
我有一个对象数组,我需要以某种方式表达空插槽而不使其成为稀疏,因为它在现代浏览器引擎中被标记为稀疏,并且查找速度与对象键查找大致相同 - 它需要遍历原型链(比索引查找慢得多(。
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]);
如果我是你,我会使用带有数字指示的对象来代替,以避免稀疏数组。如果您的脚本中存在性能瓶颈,那么几乎肯定不会出现在这段代码中(这意味着在这里担心性能不会真正有帮助(。