为了账号安全,请及时绑定邮箱和手机立即绑定

if(对象中的键)或if(object.hasOwnProperty(key)

if(对象中的键)或if(object.hasOwnProperty(key)

互换的青春 2019-12-18 16:24:26
以下两个语句是否产生相同的输出?有什么理由比另一种更喜欢一种方式吗? if (key in object) if (object.hasOwnProperty(key))
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

小心-它们不会产生相同的结果。


intrue如果key在原型链中某处被找到,也会返回;而Object.hasOwnProperty(就像名称已经告诉我们的那样),只会返回true如果key直接在该对象上可用(它“拥有”该属性)。


查看完整回答
反对 回复 2019-12-18
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

总之,hasOwnProperty()不看原型而in看原型。


取自O'Reilly高性能Javascript:


您可以使用hasOwnProperty()方法并传入成员名称来确定对象是否具有给定名称的实例成员。要确定对象是否可以访问具有给定名称的属性,可以使用in运算符。例如:


var book = {

    title: "High Performance JavaScript",

    publisher: "Yahoo! Press" 

};


alert(book.hasOwnProperty("title"));  //true

alert(book.hasOwnProperty("toString"));  //false

alert("title" in book); //true 

alert("toString" in book); //true

在此代码中,当title传入时,hasOwnProperty()返回true,因为title是一个对象实例;传入“ toString”时,该方法返回false,因为该实例上不存在该字符串。当每个属性名称与in运算符一起使用时,两次结果均为true,因为它搜索实例和原型。


查看完整回答
反对 回复 2019-12-18
  • 3 回答
  • 0 关注
  • 787 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信