2013-06-21 55 views
-1

如何證明數組的索引只是可枚舉的屬性?我知道,它出現在for in循環,但我的意思是:我怎麼能證明一個數組的索引是一個屬性?還有一個枚舉屬性?作爲屬性的數組索引

它們與通用對象屬性相同嗎?

+1

我不知道你的意思是什麼...... Object.getOwnPropertyNames([1,2]); // [「0」,「1」,「length」]'? –

+2

'Object.propertyIsEnumerable()'? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable – Ian

回答

2

你可以很容易地證明它是一個枚舉屬性。正如你所說,它出現在for in循環中。這就是「enumerable」的定義。如果你想另闢蹊徑,雖然:

var a = ['hello']; 

Object.getOwnPropertyDescriptor(a, '0') 

// {value: 1, writable: true, enumerable: true, configurable: true}

是的,他們就像任何其他對象的屬性,除非他們改變陣列的length如果過去的結束被創建。這是數組唯一不同的地方。

var a = []; 
a[0] = 5; 
a.length // 1 
+0

@mminitech謝謝你,這是有幫助的。我可以假設所有名稱下使用[]和與。操作員屬性 –

+1

@Maizere:是!這就是他們在那裏。 – Ryan

2

假設我正確地理解了你的問題,是的,數組索引與對象屬性實際上是一樣的。當您設置對象的屬性時,將運行內部[[DefineOwnProperty]]函數。該規範給出了在處理Array對象時使用的那個函數的modified version

各種檢查(保證屬性標識符是例如一個有效的數組索引)之後,執行以下操作:調用默認[[DefineOwnProperty]]內部方法的

  5.返回結果(8.12.9)上的一個傳球P說明作爲參數

這是 「正常」 的對象究竟發生了什麼。