【问题标题】:for and forEach bypass Array propertyfor 和 forEach 绕过数组属性
【发布时间】:2017-11-01 16:18:54
【问题描述】:

我正在研究这个 & 对象原型(你不知道 JS),我发现这个棘手的事情让我大吃一惊:

我创建了一个文字数组(JS 数组是对象)x = ['foo', 42, 'bar'] 并添加了一个名为 baz 的属性,例如 x.baz = 'baz'。然后,在 Chrome 开发控制台中,只需输入 x 将显示以下结果:> (3) ["foo", 42, "bar", baz: "baz"]。如果我展开“>”,数组的每个值都有自己的键,例如:

0: "foo"

1: 42

2: "bar"

baz: "baz"

我创建了什么样的 JS-object-monster? For 和 forEach 循环不计算 baz 属性并绕过它。

我们将不胜感激。谢谢!

【问题讨论】:

  • 这可能只是 Chrome 控制台对序列化混合数组对象感到困惑的方式。您所做的是完全合法的,并且 forEach 正确地忽略了数组中的非标准自定义属性。
  • "并添加了一个属性x.baz = 'baz'" - 好吧,DONT
  • 这不是怪物。它只是一个对象,就像其他所有数组一样。您是否注意到它也有一个 .length 属性(也没有迭代)?

标签: javascript arrays object properties javascript-objects


【解决方案1】:

这不是怪物。它只是一个 JS 对象,就像任何其他数组一样。向 JS 数组添加属性不是不行……你可以。一个很好的理由是在数组中以包含的方式简单地携带状态。从功能上讲,这在像 JS 这样类型非常松散的语言中是正确的。例如,如果您选择这样做,那么您还必须采取预防措施,以免在for in 循环中感到困惑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2016-11-17
    相关资源
    最近更新 更多