javascript - 遍历对象属性

标签 javascript loops object

var obj = {
    name: "Simon",
    age: "20",
    clothing: {
        style: "simple",
        hipster: false
    }
}

for(var propt in obj){
    console.log(propt + ': ' + obj[propt]);
}

变量propt如何表示对象的属性?它不是内置的方法或属性。为什么它会产生对象中的每个属性?

最佳答案

遍历属性需要这个额外的hasOwnProperty检查:

for (var prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
        // do stuff
    }
}

这是必要的,因为对象的原型(prototype)包含对象的附加属性,这些属性在技术上是对象的一部分。这些附加属性继承自基对象类,但仍然是 obj 的属性。

hasOwnProperty只需检查这是否是特定于此类的属性,而不是从基类继承的属性。


也可以通过对象本身调用hasOwnProperty:

if (obj.hasOwnProperty(prop)) {
    // do stuff
}

但是如果对象有一个不相关的同名字段,这将失败:

var obj = { foo: 42, hasOwnProperty: 'lol' };
obj.hasOwnProperty('foo');  // TypeError: hasOwnProperty is not a function

这就是为什么通过 Object.prototype 调用它更安全的原因:

var obj = { foo: 42, hasOwnProperty: 'lol' };
Object.prototype.hasOwnProperty.call(obj, 'foo');  // true

关于javascript - 遍历对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8312459/

相关文章:

javascript - 在javascript中将对象展平为数组

angular - 如何为对象创建行为主题并在另一个组件上订阅它?

javascript - 如何删除 for 循环的第一部分?

python-3.x - 打印各种组合中的第一个组合

javascript - 获取第一个和最后一个启用的项目

javascript - 在 JavaScript 中自动推送/嵌套对象到父对象中

javascript - id 字段未附加到 div mvc 4

javascript - webpackJsonp 未定义 - VueJS

javascript - 以前我从谷歌驱动器渲染图像,现在我需要从本地路径渲染它。如何在 Reactjs 中渲染 const 变量中的图像?

javascript - 在 multiforce 布局中对 d3.js 中的节点进行分组