[英]How and why does assigning values with string keys work in JS arrays?
參見以下代碼:
var arr = []; arr.foo = 'bar'; console.log(arr.foo);
現在,我們看到arr.foo
不會引發錯誤並且可以工作,但是從技術上講它應該引發錯誤,所以為什么不這樣做呢?
另外,上述內容如何在內存中表示,考慮到數組塊大多是在連續位置分配了帶有偏移索引的內存,這在這里如何工作?
從技術上講它應該拋出一個錯誤
不,它完全按照規范中的描述工作。
之所以可以使用它,是因為標准的JavaScript數組並不是真正的數組 ,*只是由Array.prototype
支持的對象,具有特殊的length
屬性和對根據規范作為數組索引的屬性名稱的特殊處理。 具有任何其他名稱的屬性只是普通的對象屬性,而不是數組條目。
由於數組是對象,因此它們可以具有非數組輸入屬性,就像其他任何對象一樣。
FWIW,數組索引的定義是:
整數索引是一個字符串值的屬性鍵,它是規范的數字字符串(請參見7.1.16),其數值為+0或正整數≤2 53 -1。 數組索引是整數索引,其數值i在+0≤i <2 32 -1的范圍內。
注意, 類型化數組是真實數組; 但是它們也是對象,您也可以向它們添加非數組輸入屬性。
* (這是我貧乏的小博客上的帖子)
數組是對象,您可以在編寫時將不同種類的對象放入字符串之類的對象中,例如字典,字典,其他一般對象等。
arr.foo="bar"
您正在為名稱訪問foo輸入值“ bar”。 您的變量arr現在是
arr={foo:"bar"}
你可以,如果你想從這里W3C的更多信息檢查TE頁像你這樣arr.foo訪問https://www.w3schools.com/js/js_arrays.asp在部分數組對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.