本文详解JavaScript中判断对象属性的两种常用方式:in运算符与hasOwnProperty方法。in运算符会遍历原型链,返回true;而hasOwnProperty仅检测对象自身属性,忽略继承属性。文章通过代码示例展示两者在检测name和toString时的不同结果,并简要提及for in循环的可见性差异。
JavaScript判断对象属性:in运算符与hasOwnProperty的区别
在JavaScript开发中,判断一个对象是否包含特定属性是常见需求。
主要存在两种判断方式,但它们在处理原型链属性时存在细微差别。
第一种方式是利用in运算符。
var obj = {name:'jack'};
alert('name' in obj); // --> true
alert('toString' in obj); // --> true
使用in运算符时,无论是对象自身的属性name,还是原型链上继承的方法toString,检测结果均返回true。
第二种方式是使用hasOwnProperty方法。
var obj = {name:'jack'};
obj.hasOwnProperty('name'); // --> true
obj.hasOwnProperty('toString'); // --> false
该方法仅检测对象自身的属性,原型链上继承的属性无法通过hasOwnProperty检测到,因此返回false。
需要特别注意,虽然in运算符能够检测到原型链上的属性,但在for...in循环中通常不会枚举这些继承属性。
不过,在重写原型后,for...in循环在IE9、Firefox、Safari、Chrome和Opera等浏览器中是可以看到这些属性的,具体表现可参考关于for...in缺陷的相关说明。
感谢阅读,希望以上内容能对大家有所帮助,感谢各位对本站的支持!