首頁 >web前端 >js教程 >為什麼 `for...in` 迭代有時會包含意外的屬性,如何避免這種情況?

為什麼 `for...in` 迭代有時會包含意外的屬性,如何避免這種情況?

Patricia Arquette
Patricia Arquette原創
2024-12-24 12:49:11211瀏覽

Why Does `for...in` Iteration Sometimes Include Unexpected Properties, and How Can I Avoid This?

迭代物件屬性:揭開Propt 的神秘面紗

使用for...in 循環迭代物件的屬性時,出現了一個名為propt 的變數。此變數代表物件的每個屬性鍵。但為什麼會這樣呢?

原因是 Object.prototype 包含所有物件都繼承的附加屬性。這些屬性不是特定物件的一部分,而是由所有物件共享。例如,toString 和 hasOwnProperty 是兩個常見的範例。

為了避免無意中迭代這些繼承的屬性,包含額外的檢查至關重要:Object.prototype.hasOwnProperty.call(obj, prop)。此檢查可確保正在迭代的屬性專門屬於該對象,並且不是從基類繼承的。

為了清楚起見,這裡有一個更新的程式碼範例:

for (var prop in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, prop)) {
        // do stuff
    }
}

此外,雖然可以使用obj.hasOwnProperty(prop) 代替,但如果物件具有同名的不相關字段,則此方法可能會發生故障。因此,透過 Object.prototype 呼叫 hasOwnProperty 更可靠。

以上是為什麼 `for...in` 迭代有時會包含意外的屬性,如何避免這種情況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn