你如何证明数组的索引只是可枚举的属性?我知道,它出现在for in
循环期间,但我的意思是:我怎样才能证明数组的索引是一个属性?还有一个可枚举的属性?
它们与一般对象属性相同吗?
你如何证明数组的索引只是可枚举的属性?我知道,它出现在for in
循环期间,但我的意思是:我怎样才能证明数组的索引是一个属性?还有一个可枚举的属性?
它们与一般对象属性相同吗?
你可以很容易地证明它是一个可枚举的属性。正如你所说,它显示在一个for in
循环中。这就是“可枚举”的定义。但是,如果您想要另一种方式:
var a = ['hello'];
Object.getOwnPropertyDescriptor(a, '0')
// {value: 1, writable: true, enumerable: true, configurable: true}
是的,它们就像任何其他对象属性一样,除了length
如果创建了一个超出末尾的数组,它们会更改数组。这是数组的唯一不同之处。
var a = [];
a[0] = 5;
a.length // 1
假设我正确理解了您的问题,是的,数组索引实际上与对象属性相同。当您设置对象的属性时,内部[[DefineOwnProperty]]
函数将运行。规范给出了处理 Array 对象时使用的该函数的修改版本。
经过各种检查(例如,确保属性标识符是一个有效的数组索引),它执行以下操作:
5. 返回在 A 上调用默认的 [[DefineOwnProperty]] 内部方法 (8.12.9) 并传递P、Desc和Throw作为参数的结果
这正是“正常”对象发生的情况。