by @zhangbao(zhangbao) #0106html
length
屬性的改變。ECMAScript® 2019 6.1.7 The Object Type 一節引入了數組索引範圍的概念。數組
An integer index is a String-valued property key that is a canonical numeric String (see 7.1.16) and whose numeric value is either +0 or a positive integer ≤ 2 - 1. An array index is an integer index whose numeric value i is in the range +0 ≤ i < 2 - 1.測試
首先,規範中定義了整數索引(integer index)的概念:即字符串屬性名(property key)經轉換後,其值是介於 +0 ≤ i < 2 - 1 之間的整數;而數組索引則是範圍介於 +0 ≤ i < 2 - 1 之間的整數索引,即 0
到 4294967294
之間的整數,超出這個範圍以外的都屬於無效值。code
咱們先用 4294967295
,這個超出範圍外的值試一下:htm
發現數組的 .length
屬性對此無動於衷,依舊是 0
。按道理來講,應該是 4294967296
纔是,說明咱們設置索引是無效的,這個索引值被做爲普通對象屬性設置了,沒有跟 length 屬性發生關係。對象
加下來我們拿最大的有效值 4294967294
作測試:blog
瞧,經賦值後,發現數組的 .length
值變爲 4294967295
了。length 屬性對這個索引處值的設置是有反應的。索引
上面在測試索引值時,雖然看見無效值索引值 4294967295
在打印 array
時,依舊能看到。但它其實只是做爲普通對象屬性存在。若是用 for...of
循環遍歷,發現並不會看見它。由於遍歷是基於 length
屬性的。length
屬性爲 0
,天然認爲數組裏是空的。ip
但設置的若是是有效索引值,狀況就不一樣了。
咱們設置了 arr[5]
的值後,數組的有效成員是 6 個:包含 5 個空位(empty value)和一個值 "xxx"
。圖中框出的就是遍歷數組 arr
後的結果。
(完)