JavaScript数组如何具有非数字键?
我学到的是数组是一种对象。对象是具有键/值对的属性集合。我一直认为数组是从0开始的数字索引项的集合。就在最近,我能够将非数字键添加到数组中JavaScript数组如何具有非数字键?,javascript,arrays,object,Javascript,Arrays,Object,我学到的是数组是一种对象。对象是具有键/值对的属性集合。我一直认为数组是从0开始的数字索引项的集合。就在最近,我能够将非数字键添加到数组中 let arr = ['cribriform plate','mastoid','hyoid']; arr.eyes = 'brown'; arr.skin = 'white'; 这导致了 ['cribriform plate','mastoid','hyoid',eyes : 'brown', skin : 'white']; arr的for…in循环
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
循环,对象的符号。调用迭代器属性。对于数组,这相当于数组的.values()
方法。不包括非数值属性-数组通常不具有任意非数值属性,并且为数组指定任意非数值属性的代码可能需要重构
Afor..in
循环对象上的所有可枚举属性,包括从原型继承的属性。因此,for..of
在一个数组中将排除for..in
循环将包括的数组中的非数字属性
数组作为对象,可以为其分配任意属性,在大多数情况下,就像属性可以分配给普通函数一样——这不是一个好主意。数组是javascript中的一种对象。当您执行类似于arr.skin='white'的操作时代码>,基本上是为数组的对象属性集合设置一个变量。这就是为什么您可以在for…of
中访问它,它会迭代对象的可枚举属性
但是,由于此新属性不是数组元素列表的一部分,因此无法通过
for…in
摘自:
使用括号表示法(或点表示法)通过非整数进行设置或访问不会从数组列表本身设置或检索元素,但会设置或访问与该数组的对象属性集合关联的变量。数组的对象属性和数组元素列表是分开的,数组的遍历和变异操作不能应用于这些命名属性
您好,@hayden,您还会添加到数组吗?您说过for…in循环会迭代对象的所有属性,包括继承的属性,但继承的大多数方法和属性不是不可枚举的吗?那么,这是否构成了数字索引键的属性?对于数组,是的。它有许多继承自其原型的方法(如.forEach
,.join
),也继承自对象
,该对象提供了.hasOwnProperty
,.valueOf
等方法。但所有这些都是不可枚举的。在普通数组上,默认情况下它没有可枚举属性-它将拥有的唯一可枚举属性是数组标记或碰巧被分配到的任意属性(这不是一个好主意)。