【问题标题】:Getting all the properties of an object in JavaScript在 JavaScript 中获取对象的所有属性
【发布时间】:2014-06-27 00:49:11
【问题描述】:

JavaScript 是否有办法获取对象的所有属性,包括内置属性? for... in 跳过内置属性,这通常是您想要的,但在这种情况下不是。如果这很重要,我正在使用 Node.js,它用于调试目的,因此它不必优雅、快速或可移植。

【问题讨论】:

    标签: javascript node.js ecmascript-5


    【解决方案1】:

    是的,只需遍历原型并获取所有属性

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

    【讨论】:

    • 过滤步骤的目的是什么?
    • 某些属性可能会重复,例如 toString 或构造函数,因此过滤步骤会删除重复项
    • 是的,但是getOwnPropertyNames() 应该涵盖这一点,对吧?
    • 不,getOwnPropertyNames 仅返回对象的“直接”属性数组, 其原型的属性(Object.getOwnPropertyNames([]) 仅返回 ['length'])。因此,要获取对象的所有属性,我们必须沿着原型链向上并获取它们的属性。在此过程中,一些属性会被覆盖,例如 toString for Arrays
    • 同意。但是你已经有代码可以沿着原型链上去。
    【解决方案2】:

    好吧,对于调试,你可以使用这个:

    console.log(yourObject);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-12
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多