【发布时间】:2018-05-06 13:20:14
【问题描述】:
您好,我附上了我的 Firefox 控制台的屏幕截图,想知道为什么数组在 javascript 中的行为如此。
我试图理解 js 中的 for...in 和 for...of,但遇到了这个问题。我现在明白 for...in 只是打印键,而 for...of 是打印值部分。但是我不明白为什么数组首先取键值对?
我想由于 Array 也是一个对象,它可以将 A key:value 对作为输入,但是当我使用 console.log(a) 时,为什么它不打印 foo: bar,即使打印 a["foo" ]打印“酒吧”。是否有一些我错过并且无法理解的概念?
但是 Chrome 浏览器显示如下:
在这种情况下,打印数组 a 给我 [1,2,3,foo: "bar"] 作为输出但是如果我定义了
var b=[1,2,3,foo: "bar"]
它给了我意想不到的令牌。为什么会这样?
【问题讨论】:
-
因为你已经创建了一个"array like object"。数组具有数字索引,当您添加
a['foo']时,它会变成一个混合体。如果你不知道你在用 "array like object" 做什么,这不是一件好事 -
for...in 迭代可枚举属性,而 for...of 使用 Array 的 @@iterator。
console.log的输出只是浏览器/环境的选择。例如,Node.js 和 Chrome DevTools 将打印[ 1, 2, 3, foo: 'bar' ]。 -
@shinite 您可以在数组构造完成后向数组添加属性,但在此之前它必须是有效的语法
-
@shinite
console.log不一定会打印出有效的 JavaScript。它仅用于显示目的。但是,console.log( Object.assign( {}, a ) );会给你一个有效的对象。注意它不是一个数组。 -
打印数组中的 foo:bar 很可能会有一个下拉箭头来展开并查看对象(在控制台中展开数组之后)。但是要将对象添加到数组中,不能只使用 foo:bar。对象需要包装在 {}
标签: javascript arrays object