首頁 web前端 js教程 Javascript中的for in循環和hasOwnProperty結合使用_javascript技巧

Javascript中的for in循環和hasOwnProperty結合使用_javascript技巧

May 16, 2016 pm 05:32 PM
for hasownproperty

與in操作符相比,for in 在循環物件的屬性時也會遍歷原型鏈,for in 不會讀取不可枚舉屬性,例如數組的length屬性。 小結 當偵測某個物件是否擁有某個屬性時,hasOwnProperty 是唯一可以完成此任務的方法,在 for in 迴圈時,建議增加 hasOwnProperty 來判斷,可以有效避免擴展本地原型而引起的錯誤。

與in運算子相比,for in 在循環物件的屬性時也會遍歷原型鏈,for in 不會讀取不可枚舉屬性,例如陣列的length屬性。

複製程式碼 程式碼如下:

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


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

提示:因為 for in 迴圈總是遍歷整個原型鏈,所以當遍歷多繼承的物件時效率較低。

使用hasOwnProperty 過濾


複製程式碼複製程式碼

🎜>複製程式碼

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



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

Prototype框架就是擴展Javascript原始物件的一個類別庫,並被廣泛使用,其缺點也很明顯,當框架引入後,如果不使用hasOwnProperty 進行過濾判斷,輸出結果保證不是你想要的。

最佳實踐

推薦在 for in 時,總是使用 hasOwnProperty 來判斷,沒人可以保證運行的程式碼環境是否被污染過。

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

提示:我們無法完全偵測某個屬性是否為undefined,因為屬性有可能存在,但其值為undefined。 hasOwnProperty 是Javascript中唯一可以處理物件屬性而不遍歷原型鏈的方法。
複製程式碼
程式碼如下:


// ObjectObject.prototype var foo = {goo: undefined};

foo.bar; // 1
'bar' in foo; // true

foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true



只有hasOwnProperty 給了正確的預期結果,當遍歷物件的屬性時這是必要的,沒有其它辦法來排除定義在物件原型鏈上的屬性。

hasOwnProperty 為屬性

Javascript 並沒有保護 hasOwnProperty 為關鍵字或保留字,因此,如果某個物件擁有同名的屬性,就有必要利用擴充的 hasOwnProperty 來取得正確結果。
程式碼如下:

var foo = {has function() {
return false;
},
bar: 'Here be dragons'
};
foo.hasOwnProperty('bar'); // 總是回傳false
foo.hasOwnProperty('bar'); // 總是回傳false
// 使用另一個hasOwnProperty 並將this 設為foo 來呼叫它
{}.hasOwnProperty.call(foo, 'bar'); // true


小結
當偵測某個物件是否擁有某個屬性時,hasOwnProperty 是唯一可以完成這項任務的方法,在for in 循環時,建議增加hasOwnProperty 進行判斷,可以有效避免擴展本地原型而引起的錯誤。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

解決kernel_security_check_failure藍色畫面的17種方法 解決kernel_security_check_failure藍色畫面的17種方法 Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure(內核檢查失敗)就是一個比較常見的停止代碼類型,可藍屏錯誤出現不管是什麼原因都讓很多的有用戶們十分的苦惱,下面就讓本站來為用戶們來仔細的介紹一下17種解決方法吧。 kernel_security_check_failure藍色畫面的17種解決方法方法1:移除全部外部裝置當您使用的任何外部裝置與您的Windows版本不相容時,則可能會發生Kernelsecuritycheckfailure藍色畫面錯誤。為此,您需要在嘗試重新啟動電腦之前拔下全部外部裝置。

Win10如何解除安裝Skype for Business?電腦上的skype怎麼徹底卸載方法 Win10如何解除安裝Skype for Business?電腦上的skype怎麼徹底卸載方法 Feb 13, 2024 pm 12:30 PM

Win10skype可以卸載嗎是許多用戶都想知道的問題,因為很多的用戶發現自己電腦上的預設程式上有這個應用,擔心刪除後會影響到系統的運行,下面就讓本站來為用戶們來仔細的介紹一下Win10如何卸載SkypeforBusiness吧。 Win10如何解除安裝SkypeforBusiness1、在電腦桌面點選Windows圖標,再點選設定圖示進入。 2、點選“應用”。 3、在搜尋框中輸入“Skype”,點選選取找到的結果。 4、點選「卸載」。 5

JavaScript怎麼用for求n的階乘 JavaScript怎麼用for求n的階乘 Dec 08, 2021 pm 06:04 PM

用for求n階乘的方法:1.使用「for (var i=1;i<=n;i++){}」語句控制迴圈遍歷範圍為「1~n」;2、迴圈體中,使用「cj *=i」將1到n的數相乘,乘積賦值給變數cj;3、循環結束後,變數cj的值就n的階乘,輸出即可。

foreach和for迴圈的差別是什麼 foreach和for迴圈的差別是什麼 Jan 05, 2023 pm 04:26 PM

區別:1、for透過索引來循環遍歷每一個資料元素,而forEach透過JS底層程式來循環遍歷數組的資料元素;2、for可以透過break關鍵字來終止迴圈的執行,而forEach不可以;3、 for可以透過控制迴圈變數的數值來控制迴圈的執行,而forEach不行;4、for在迴圈外可以呼叫迴圈變量,而forEach在迴圈外不能呼叫迴圈變數;5、for的執行效率要高於forEach。

Python中的常見流程控制結構有哪些? Python中的常見流程控制結構有哪些? Jan 20, 2024 am 08:17 AM

Python中常見的流程控制結構有哪幾種?在Python中,流程控制結構是用來決定程式的執行順序的重要工具。它們允許我們根據不同的條件執行不同的程式碼區塊,或重複執行一段程式碼。以下將介紹Python中常見的流程控制結構,並提供對應的程式碼範例。條件語句(if-else):條件語句允許我們根據不同的條件執行不同的程式碼區塊。它的基本語法是:if條件1:#當條件

hasownproperty怎麼用 hasownproperty怎麼用 Dec 04, 2023 am 11:21 AM

hasOwnProperty是JavaScript內建物件原型(Object.prototype)上的方法,用於檢查物件本身屬性中是否包含指定的屬性,而不是繼承自其原型鏈上的屬性。基本語法為「obj.hasOwnProperty(prop)」。

利用Go語言for迴圈快速實現翻轉功能 利用Go語言for迴圈快速實現翻轉功能 Mar 25, 2024 am 10:45 AM

使用Go語言實現翻轉功能可以透過for迴圈非常快速地實現。翻轉功能是將字串或陣列中的元素順序顛倒,可以應用在許多場景中,例如字串翻轉、陣列元素翻轉等。下面我們來看看如何利用Go語言的for迴圈來實作字串和陣列的翻轉功能,並附上具體的程式碼範例。字串翻轉:packagemainimport(&quot;fmt&quot;)fun

6個實例,8段程式碼,詳解 Python 中的 For 循環 6個實例,8段程式碼,詳解 Python 中的 For 循環 Apr 11, 2023 pm 07:43 PM

Python 支援for循環,它的語法與其他語言(如JavaScript 或Java)稍有不同。下面的程式碼區塊示範如何在Python中使用for迴圈來遍歷清單中的元素:上述的程式碼片段是將三個字母分行列印的。你可以透過在print語句的後面加上逗號「,」將輸出限制在同一行顯示(如果指定列印的字元很多,則會「換行」),程式碼如下所示:當你希望透過一行而不是多行顯示文本中的內容時,可以使用上述形式的代碼。 Python還提供了內建

See all articles