扩展数组和对象原型而不混乱 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中文网其他相关文章!