我最近发现,.map没有迭代由带孔数组创建的未定义,数组的各个索引已定义,但有些不是:
// Holed
var array = [];
array[0] = 1;
array[2] = 3;
array // => [1, undefined, 3];
// Not Holed
var array = [1, undefined, 3];
array // => [1, undefined, 3]; The "same" as Holed
Run Code Online (Sandbox Code Playgroud)
当涉及到迭代时,这两个应该相同的数组,以不同的方式定义,以不同的方式迭代(参见第一个发送)
这是我的问题,
undefined.我对么?对这种异常有任何潜在的解释吗?非常欢迎任何帮助.谢谢!
有什么方法可以迭代有孔数组吗?
大多数(全部?)内置Array.prototype函数都会跳过稀疏数组中的漏洞。
这意味着如果您想获取undefined缺失索引的值 - 您需要首先将该数组转换为非稀疏数组。
在 ES2015 的帮助下,您可以使用数组迭代器。最短的方法是使用数组扩展语法:
[...array]
Run Code Online (Sandbox Code Playgroud)
然后你可以对其应用映射运算符[...array].map(handler)
我怀疑这些确切的字节实际上是不同的,这种奇怪的行为是由于 JavaScript 如何显示这些未定义的值,而不是未定义的值。我对么?这种异常现象有什么根本的解释吗?
你是对的,它不包含undefined明确地保存这些值。由于 JS 中的数组实际上是所谓的“内在对象”(或更短 - 对象),因此它们的索引只是这些对象的属性。因此,当您跳过索引时 - 该属性根本没有设置并且不存在。
这与访问不存在的对象属性相同:
var o = {};
o.foo // undefined
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1543 次 |
| 最近记录: |