为什么下面的枚举是正确的?
var arr = [];
arr[0] = 'foo';
arr['1'] = 'bar';
arr.forEach(v => console.log(v)); // foo, bar
arr[1]
和 arr['1']
也可以。这是 Array
的一个特性,将整数对应的字符串映射到它们的整数值吗?
最佳答案
这是因为 Javascript 中的数组只是带有一些专用语法糖的对象。
比较:
var arr = [];
arr[0] = 'foo';
arr['1'] = 'bar';
console.log(arr['0']);
console.log(arr[1]);
...到:
var obj = {};
obj[0] = 'foo';
obj['1'] = 'bar';
console.log(obj['0']);
console.log(obj[1]);
基本上,Array
是一种Object
,具有数组特定的方法和不可枚举的属性,例如length
,可以是使用专用速记语法 [ items... ]
数组的索引实际上是字符串,就像任何对象中的所有键一样,它之所以起作用是因为使用数字作为键引用对象属性会将该数字强制转换为其字符串表示形式(原则上是这样。我假设大多数现代浏览器都在内部对此进行了大量优化)。
例子:
var obj = {};
obj[1.5] = 'foo';
console.log('1.5' in obj);
console.log(obj[1.5]);
var arr = [];
arr[0.5] = 'foo';
console.log('0.5' in arr);
console.log(arr[0.5]);
arr[0] = 'bar';
arr[1] = 'baz';
console.log(arr.length);
console.log(Object.keys(arr));
关于javascript - 为什么字符串索引(尽管代表整数)在数组中起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44923397/