最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript中的for in循環(huán)和hasOwnProperty結(jié)合使用

 更新時間:2013年06月05日 12:37:37   作者:  
當(dāng)檢測某個對象是否擁有某個屬性時,hasOwnProperty 是唯一可以完成這一任務(wù)的方法,在 for in 循環(huán)時,建議增加 hasOwnProperty 進行判斷,可以有效避免擴展本地原型而引起的錯誤
與in操作符相比,for in 在循環(huán)對象的屬性時也會遍歷原型鏈,for in 不會讀取不可枚舉屬性,如數(shù)組的length屬性。 小結(jié) 當(dāng)檢測某個對象是否擁有某個屬性時,hasOwnProperty 是唯一可以完成這一任務(wù)的方法,在 for in 循環(huán)時,建議增加 hasOwnProperty 進行判斷,可以有效避免擴展本地原型而引起的錯誤。

與in操作符相比,for in 在循環(huán)對象的屬性時也會遍歷原型鏈,for in 不會讀取不可枚舉屬性,如數(shù)組的length屬性。

復(fù)制代碼 代碼如下:

// 擴展 Object.prototype
Object.prototype.bar = 1;
var foo = {moo: 2};
for(var i in foo) {
console.log(i); // 輸出 bar 和 moo
}


我們不可能改變 for in 循環(huán)的行為,當(dāng)需要對循環(huán)體內(nèi)某些屬性進行過濾時,可以利用Object.prototype的hasOwnProperty方法來完成。

提示:因為 for in 循環(huán)總是遍歷整個原型鏈,所以當(dāng)遍歷多繼承的對象時效率較低。

使用 hasOwnProperty 進行過濾

復(fù)制代碼 代碼如下:

// 仍舊針對上例的foo對象
for (var i in foo) {
if (foo.hasOwnProperty(i)) {
console.log(i);
}
}


例子中因為使用了hasOwnProperty,最終輸出moo;如果忽略 hasOwnProperty ,代碼將會輸出非預(yù)期結(jié)果,因為本地原型(如Object.prototype)已經(jīng)被擴展了。

Prototype框架就是擴展Javascript原始對象的一個類庫,并被廣泛使用,其缺點也很明顯,當(dāng)框架引入后,如果不使用 hasOwnProperty 進行過濾判斷,輸出結(jié)果保證不是你想要的。

最佳實踐

推薦在 for in 時,總是使用 hasOwnProperty 進行判斷,沒人可以保證運行的代碼環(huán)境是否被污染過。

hasOwnProperty
為了檢查某個對象是否擁有不在原型鏈上的自定義屬性,就有必要用到 hasOwnProperty 方法,任何一個對象都具有該方法,它繼承自 Object.prototype。

提示:我們無法完全檢測某個屬性是否是undefined,因為屬性有可能存在,但其值為undefined。hasOwnProperty 是Javascript中唯一一個可以處理對象屬性而不遍歷原型鏈的方法。

復(fù)制代碼 代碼如下:

// 擴展 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 給出了正確的預(yù)期結(jié)果,當(dāng)遍歷對象的屬性時這是很有必要的,沒有其它辦法來排除定義在對象原型鏈上的屬性。

hasOwnProperty 作為屬性

Javascript 并沒有保護 hasOwnProperty 為關(guān)鍵字或保留字,因此,如果某個對象擁有同名的屬性,就有必要利用擴展的 hasOwnProperty 來獲取正確結(jié)果。

復(fù)制代碼 代碼如下:

var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
foo.hasOwnProperty('bar'); // 總是返回 false
// 使用另一個 hasOwnProperty 并將 this 設(shè)置為 foo 來調(diào)用它
{}.hasOwnProperty.call(foo, 'bar'); // true


小結(jié)
當(dāng)檢測某個對象是否擁有某個屬性時,hasOwnProperty 是唯一可以完成這一任務(wù)的方法,在 for in 循環(huán)時,建議增加 hasOwnProperty 進行判斷,可以有效避免擴展本地原型而引起的錯誤。

