在JavaScript中获取对象的所有属性

在JavaScript中获取对象的所有属性,javascript,node.js,ecmascript-5,Javascript,Node.js,Ecmascript 5,JavaScript是否有办法获取对象的所有属性,包括内置属性用于。。。in跳过内置属性,这通常是您想要的,但在本例中不是。如果这很重要的话,我会使用Node.js,它是为了调试目的,所以它不必优雅、快速或可移植。是的,只需浏览原型并获取所有属性即可 function getAllProperties(o) { var properties = []; while (o) { [].push.apply(properties, Object.getOwnPrope

JavaScript是否有办法获取对象的所有属性,包括内置属性<代码>用于。。。in跳过内置属性,这通常是您想要的,但在本例中不是。如果这很重要的话,我会使用Node.js,它是为了调试目的,所以它不必优雅、快速或可移植。

是的,只需浏览原型并获取所有属性即可

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;
}

是的,确实如此,只需通过原型获得所有属性

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;
}

是的,确实如此,只需通过原型获得所有属性

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;
}

是的,确实如此,只需通过原型获得所有属性

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;
}

对于调试,您可以使用以下内容:

console.log(yourObject);

简单快速。节点和浏览器中都有。:)

对于调试,您可以使用以下内容:

console.log(yourObject);

简单快速。节点和浏览器中都有。:)

对于调试,您可以使用以下内容:

console.log(yourObject);

简单快速。节点和浏览器中都有。:)

对于调试,您可以使用以下内容:

console.log(yourObject);


简单快速。节点和浏览器中都有。:)

过滤步骤的目的是什么?某些属性可能会像字符串或构造函数一样重复,因此过滤步骤会删除重复项,但是
getOwnPropertyNames()
应该涵盖这一点,对吗?不,
getOwnPropertyNames
只返回对象的“直接”属性数组,而不是其原型的属性数组(
Object.getOwnPropertyNames([])
只返回
['length']
)。因此,要获取对象的所有属性,我们必须沿着原型链向上移动,同时也要获取它们的属性。同时,一些属性会被覆盖,例如
toString
for
Array
sAgreed。但是,您已经有了向上移动原型链的代码。筛选步骤的目的是什么?某些属性可能会重复ed喜欢字符串或构造函数,因此过滤步骤会删除重复项,但
getOwnPropertyNames()
应该涵盖这一点,对吗?不,
getOwnPropertyNames
只返回对象的“直接”属性数组,而不返回其原型的属性(
object.getOwnPropertyNames([])
只返回
['length']
)。因此,要获取对象的所有属性,我们必须沿着原型链向上移动,同时也要获取它们的属性。同时,一些属性会被覆盖,例如
toString
for
Array
sAgreed。但是,您已经有了向上移动原型链的代码。筛选步骤的目的是什么?某些属性可能会重复ed喜欢字符串或构造函数,因此过滤步骤会删除重复项,但
getOwnPropertyNames()
应该涵盖这一点,对吗?不,
getOwnPropertyNames
只返回对象的“直接”属性数组,而不返回其原型的属性(
object.getOwnPropertyNames([])
只返回
['length']
)。因此,要获取对象的所有属性,我们必须沿着原型链向上移动,同时也要获取它们的属性。同时,一些属性会被覆盖,例如
toString
for
Array
sAgreed。但是,您已经有了向上移动原型链的代码。筛选步骤的目的是什么?某些属性可能会重复ed喜欢字符串或构造函数,因此过滤步骤会删除重复项,但
getOwnPropertyNames()
应该涵盖这一点,对吗?不,
getOwnPropertyNames
只返回对象的“直接”属性数组,而不返回其原型的属性(
object.getOwnPropertyNames([])
只返回
['length']
)。因此,要获得对象的所有属性,我们必须沿着原型链向上,同时也要获得它们的属性。在这一过程中,一些属性会被覆盖,例如
toString
for
Array
sAgreed。但您已经有了沿着原型链向上的代码。