数组元素读和写:
数组的长度:
数组是对象的特殊形式,可以为其创建任意名字的属性。
索引都是属性名,但只有在0~2^32-2之间的整数属性名才是索引。
如果使用的属性是数组的索引,数组的特殊行为就是将根据需要更新他们的length属性值。
注意:索引是负数或非整数,索引中数值转换为字符串。
非负整数的字符串,就当作数组索引,而非对象属性。
稀疏数组:
<span style="font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;">a = new Array(5)
a = [];
a[1000] = 0;</span></span>
在
数组直接量中省略值时不会创建稀疏数组。省略的元素在数组中是存在的,其值为undefined。
<span style="font-size:18px;"><span style="font-family:Microsoft YaHei;">var a1 = [,,,] //a1[undefined,undefined,undefined]
var a2 = new Array(3) //该数组根本没有元素</span></span>
省略数组直接量中的值时([1,,3]),这时所得的数组也是稀疏数组,省略掉的值是不存在的。
<span style="font-family:Microsoft YaHei;">var a1 = [,] //此数组没有元素,长度是1.</span>
数组的长度:
在数组中,找不到一个元素的索引值大于或等于它的长度
两个特殊行为:索引i大于或等于现有数组的长度时,length属性的值将设置为i+1。
设置length属性为一个小于当前长度非负整数n时,当前数组中那些索引值大于或等于n的元素 将从中删除。
可以用object.defineProperty()让数组的length属性变成只读的。
<span style="font-size:18px;"><span style="font-family:Microsoft YaHei;">a = [1,2,3]
Object.defineProperty(a,"length",
{writable:false}) //让length属性只读
a.length = 0 //a不会改变</span></span>