相關(guān)文章

  • 用javascript獲取textarea中的光標(biāo)位置

    用javascript獲取textarea中的光標(biāo)位置

    Javascript一向以他的靈活隨意而著稱,這也使得它的功能可以非常的強大,而由于沒有比較好的調(diào)試工具,又使得它使用起來困難重重,尤其使對于一些初學(xué)者,更是感覺到無從下手。今天探討的問題是用javascript獲取textarea中光標(biāo)的位置。
    2008-05-05
  • js獲取元素下的第一級子元素的方法(推薦)

    js獲取元素下的第一級子元素的方法(推薦)

    下面小編就為大家?guī)硪黄猨s獲取元素下的第一級子元素的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 微信小程序開發(fā)之?dāng)?shù)據(jù)存儲 參數(shù)傳遞 數(shù)據(jù)緩存

    微信小程序開發(fā)之?dāng)?shù)據(jù)存儲 參數(shù)傳遞 數(shù)據(jù)緩存

    本文主要介紹了微信小程序開發(fā)之?dāng)?shù)據(jù)存儲、參數(shù)傳遞、數(shù)據(jù)緩存的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • 微信小程序?qū)崿F(xiàn)表單校驗功能

    微信小程序?qū)崿F(xiàn)表單校驗功能

    微信小程序最難實現(xiàn)的公共業(yè)務(wù)是什么?應(yīng)該是表單校驗,這篇文章主要介紹了微信小程序如何實現(xiàn)表單校驗功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • BootStrap 動態(tài)表單效果

    BootStrap 動態(tài)表單效果

    這篇文章主要介紹了BootStrap 動態(tài)表單效果,實現(xiàn)代碼分為js部分和html部分,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • JavaScript函數(shù)柯里化原理與用法分析

    JavaScript函數(shù)柯里化原理與用法分析

    這篇文章主要介紹了JavaScript函數(shù)柯里化原理與用法,分析了函數(shù)柯里化的概念、原理、功能并結(jié)合實例形式給出了柯里化函數(shù)的具體使用技巧,需要的朋友可以參考下
    2017-03-03
  • JS高級筆記

    JS高級筆記

    JS高級筆記,學(xué)習(xí)js的朋友可以參考下。
    2011-07-07
  • JS實現(xiàn)圖片的不間斷連續(xù)滾動的簡單實例

    JS實現(xiàn)圖片的不間斷連續(xù)滾動的簡單實例

    下面小編就為大家?guī)硪黄狫S實現(xiàn)圖片的不間斷連續(xù)滾動的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • TS中declare的簡單使用方法

    TS中declare的簡單使用方法

    declare 關(guān)鍵字用來告訴編譯器,某個類型是存在的,可以在當(dāng)前文件中使用,本文給大家介紹TS中declare的簡單使用方法,感興趣的朋友一起看看吧
    2023-12-12
  • JavaScript實現(xiàn)選擇框按比例拖拉縮放的方法

    JavaScript實現(xiàn)選擇框按比例拖拉縮放的方法

    這篇文章主要介紹了JavaScript實現(xiàn)選擇框按比例拖拉縮放的方法,具有等比例縮放及設(shè)置最小范圍等功能,涉及javascript事件的添加、監(jiān)聽、頁面元素動態(tài)操作及鼠標(biāo)事件的響應(yīng)等技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08

最新評論

石城县| 长乐市| 淮滨县| 浙江省| 宁都县| 库车县| 梁平县| 江都市| 麦盖提县| 且末县| 云南省| 乌拉特中旗| 家居| 泰和县| 马公市| 泰兴市| 安丘市| 韩城市| 库车县| 大城县| 广州市| 石门县| 宾阳县| 杂多县| 朝阳县| 大田县| 郸城县| 自治县| 门源| 伊金霍洛旗| 葵青区| 巩留县| 安岳县| 工布江达县| 兰西县| 涡阳县| 资兴市| 安吉县| 闵行区| 扶余县| 错那县|