如何证明数组的索引只是可枚举的属性?我知道,它出现在for in
循环期间,但我的意思是:我怎样才能证明数组的索引是属性?还有一个可枚举的财产?
它们与一般对象属性相同吗?
答案 0 :(得分:2)
你可以很容易地证明它是一个可枚举的属性。如你所说,它出现在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
答案 1 :(得分:2)
假设我已正确理解你的问题,是的,数组索引实际上与对象属性相同。设置对象的属性时,将运行内部[[DefineOwnProperty]]
函数。该规范给出了在处理Array对象时使用的该函数的modified version。
经过各种检查(例如,为了确保属性标识符是有效的数组索引),它执行以下操作:
5.返回在传递 P , Desc 和投掷的A上调用默认[[DefineOwnProperty]]内部方法(8.12.9)的结果作为参数
这正是“正常”对象所发生的情况。