2013-01-16 21 views
-1

有人可以向我解釋這段代碼和'arr'的類型是什麼。 我知道一個數組是一個對象,但這是一個數組或JavaScript中的對象?

  1. 爲什麼[類]顯示爲數組,如果它像一個對象
  2. arr.length返回3.如何?

    var arr = [0, 1, 3]; 
    arr.name = "asdf"; 
    
    console.log(arr[1] + " " + arr.name + " " + arr.length); 
    // Returns-> 1 asdf 3 
    
    Object.prototype.toString.call(arr); 
    // Returns-> "[object Array]" 
    

請告訴我這裏的交易嗎?


這已經回答了良好的細節在此SO發佈

Are Javascript arrays primitives? Strings? Objects?

+0

'Object.prototype.toString.call([]);'總會給' 「[對象數組]」',沒有什麼特別的附加屬性,以它。長度爲3,因爲您添加了3個元素('0,1,3')。 – jbabey

回答

0

JavaScript數組是專用對象,所以它們都是數組和對象。所以你可以添加屬性給他們像其他任何對象。 length屬性只包含數字屬性,因此添加name等任意屬性不會影響它。

0

var arr = [0, 1, 3]僅僅是var arr = Array.new(0, 1, 3)語法糖。這是相同的東西,並且因此arrArray,和Array一個實例是一個對象:

var arr = [0, 1, 3]; 
typeof arr; // returns "object" 
arr instanceof Array; // returns true 

Array覆蓋lenght()功能只計算數組中元素的數目;當您設置arr. name = "asdf"時,您正在爲此特定對象設置屬性,但它不會被length()函數計數。

0

所有javascript變量都是對象。像這樣的一些對象也是數組。

所以你可以設置屬性(因爲它是一個對象),也可以查看特定於數組的屬性(因爲它是一個數組)。

0

對於1,見15.4.5 「陣列實例的屬性」:

Array實例從數組原型對象和他們的[[類]]內部屬性值繼承屬性爲 「陣列」。數組實例也具有以下屬性。

對於2,見15.4.5.2「長度」

此Array對象的長度屬性是一個數據屬性,其值總是數值上比每個可刪除的屬性的名字的名字更大是一個數組指數。

相關問題