[英]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.