擴展數組和物件原型而不混亂For-In 循環
使用輔助方法擴展Array.prototype 和Object.prototype 時,確保這些方法不會透過顯示為值來幹擾for-in 迴圈至關重要。這在其他程式碼依賴 for-in 迴圈僅存取值的情況下尤其重要。
避免使用陣列的 For-In 迴圈
理想的解決方案是避免對陣列使用 for-in 迴圈。相反,請使用特定於陣列的迭代方法,例如內建的 .map() 和 .filter()。避免在可能同時遇到陣列和物件的泛型函數中使用 for-in 迴圈。
對物件使用hasOwnProperty()
如果在泛型中使用for-in 循環是不可避免的函數,利用hasOwnProperty() 方法排除從原型:
for (var prop in anyObj) if (Object.prototype.hasOwnProperty.call(anyObj, prop)) // do something
ECMAScript 5.1中的不可枚舉屬性
在ECMAScript 5.1 中,您可以使用Object.defineProperty() 將屬性設定為不可枚舉:
Object.defineProperty(Array.prototype, "find", { enumerable: false, writable: true, value: function(testFun) { // code to find element in array } });
這確保了「找到”方法不會出現在for-in 迴圈中。但是,需要注意的是,舊版瀏覽器不支援這種方法。考慮使用 ES5-shim 等墊片來實現相容性。
以上是如何在不破壞 For-In 循環的情況下安全地擴展數組和物件原型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!