javascript – 在数组中迭代未定义的方法

前端之家收集整理的这篇文章主要介绍了javascript – 在数组中迭代未定义的方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我最近发现.map没有迭代由有孔数组创建的未定义,数组的各个索引已定义,但有些不是:

// Holed
var array = [];
array[0] = 1;
array[2] = 3;
array // => [1,undefined,3];

// Not Holed
var array = [1,3];
array // => [1,3]; The "same" as Holed

当涉及到迭代时,这两个应该相同的数组,以不同的方式定义,以不同的方式迭代(参见第一个发送)

这是我的问题,

>有没有办法迭代有孔阵列?
>我怀疑它们的确切字节实际上是不同的,这种奇怪的行为是由于JavaScript如何显示未定义的这些值,而不是未定义的.我对么?对这种异常有任何潜在的解释吗?

非常欢迎任何帮助.谢谢!

最佳答案

Is there any way to iterate over the holed arrays?

多数(全部?)内置的Array.prototype函数在稀疏数组中跳过漏洞.

这意味着如果要获取缺失索引的未定义值,则需要先将该数组转换为非稀疏数组.

在ES2015的帮助下,您可以使用数组迭代器.最简单的方法是使用数组扩展语法:

[...array]

然后你可以将映射运算符应用于它[… array] .map(handler)

I suspect that the exact bytes of these are actually different,and this strange behavior is due to how JavaScript displays these values which are not defined,not undefined. Am I correct? Is there any underlying explanation for this anomaly?

你是对的,它没有明确地保存未定义的值.由于JS中的数组实际上被称为“内部对象”(或更短 – 只是对象),因此它们的索引只是这些对象的属性.因此,当您跳过索引时 – 该属性根本没有设置且不存在.

它与访问非现有对象属性时相同:

var o = {};
o.foo // undefined

猜你在找的JavaScript相关文章