那么有没有办法检查对象属性是否已正式声明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? 那会有什么害处?)
答案 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,然后你就会有所不同。