javascript - 如何枚举 JavaScript 对象的属性?

标签 javascript properties

如何枚举 JavaScript 对象的属性?

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

最佳答案

足够简单:

for(var propertyName in myObject) {
   // propertyName is what you want
   // you can get the value like this: myObject[propertyName]
}

现在,您将无法通过这种方式获得私有(private)变量,因为它们不可用。

<小时/>

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

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

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

关于javascript - 如何枚举 JavaScript 对象的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25434562/

相关文章:

javascript - 如何以 Angular 显示多 map ?

php - 为什么 PHP 允许从类外部创建类属性?

ios - 在不调用 ViewDidLoad 的情况下从另一个类访问方法或属性?

javascript - 谷歌地图算法(Ajax、Tiles 等)

javascript - JSX + React 中的动态 tabIndex 属性

javascript - 如何防止函数在调整大小时创建新的事件窗口堆栈

javascript - 确保从未使用表单输入字段开头的 =

wpf - 如何在 WPF 中的控件上绑定(bind)本地属性

python - @property 的优点假设我只需要获取值

在 super.init 之前在表达式中使用初始化属性的 Swift 错误