Javascript學(xué)習(xí)筆記之 對(duì)象篇(三) : hasOwnProperty
// Poisoning Object.prototype Object.prototype.bar = 1; var foo = {goo: undefined}; foo.bar; // 1 'bar' in foo; // true foo.hasOwnProperty('bar'); // false foo.hasOwnProperty('goo'); // true
在這里,只有 hasOwnProperty 能給出正確答案,這在遍歷一個(gè)對(duì)象的屬性時(shí)是非常必要的。Javascript 中沒有其他方法能判斷一個(gè)屬性是定義在對(duì)象本身還是繼承自原型鏈。
hasOwnProperty 作為屬性
Javascript 并未將 hasOwnProperty 設(shè)為敏感詞,這意味著你可以擁有一個(gè)命名為 hasOwnProperty 的屬性。這個(gè)時(shí)候你無法再使用本身的 hasOwnProperty 方法來判斷屬性,所以你需要使用外部的 hasOwnProperty 方法來進(jìn)行判斷。
var foo = { hasOwnProperty: function() { return false; }, bar: 'Here be dragons' }; foo.hasOwnProperty('bar'); // always returns false // Use another Object's hasOwnProperty and call it with 'this' set to foo ({}).hasOwnProperty.call(foo, 'bar'); // true // It's also possible to use hasOwnProperty from the Object // prototype for this purpose Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
總結(jié)
當(dāng)判斷對(duì)象屬性存在時(shí),hasOwnProperty 是唯一可以依賴的方法。這里還要提醒下,當(dāng)我們使用 for in loop 來遍歷對(duì)象時(shí),使用 hasOwnProperty 將會(huì)很好地避免來自原型對(duì)象擴(kuò)展所帶來的困擾。
下面是其他網(wǎng)友的補(bǔ)充:
Javascript中Object對(duì)象原型上的hasOwnProperty()用來判斷一個(gè)屬性是定義在對(duì)象本身而不是繼承自原型鏈。
obj.hasOwnProperty(prop)
參數(shù) prop
要檢測(cè)的屬性 字符串 名稱或者 Symbol(ES6)
o = new Object(); o.prop = 'exists'; o.hasOwnProperty('prop'); // 返回 true o.hasOwnProperty('toString'); // 返回 false o.hasOwnProperty('hasOwnProperty'); // 返回 false
使用hasOwnProperty作為某個(gè)對(duì)象的屬性名
因?yàn)閖avascript沒有將hasOwnProperty作為一個(gè)敏感詞,所以我們很有可能將對(duì)象的一個(gè)屬性命名為hasOwnProperty,這樣一來就無法再使用對(duì)象原型的 hasOwnProperty 方法來判斷屬性是否是來自原型鏈。
var foo = { hasOwnProperty: function() { return false; }, bar: 'Here be dragons' }; foo.hasOwnProperty('bar'); // 始終返回 false
不能使用 該對(duì)象.hasOwnProperty 這種方法,怎么來解決這個(gè)問題呢?我們需要使用原型鏈上真正的 hasOwnProperty 方法:
({}).hasOwnProperty.call(foo, 'bar'); // true // 或者: Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
- js中hasOwnProperty()方法詳解
- js中hasOwnProperty的屬性及實(shí)例用法詳解
- JavaScript中in和hasOwnProperty區(qū)別詳解
- JavaScript hasOwnProperty() 函數(shù)實(shí)例詳解
- JS中的hasOwnProperty()和isPrototypeOf()屬性實(shí)例詳解
- javascript中hasOwnProperty() 方法使用指南
- js中的hasOwnProperty和isPrototypeOf方法使用實(shí)例
- js的hasownproperty使用示例
- Javascript中的for in循環(huán)和hasOwnProperty結(jié)合使用
- 理解JAVASCRIPT中hasOwnProperty()的作用
- JS中hasOwnProperty方法用法簡(jiǎn)介
相關(guān)文章
javascript中call apply 與 bind方法詳解
網(wǎng)上文章雖多,大多復(fù)制粘貼,且晦澀難懂,我希望能夠通過這篇文章,能夠清晰的提升對(duì)apply、call、bind的認(rèn)識(shí),并通過一些具體的示例給大家展示下這3個(gè)方法的用法,希望大家能夠喜歡。2016-03-03Javascript技術(shù)棧中的四種依賴注入小結(jié)
本文總結(jié)了Javascript中常見的依賴注入方式,并以inversify.js為例,介紹了方言社區(qū)對(duì)于Javascript中DI框架的嘗試和初步成果2016-02-02Firefox window.close()的使用注意事項(xiàng)
window.close()在IE下可以執(zhí)行關(guān)閉,但在Firefox下不關(guān)閉,不是JS代碼window.close()的問題,而是Firefox的配置問題2009-04-04三個(gè)js循環(huán)的關(guān)鍵字示例(for與while)
這篇文章主要介紹了三個(gè)js循環(huán)的關(guān)鍵字示例,主要是for與while,需要的朋友可以參考下2016-02-02Javascript實(shí)例教程(19) 使用HoTMetal(3)
Javascript實(shí)例教程(19) 使用HoTMetal(3)...2006-12-12在JS中操作時(shí)間之getUTCMilliseconds()方法的使用
這篇文章主要介紹了在JavaScript中操作時(shí)間之getUTCMilliseconds()方法的使用,是JavaScript入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06Javascript 按位與賦值運(yùn)算符 (&=)使用介紹
這篇文章主要介紹了Javascript 按位與賦值運(yùn)算符 (&=)的相關(guān)資料,需要的朋友可以參考下2014-02-02