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

以下两个语句是否产生相同的输出?有什么理由比另一种更喜欢一种方式吗?


 if (key in object)


 if (object.hasOwnProperty(key))


互换的青春
浏览 804回答 3
3回答

慕慕森

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

紫衣仙女

总之,hasOwnProperty()不看原型而in看原型。取自O'Reilly高性能Javascript:您可以使用hasOwnProperty()方法并传入成员名称来确定对象是否具有给定名称的实例成员。要确定对象是否可以访问具有给定名称的属性,可以使用in运算符。例如:var book = {    title: "High Performance JavaScript",    publisher: "Yahoo! Press" };alert(book.hasOwnProperty("title"));  //truealert(book.hasOwnProperty("toString"));  //falsealert("title" in book); //true alert("toString" in book); //true在此代码中,当title传入时,hasOwnProperty()返回true,因为title是一个对象实例;传入“ toString”时,该方法返回false,因为该实例上不存在该字符串。当每个属性名称与in运算符一起使用时,两次结果均为true,因为它搜索实例和原型。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript