JS:數組索引的有效範圍

by @zhangbao(zhangbao) #0106html

概覽

  • 數組索引的有效範圍是介於 +0 ≤ i < 2 - 1 之間的天然數。
  • 設置的無效索引,不會觸發 length 屬性的改變。

image.png

正文

規範中的定義

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 之間的整數索引,即 04294967294 之間的整數,超出這個範圍以外的都屬於無效值。code

索引測試

** cdn

無效值測試

咱們先用 4294967295,這個超出範圍外的值試一下:htm

發現數組的 .length 屬性對此無動於衷,依舊是 0。按道理來講,應該是 4294967296 纔是,說明咱們設置索引是無效的,這個索引值被做爲普通對象屬性設置了,沒有跟 length 屬性發生關係。對象

有效值測試

加下來我們拿最大的有效值 4294967294 作測試:blog

瞧,經賦值後,發現數組的 .length 值變爲 4294967295 了。length 屬性對這個索引處值的設置是有反應的。索引

額外說明

上面在測試索引值時,雖然看見無效值索引值 4294967295 在打印 array 時,依舊能看到。但它其實只是做爲普通對象屬性存在。若是用 for...of 循環遍歷,發現並不會看見它。由於遍歷是基於 length 屬性的。length 屬性爲 0,天然認爲數組裏是空的。ip

image.png

但設置的若是是有效索引值,狀況就不一樣了。

image.png

咱們設置了 arr[5] 的值後,數組的有效成員是 6 個:包含 5 個空位(empty value)和一個值 "xxx"。圖中框出的就是遍歷數組 arr 後的結果。

(完)

相關文章
相關標籤/搜索