首页 > 解决方案 > javascript中数组的长度是如何决定的?为什么这段代码中数组对象 person 的长度是 1?

问题描述

var person = [];
person.name = "Mr. White";
person.job= "Engineer";
person.push(5);

person.length 的答案是什么,为什么?

标签: javascriptarrays

解决方案


数组在属性方面有一些特殊的行为.length。正如规范所描述的:

每个 Array 对象都有一个不可配置的“length”属性,其值始终是小于 232的非负整数。“length”属性的值在数值上大于其名称为数组索引的每个属性的名称;每当创建或更改 Array 对象的自身属性时,都会根据需要调整其他属性以保持此不变性。具体来说,每当添加名称为数组索引的自己的属性时,“长度”属性的值就会改变

“数组索引”是 0 到 之间的整数2 ** 32 - 1

person数组的属性中,最高(也是唯一的)数组索引属性是5您推送的属性,它位于索引 0 处。

var person = [];
person.name = "Mr. White";
person.job= "Engineer";
person.push(5);

console.log(person[0]); // 5
console.log(person.hasOwnProperty(0)); // true
console.log(person.hasOwnProperty(1)); // false
// so the highest array index property that exists is 0

因此,数组的长度是索引的一加:0 + 11

和属性不是数组索引namejob因此在识别length.


推荐阅读