[英]How and why does assigning values with string keys work in JS arrays?
参见以下代码:
var arr = []; arr.foo = 'bar'; console.log(arr.foo);
现在,我们看到arr.foo
不会引发错误并且可以工作,但是从技术上讲它应该引发错误,所以为什么不这样做呢?
另外,上述内容如何在内存中表示,考虑到数组块大多是在连续位置分配了带有偏移索引的内存,这在这里如何工作?
从技术上讲它应该抛出一个错误
不,它完全按照规范中的描述工作。
之所以可以使用它,是因为标准的JavaScript数组并不是真正的数组 ,*只是由Array.prototype
支持的对象,具有特殊的length
属性和对根据规范作为数组索引的属性名称的特殊处理。 具有任何其他名称的属性只是普通的对象属性,而不是数组条目。
由于数组是对象,因此它们可以具有非数组输入属性,就像其他任何对象一样。
FWIW,数组索引的定义是:
整数索引是一个字符串值的属性键,它是规范的数字字符串(请参见7.1.16),其数值为+0或正整数≤2 53 -1。 数组索引是整数索引,其数值i在+0≤i <2 32 -1的范围内。
注意, 类型化数组是真实数组; 但是它们也是对象,您也可以向它们添加非数组输入属性。
* (这是我贫乏的小博客上的帖子)
数组是对象,您可以在编写时将不同种类的对象放入字符串之类的对象中,例如字典,字典,其他一般对象等。
arr.foo="bar"
您正在为名称访问foo输入值“ bar”。 您的变量arr现在是
arr={foo:"bar"}
你可以,如果你想从这里W3C的更多信息检查TE页像你这样arr.foo访问https://www.w3schools.com/js/js_arrays.asp在部分数组对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.