如何枚举JavaScript对象的属性?[副本]

这个问题在这里已经有答案了
如何循环或枚举JavaScript对象?

(42个答案)

五年前关闭的

如何枚举JavaScript对象的属性

我实际上想列出所有定义的变量及其值,但我已经了解到定义变量实际上会创建窗口对象的属性

很简单:

(myObject中的var propertyName)的

{
//propertyName是您想要的
//可以得到如下值:myObject[propertyName]
}

现在,您将不会以这种方式获取私有变量,因为它们不可用


编辑:@bitwiseplatypus是正确的,除非您使用hasOwnProperty()方法,否则您将获得继承的属性-然而,我不知道为什么熟悉面向对象编程的人会期望更少!通常,提起这件事的人会受到道格拉斯·克罗克福德(Douglas Crockford)关于这件事的警告,这仍然让我有点困惑。同样,继承是OO语言的正常部分,因此也是JavaScript的一部分,尽管它是原型

现在,也就是说,hasOwnProperty()对于过滤非常有用,但是我们不需要发出警告,就好像在获取继承属性时存在危险一样

编辑2:@bitwiseplatypus提出了如果有人在比您最初编写对象(通过其原型)晚的时间点向您的对象添加属性/方法会发生的情况-虽然这确实可能会导致意外行为,但我个人并不认为这完全是我的问题。只是意见问题。此外,如果我设计的东西在构建对象时使用原型,而代码迭代对象的属性,并且我想要所有继承的属性,那会怎么样?我不会使用hasOwnProperty()。然后,比如说,有人后来添加了新属性。如果当时情况不好,那是我的错吗?我不这么认为。我认为这就是为什么jQuery作为一个例子,指定了扩展其工作方式的方法(通过jQuery.extendjQuery.fn.extend

发表评论