javascript - 将数组索引处的值更改为 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 是否也会使其稀疏?

<小时/>

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

最佳答案

没有。数组对象在该数组索引处仍将具有自己的属性:

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

it's then flagged as sparse in modern browser engines and lookup speed is about the same as object key lookup - it needs to walk the prototype chain (a lot slower than index lookup).

访问普通非稀疏数组的索引如果在实例上找不到索引,则必须遍历原型(prototype)链(尽管几乎永远不会找到某些东西):

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

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

关于javascript - 将数组索引处的值更改为 falsey 是否会使数组变得稀疏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59279783/

相关文章:

javascript - 如何在javascript中通过类名获取html元素

javascript - Netbeans 额外不需要的代码提示

javascript - 使用 Javascript 将 MySQL 日期格式转换为 DD/MM/YY 日期格式

javascript - 动态创建的样式元素

javascript - 为什么我的 socket.io 应用程序在 Raspberry pi 上运行时会立即断开连接?

javascript - jQuery fadeOut() 和 fadein() 计时

javascript - 当我运行 Mocha 测试时,我总是收到错误 : connect ECONNREFUSED

javascript - 所有测试文件中的 Jest Mock 用户模块

javascript - 这段代码 "obj && obj.myFunction();"在 javascript 中的作用是什么?

javascript - Angular 6 在客户端以 pdf 格式保存 Material 向导数据