javascript - 为什么字符串索引(尽管代表整数)在数组中起作用?

标签 javascript

为什么下面的枚举是正确的?

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/

相关文章:

javascript - Highcharts:停止一个系列与鼠标交互?

javascript - 如何隐藏 header.jsp 和 footer.jsp

javascript - 如何同时异步触发多个 API 调用?

javascript - 使用 PHP 和 Javascript/Ajax 绕过 CORS

javascript - selenium execute_script 带换行符

javascript - ThickBox 3.1 问题,一切正常,但图片无法加载

javascript - 如何在当前位置上方添加HTML内容而不跳转页面

javascript - Angular 函数在加载时收到垃圾邮件

javascript - 使用css设置背景的宽度和高度

php - 使用 php 向谷歌地图添加静态 1km 网格