簡體   English   中英

for..in 或 for..of 對象鍵

[英]for..in or for..of Object keys

所以當我使用 for..in 循環迭代對象鍵時,我的 IDE 不喜歡。 我收到警告:

可能對意外(自定義/繼承)成員進行迭代,可能缺少 hasOwnProperty 檢查

所以我明白了它的意思,所以在這種情況下,最好使用for (const key of Object.keys(obj))而不是for (const key in obj)嗎?

在性能方面,兩者之間有什么真正的區別嗎?

通過Object.keys數組進行循環與使用for...in語句for...in循環之間存在細微差別,在大多數情況下不會注意到這一點。 Object.keys(obj)僅返回具有對象自身屬性的數組,而for...in還返回原型鏈中找到的鍵,以便后者對obj的原型進行額外檢查需要,然后到原型的原型等等,直到整個原型鏈都被訪問過。 這當然會使第二種方法的效率低於第一種,但正如我已經提到的,在大多數情況下幾乎不會注意到這種差異。

對於更正式的方法,正如MDN中所述:

Object.keys() 方法返回給定對象自己的可枚舉屬性的數組,其順序與 for...in 循環提供的順序相同(區別在於 for-in 循環將原型鏈中的屬性枚舉為好)。

您仍然可以使用for(var key in obj){} 似乎在for..in循環中期待的是Object.hasOwnProperty

這是因為for..in也會在原型鏈中查找並且即使鍵在原型鏈中也會返回 true。

Object.hasOwnProperty僅在 key 是其owns屬性時才返回 true。

你可以這樣做

for(var key in obj){
 if(obj.hasOwnProperty(key)){
  // rest of code}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM