-1

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

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

4

2 回答 2

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
于 2013-06-21T13:57:22.983 回答
2

假设我正确理解了您的问题,是的,数组索引实际上与对象属性相同。当您设置对象的属性时,内部[[DefineOwnProperty]]函数将运行。规范给出了处理 Array 对象时使用的该函数的修改版本。

经过各种检查(例如,确保属性标识符是一个有效的数组索引),它执行以下操作:

 5. 返回在 A 上调用默认的 [[DefineOwnProperty]] 内部方法 (8.12.9) 并传递PDescThrow作为参数的结果

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

于 2013-06-21T13:59:44.507 回答