如何区分未声明和未定义的 JavaScript 对象属性?
How to tell the difference between undeclared and undefined JavaScript object properties?
那么有没有办法检查对象 属性 是否已经正式声明?例如...
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,return 对于 hasOwnProperty 都是 false,并且都没有在 for(in) 循环中被枚举。
有什么我想念的吗?
(恕我直言,为什么解析器不能将已声明但未设置的属性设置为 null?
那会有什么危害?)
初始化为null,那你就有区别了
在您的两个示例中,属性 而不是 "formally declared"。你必须分配一些东西,即使你所做的是 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:
Undeclared variables do not exist until the code assigning to them is executed.
那么有没有办法检查对象 属性 是否已经正式声明?例如...
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,return 对于 hasOwnProperty 都是 false,并且都没有在 for(in) 循环中被枚举。 有什么我想念的吗?
(恕我直言,为什么解析器不能将已声明但未设置的属性设置为 null? 那会有什么危害?)
初始化为null,那你就有区别了
在您的两个示例中,属性 而不是 "formally declared"。你必须分配一些东西,即使你所做的是 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:
Undeclared variables do not exist until the code assigning to them is executed.