数组的动态增长时什么情况下 length 的值会改变

VRAIN
  • 154

数组的动态增长时什么时候 length 的值会改变?

第一种情况:


如上图所示的代码在浏览器中结果如下:



从上图可以看到:
alert(arr[2])的结果是 3.
alert(arr[34])的结果是 undefined.
alert(arr.length)的结果是 4.
可以看到虽然arr[34]的值有了, 但是 length 属性的值并没有改变.

第二种情况:


如上图所示的代码, 在第四行给 arr[34] 赋了一个值: 34.
在浏览器中结果如下:



从上图可以看到:
alert(arr[2])的结果是 3.
alert(arr[34])的结果是 undefined.
alert(arr.length)的结果是 35.
这里给arr[34]赋值为34, 此时数组的 length 属性变为了 35.

所以, 是不是只有给数组某个位置赋具体值之后, length 属性的值才能够改变呢?

回复
阅读 2.2k
5 个回答
✓ 已被采纳

实名反对以上所有答案

var arr = new Array(32);

console.log(arr[31], arr[32], arr.length); // undefined undefined 32

arr[1023] = undefined;

console.log(arr[31], arr[32], arr.length); // undefined undefined 1024

arr.length = 2048;

console.log(arr[31], arr[32], arr.length); // undefined undefined 2048

console.log(arr); // [1023: undefined]

Array is an Object

When you access a property that does not exist in the object, javascript will return undefined.

However, undefined can be assigned manually, which will be handled as described in ECMAScript Language Specification.

Assigning a property that does not exist before will result in array length increment, if the property name is an array index and the index is out of bound.

Assigning to length property will result in array length changing as well.

Otherwise, it will be handled as normal object property.

是的,只有赋值了之后才会改变数组长度的。

前者,arr[34]你并没有给他赋值,只是去查找,不存在,所以undefined
后者,你为arr[34]=34,赋值了,从arr[4]到arr[33]会填充值为undefined,所以长变为35

虽然arr[34]的值有了

你说错了。arr[34]的值还是没有。

不问苍生问鬼神
  • 2
新手上路,请多包涵

Arrray 类型你对没有初始化的值访问的时候,他会返回undefined,但是他并不意味着这里已经存在值,所以你访问length的时候,并不会显示,但是只要你对某项初始化,那么他就会反应到length上

宣传栏