【发布时间】:2014-06-27 00:49:11
【问题描述】:
JavaScript 是否有办法获取对象的所有属性,包括内置属性? for... in 跳过内置属性,这通常是您想要的,但在这种情况下不是。如果这很重要,我正在使用 Node.js,它用于调试目的,因此它不必优雅、快速或可移植。
【问题讨论】:
标签: javascript node.js ecmascript-5
JavaScript 是否有办法获取对象的所有属性,包括内置属性? for... in 跳过内置属性,这通常是您想要的,但在这种情况下不是。如果这很重要,我正在使用 Node.js,它用于调试目的,因此它不必优雅、快速或可移植。
【问题讨论】:
标签: javascript node.js ecmascript-5
是的,只需遍历原型并获取所有属性
function getAllProperties(o) {
var properties = [];
while (o) {
[].push.apply(properties, Object.getOwnPropertyNames(o))
o = Object.getPrototypeOf(o);
}
//remove duplicate properties
properties = properties.filter(function(value, index) {
return properties.indexOf(value) == index;
})
return properties;
}
【讨论】:
getOwnPropertyNames() 应该涵盖这一点,对吧?
getOwnPropertyNames 仅返回对象的“直接”属性数组,不 其原型的属性(Object.getOwnPropertyNames([]) 仅返回 ['length'])。因此,要获取对象的所有属性,我们必须沿着原型链向上并获取它们的属性。在此过程中,一些属性会被覆盖,例如 toString for Arrays
好吧,对于调试,你可以使用这个:
console.log(yourObject);
简单快速。在节点和浏览器中。 :)
【讨论】: