我有一个使用new创建的自定义Javascript对象,并根据创建参数将属性分配给:

function MyObject(argument) {
    if (argument) {
        this.prop = "foo";
    }
}
var objWithProp = new MyObject(true); // objWithProp.prop exists
var objWithoutProp = new MyObject(false); // objWithoutProp.prop does not exist

测试对象的prop属性是否存在的正确方法是什么?我已经看到以下使用的方法,但是我不确定这些方法中的任何一种是否是最佳方法:
  • if (obj.prop) {}
  • if (obj.hasOwnProperty("prop")) {}
  • if ("prop" in obj) {}

  • 具体来说,我只对测试是否为该对象显式定义了属性感兴趣,而对原型(prototype)链没有兴趣。此外,该值永远不会设置为nullundefined,但可能类似于空对象或数组。但是,如果您想包括在可能的情况下正确的方法,请放心。

    最佳答案

    hasOwnProperty正是您要寻找的,因为您指定了“如果为该对象显式定义了属性,而不是在原型(prototype)链中”。 Per https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty,“此方法可用于确定对象是否具有指定的属性作为该对象的直接属性;与in运算符不同,此方法不会检查对象的原型(prototype)链。” -似乎完全符合您的要求!

    关于javascript - 测试JavaScript对象上属性是否存在的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/896308/

    10-17 02:19