[英]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
访问它
使用括号表示法(或点表示法)通过非整数设置或访问不会从数组列表本身设置或检索元素,但会设置或访问与该数组的对象属性集合关联的变量。 数组的对象属性和数组元素列表是分开的,数组的遍历和变异操作不能应用于这些命名属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.