Javascript中的for in循環和hasOwnProperty結合使用_javascript技巧
與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 來取得正確結果。
程式碼如下:
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 進行判斷,可以有效避免擴展本地原型而引起的錯誤。

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

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

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

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

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

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

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

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