两种方式,但稍有区别
1,in 运算符
1
|
var
obj = {name:
'jack'
};
|
2
|
alert(
'name'
in
obj);
// --> true
|
3
|
alert(
'toString'
in
obj);
// --> true<br>
|
可看到无论是name,还是原形链上的toString,都能检测到返回true。
2,hasOwnProperty 方法
1
|
var
obj = {name:
'jack'
};
|
2
|
obj.hasOwnProperty(
'name'
);
// --> true
|
3
|
obj.hasOwnProperty(
'toString'
);
// --> false<br>
|
原型链上继承过来的属性无法通过hasOwnProperty检测到,返回false。
需注意的是,虽然in能检测到原型链的属性,但for in通常却不行。
当然重写原型后for in在IE9/Firefox/Safari/Chrome/Opera下是可见的。见:for in的缺陷
本文介绍了JavaScript中使用in运算符和hasOwnProperty方法来检测对象属性存在的两种不同方式,并对比了它们的区别。in运算符可以检测到实例属性及原型链上的属性,而hasOwnProperty仅能检测到实例属性。
724

被折叠的 条评论
为什么被折叠?



