javascript - 为什么 javascript 在浏览器控制台中显示 (66) [empty × 65, {...}]?
问题描述
一些常见的问题是,即使里面有内容,为什么 Array 看起来为零。我现在的问题有点奇怪。为什么我看到
(66) [empty × 65, {…}]
在 chrome 控制台中,即使数组内部至少有 1 个数组值?
解决方案
这就是当您有一个稀疏数组时所看到的- 定义了一些索引,但一些低于未定义(或曾经分配给)的已定义索引的索引,例如:
const arr = [];
arr[65] = 'foo';
console.log(arr);
(在浏览器控制台中查看这两个片段的结果,片段控制台将不可见)
请注意,这undefined
与前 65 个索引中的文字值不同,后者将显示为undefined
而不是empty
:
const arr = new Array(65).fill(undefined);
arr[65] = 'foo';
console.log(arr);
但是,稀疏数组几乎从来都不是一个好主意——如果你看到这个,这表明你应该修复代码以避免稀疏数组。考虑另一种结构,也许是一个带有数字键的对象:
const obj = {
'65': 'foo'
};
程序员会期望数组是元素的有序集合——如果一个集合在有序集合的顶部没有任何值(不仅仅是undefined
,而是没有任何值),这意味着什么?它只是没有多大意义 - 虽然可能,但这样的构造不是数组的用途。
正如 Kaiido 所指出的,空元素不会被数组方法迭代,例如forEach
:
const arr = [];
arr[65] = 'foo';
arr.forEach((item, i) => {
console.log(item, i);
});
这有点道理,但仍然不直观(如果您不亲自尝试代码或查看规范,您会确定这一点吗?)。人们通常会期望forEach
回调的第一次迭代的索引为 0。
推荐阅读
- javascript - 在按钮单击时触发回车键
- mysql - phpmyadmin 拒绝创建表(表已存在)但我看不到它
- javascript - AlpineJs:无法读取未定义的属性(读取“焦点”)
- javascript - JavaScript,2D 游戏引擎:根据 X 和 Y 速度之间的差异,摆动角度(上、右、下、左)以匹配对角线运动
- javascript - 第一个侦听器下方的 Ajax 侦听器未运行
- python - 遍历 Jira API Url
- html - 将 html 表格复制粘贴到 gsheet 中无法正常工作
- python - 如何在不使用 numpy 或 zip 的情况下找到两个列表之间的欧几里德距离?
- python - 拥有用户定义对象的 Pydantic 方式
- python - 为什么 numpy np.linalg.inv 在找到矩阵的逆时返回两个接近但不同的结果?