如何以及为什么使用字符串键分配值在JS数组中有效?

时间:2018-02-24 18:20:41

标签: javascript arrays

请参阅此代码:

var arr = [];
arr.foo = 'bar';
console.log(arr.foo);

现在,我们看到arr.foo没有抛出错误并且有效,但从技术上讲它应该抛出错误,为什么不呢?

另外,上面的内容如何在内存中表示,考虑到数组块主要是在连续位置分配内存和索引的偏移量,这是如何工作的?

1 个答案:

答案 0 :(得分:3)

  

......技术上它应该抛出错误......

不,它的工作完全如the specification中所述。

它起作用是因为standard JavaScript arrays aren't really arrays,*它们只是由Array.prototype支持的对象,具有特殊的length属性,并且对array indexes的属性名称进行特殊处理。规格。具有任何其他名称的属性只是普通的对象属性,而不是数组条目。

由于数组是对象,因此它们可以具有非数组条目属性,就像任何其他对象一样。

FWIW,数组索引的定义是:

  

整数索引是一个字符串值属性键,它是一个规范数字字符串(见7.1.16),其数值为+0或正整数≤2 53 -1。 数组索引整数索引,其数值i在+0≤i<1的范围内。 2 32 -1。

请注意typed arrays是真正的数组;但它们也是对象,你也可以为它们添加非数组输入属性。

* (这是我贫血的小博客上的帖子)