你的JS for ...in异常,是否是因为你用了Array.prototype?

今天突然发现页面上的for ...in异常,debug之后,发现for...in 遍历出来一个函数,而这个函数是我自己扩展到Array.prototype。

那么为什么会遍历到我们自己扩展到原型上的属性呢?

 js中遍历Object属性(Array也是Object)时,有个前提条件,会遍历该对象属性中enumerable为true(也就是可枚举)的属性

那么我们再扩展到Array原型属性时,一定要加上enumerable: false,可以直接通过Object.defineProperty(obj, prop)这个方法,默认就是enumerable: false(不允许该属性被for...in枚举)

详细查看Object.defineProperty(obj, prop, descriptor)

你可能感兴趣的:(js学习之路)