use*_*001 0 javascript undefined web
所以有没有办法检查对象属性是否已正式声明vs?例如...
var obj={};
console.log( non_existent_variable ) //throws not defined error
console.log( obj.non_existent_property) //no error,===undefined
Run Code Online (Sandbox Code Playgroud)
考虑以下...
function m(){
this.prop;
}
var MyObj=new m();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我认为已经正式声明的MyObj.prop和没有正确声明的MyObj.non_existent_property之间应该有明显的区别.
不幸的是,它们都是=== undefined,都使用hasOwnProperty返回false,并且都没有在for(in)循环中枚举.我缺少什么?
(恕我直言,为什么解析器集不能声明但是未设置属性为null?那会有什么危害?)
在这两个你的例子,属性还没有被"正式宣布".你必须分配一些东西,即使你做的是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); // trueRun Code Online (Sandbox Code Playgroud)
来自MDN:
在执行分配给它们的代码之前,不存在未声明的变量.