数组索引作为属性

时间:2013-06-21 13:50:00

标签: javascript

如何证明数组的索引只是可枚举的属性?我知道,它出现在for in 循环期间,但我的意思是:我怎样才能证明数组的索引是属性?还有一个可枚举的财产?

它们与一般对象属性相同吗?

2 个答案:

答案 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)的结果作为参数

这正是“正常”对象所发生的情况。