2014-05-01 81 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

相關問題