2014-10-02 89 views
2

在Chrome的JavaScript控制檯,當我評估以下表達式:爲什麼具有隱式未定義值的數組返回N-1長度?

[,,]

它返回:[undefined × 2]

當我評價:

[,,].length;

它返回2

爲什麼它不包含3個未定義的值?這是由Comma Operator評估引起的嗎?

+2

尾隨逗號是有效的,想到的'[1,2]。length' – elclanrs 2014-10-02 06:40:04

+0

@elclanrs你是在暗示這是旨在簡化解析? – Peter 2014-10-02 07:14:37

回答

3

忽略數組定義中的尾隨逗號。這就是ECMAScript規範所說的:

版本5闡明瞭一個事實,即ArrayInitialiser末尾的尾隨逗號不會添加到數組的長度。

reference(第3段)。並且

未定義編輯數組元素。如果一個元素在數組末尾消失,那麼該元素不會影響數組的長度。

reference

1

這是因爲當你把逗號,瀏覽器將其解釋爲:

[undefined,undefined,] 

兩個逗號意味着有至少兩個值的存在,但由於用戶沒有提供的值,他們會來出來是未定義的,但作爲值存在(最少兩個,因爲有兩個逗號)它會給出長度兩個,因爲存在兩個未定義的值。

請記住,它不是一個空數組..空數組被定義爲[] ..再次,兩個逗號告訴瀏覽器值是未定義的,因此你得到的是輸出。

var arr = [,,]; 
alert(arr[0]); //undefined 
alert(arr[1]); //undefined 
arr.push(1); 
alert(arr[2]); //1 
相關問題