如何区分未声明和未定义的 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,都使用 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,那么你就有区别了。
相关文章:
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值