2014-05-01 76 views
0

我觉得很奇怪,为什么Array(100).map((_,i)=> i + 1)不返回[1,2,...,100]?

Array(100).map(function (_, i) { return i + 1; }) 

回报[undefined, undefined, ... , undefined]而非[1, 2, ..., 100],我。即映射没有发生。相反,从100 undefined作品(demo)的数组开始。

Array(100)是否会返回100以外的东西undefined元素?

+0

你在哪里测试?我认为'(v,i)=> i + 1'语法是ECMAScript 6 /“Harmony”语法,我不知道它是否在当前所有浏览器版本中都实现过。此外,['Array.prototype.map'文档](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)。 –

+0

显示一些代码以提供图片,以了解您在哪些方面获得此内容。 –

+0

@Cupcake,将其更改为函数(){} - 它不会有所作为。目前在Firefox中使用箭头语法。 – Pavlo

回答

4

Array.prototype.map reference

“回调仅对于已分配 值的数组的索引调用;它不被调用为其 已被删除或该索引是未定义的,那些具有从未被分配的值“。

您使用Array(100)创建的数组长度为100,但其中没有项目。另一方面,包含undefined的100个项目的数组具有100个具有值的项目(即值undefined),因此将针对每个项目调用回调。

+0

好吧,看起来像这里有两个不同的'未定义':没有定义和定义'未定义的值,对吧? – Pavlo

+2

@Pavlo:的确如此。如果你访问一个没有设置的数组项,你会得到'undefined'值,但这并不意味着它的值是undefined。代码'var v = Array(100); alert(0 in v);'将提醒'false',因为没有索引为0的项目。 – Guffa

相关问题