我有一个自定义的Javascript对象,使用new
关键字创建,并根据创建参数分配属性:
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) {}
具体来说,我只对显式定义在该对象上的属性感兴趣,而不是原型链中的属性。此外,该属性值永远不会被设置为null
或undefined
,但它可能是一个空对象或数组。如果你想包括这些情况下的正确方式,也可以提供。
var obj = {prop: undefined}
时,typeof obj.prop
也将返回undefined
。 - Jan Molnár