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

How to tell the difference between undeclared and undefined JavaScript object properties?

本文关键字:JavaScript 对象 属性 未定义 何区 未声明      更新时间:2023-09-26

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

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?那会有什么害处?

在您的两个示例中,属性尚未"正式声明"。 你必须分配一些东西,即使你所做的是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:

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

初始化为 null,那么你就有区别了。