繁体   English   中英

JavaScript 数组如何具有非数字键?

[英]How can JavaScript arrays have non-numeric keys?

我学到的是数组是一种对象。 对象是具有键/值对的属性集合。 我一直认为数组是从 0 开始数字索引的项目的集合。就在最近,我能够向数组添加一个非数字键。

let arr = ['cribriform plate','mastoid','hyoid'];
arr.eyes = 'brown';
arr.skin = 'white';

这导致

['cribriform plate','mastoid','hyoid',eyes : 'brown', skin : 'white'];

arr 的 for...in 循环产生了:

for(let i in arr){
    console.log(i);
    //0,1,2,3,eyes,skin
}

for...of 循环产生:

for(let i of arr){
     console.log(i);
     //0,1,2,3
}

我能够使用 for...in 循环遍历数组的所有键。 但是,当我使用 for...of 循环时,我只能迭代数字索引键。 这是为什么?

而且,数组最准确的定义是什么?

使用for..of循环,调用对象的Symbol.iterator属性。 对于数组,这等效于数组的.values()方法,该方法包含数组中每个索引的值 非数字属性不包括-阵列通常不具有任意的非数字属性,这确实分配任意的非数字属性到一个数组代码很可能需要重构的。

for..in循环遍历对象上的所有可枚举属性,包括从原型继承的属性。 因此, for..of上的for..of将排除for..in循环将包含的数组上的非数字属性。

数组作为对象,可以为它们分配任意属性,在大多数情况下,就像可以将属性分配给普通函数一样 - 这不是一个很好的主意。

数组是 JavaScript 中的一种对象。 当你做类似arr.skin = 'white';事情时 ,您基本上是为数组的对象属性集合设置一个变量。 这就是为什么您可以使用 in for...of访问它,它遍历对象的可枚举属性。

但是,由于这个新属性不是数组元素列表的一部分,因此无法通过for...in访问它

摘自Arrays 的 MDN 网络文档

使用括号表示法(或点表示法)通过非整数设置或访问不会从数组列表本身设置或检索元素,但会设置或访问与该数组的对象属性集合关联的变量。 数组的对象属性和数组元素列表是分开的,数组的遍历和变异操作不能应用于这些命名属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM