如何区分未声明和未定义的JavaScript对象属性?

时间:2015-03-09 21:00:47

标签: javascript web undefined

那么有没有办法检查对象属性是否已正式声明vs不?例如......

var obj={};

console.log( non_existent_variable ) //throws not defined error
console.log( obj.non_existent_property) //no error,===undefined

考虑以下内容......

 function m(){
   this.prop;
 }
 var MyObj=new m();

在这种情况下,我认为已经正式声明的MyObj.prop和没有的MyObj.non_existent_property之间应该有明显的区别。

不幸的是它们都是=== undefined,都使用hasOwnProperty返回false,并且都没有在for(in)循环中枚举。 我缺少什么?

(恕我直言,为什么解析器集未声明但未设置属性为null? 那会有什么害处?)

2 个答案:

答案 0 :(得分:8)

在您的示例中,属性已“正式声明”。你必须分配一些东西,即使你做的是undefined

function MyObject() {
    this.m = undefined; 
}

var sampleMyObject = new MyObject();

console.log(sampleMyObject.m); // undefined
console.log(sampleMyObject.hasOwnProperty('m')); // true
console.log('m' in sampleMyObject); // true

来自MDN

  

在执行分配给它们的代码之前,未声明的变量不存在。

答案 1 :(得分:0)

初始化为null,然后你就会有所不同。