我最近发现.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
当谈到迭代时,这两个数组应该是相同的,以不同的方式定义,但迭代的方式不同(参见第一句)
这就是我的问题,
- 有什么方法可以迭代有孔数组吗?
- 我怀疑这些的确切字节are实际上是不同的,这种奇怪的行为是由于 JavaScript 如何显示这些未定义的值,而不是
undefined
。我对么?这种异常现象有什么根本的解释吗?
非常欢迎任何帮助。谢谢!
有什么方法可以迭代有孔数组吗?
大多数(全部?)内置Array.prototype
函数会跳过稀疏数组中的空洞。
这意味着如果你想获得undefined
缺失索引的值 - 您需要首先将该数组转换为非稀疏数组。
在 ES2015 的帮助下,您可以使用数组迭代器。最短的方法是使用数组扩展语法:
[...array]
然后你可以对其应用映射运算符[...array].map(handler)
我怀疑它们的确切字节实际上是不同的,这种奇怪的行为是由于 JavaScript 如何显示这些未定义的值,而不是未定义的值。我对么?这种异常现象有什么根本的解释吗?
你是对的,它不包含undefined
明确的价值观。由于 JS 中的数组实际上是所谓的“内在对象”(或更短 - 只是对象),因此它们的索引只是这些对象的属性。因此,当您跳过索引时 - 该属性根本没有设置并且不存在。
这与访问不存在的对象属性相同:
var o = {};
o.foo // undefined
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)