創建3個未定義的空數組。javascript數組 - 什麼是真正的表達式?
var a1 = [,,,];
var a2 = new Array(3);
從JavaScript:權威指南,
0 in a1 //true
0 in a2 //false
但是,在現實世界中的瀏覽器,得到不同的結果。 (IE8和Chrome 33 ...)
0 in a1 //false
0 in a2 //false
這是真的,書還是現實世界?
創建3個未定義的空數組。javascript數組 - 什麼是真正的表達式?
var a1 = [,,,];
var a2 = new Array(3);
從JavaScript:權威指南,
0 in a1 //true
0 in a2 //false
但是,在現實世界中的瀏覽器,得到不同的結果。 (IE8和Chrome 33 ...)
0 in a1 //false
0 in a2 //false
這是真的,書還是現實世界?
外貌喜歡這本書是錯的。正如你可以從specification看到,[,,,]
沒有任何值添加到陣列中:
生產ArrayLiteral:省音選擇]的評價如下:
- 讓陣列是創建新對象的結果,就像通過表達式new Array()一樣,其中數組是具有該名稱的標準內置構造函數。
- 讓墊是評估的結果Elision;如果不存在,則使用數字值零。
- 調用
[[Put]]
數組的內部方法,其參數爲「length」,pad和false。- 返回數組。
(「省音」是未由表達式之前或之後的,
。)
簡單來說:
,
,它基本上只是算他們,從1 所以,,,
結果在3length
到結果(例如3)。而這正是new Array(3)
所做的。
還有消隱元件的不太正式描述:
陣列元件可在開始時被省略,中間或元素列表的末尾。只要元素列表中的逗號前面沒有AssignmentExpression(即逗號在開頭或逗號之後),缺少的數組元素將有助於數組的長度並增加後續元素的索引。未定義數組元素。如果一個元素在數組末尾消失,那麼該元素不會影響數組的長度。
@ user2864740:這就是我鏈接到的。 –
接近頂端:「..丟失的[aka elided]數組元素有助於數組的長度並增加後續元素的索引。數組元素不*定義。」 – user2864740
哦,我看到........ –
數組構造函數(new Array(3)
)確實將length
屬性設置爲3,但不創建數組的任何成員 - 甚至未定義的值。
如果只有一個參數傳遞給Array構造函數,並且該參數爲Number,則構造函數將返回一個新的稀疏數組,其長度屬性設置爲參數的值。應該注意的是,只有新數組的長度屬性纔會這樣設置;數組的實際索引不會被初始化。
來源:http://bonsaiden.github.io/JavaScript-Garden/#array.constructor
測試,在鉻確實導致兩個假值...
的in
操作如果給定的鍵不存在,返回false:
var a1 = [1,,3,4];
0 in a1 // true
1 in a1 // false
看起來這本書是錯的。正如你可以從規範中看到的,http://es5.github.io/#x11.1.4,'[,,,]'不會爲數組添加任何值。 –
@ user2864740:不,'[,,,]'是**不**,[undefined,undefined,undefined,undefined]'。 –
@FelixKling它是未定義的 –