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
后的结果。
(完)