迭代物件屬性:揭開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中文網其他相關文章!