js开发过程中的问题

强烈建议不要使用下面的for-in的方式
var sum = 0;
for (var i in myArray) {
sum += myArray[i];
console.log(typeof i);//i的类型是string类型
}
而要用基本的for循环的方式
var sum = 0;
for (var i = 0, len = myArray.length; i < len; i++) {
sum += myArray[i];
console.log(typeof i);//i的类型是number类型
}
标准的for循环中的i是number类型,表示的是数组的下标;但是for-in循环中的i表示的是数组的key,是string类型,因为js中一切皆为对象。
for in 语句对数组对象进行遍历潜在的bug在于:如果原生Array类被其他的js脚本库进行了原型扩展(比如多加一个toJSON方法即Array.prototype.toJSON=xxxx),那么用for in遍历扩展后的Array对象的逻辑将与遍历原生Array对象的逻辑发生差异。
var x=[1];
for(var m in x){
alert(m);
};
按常理,如果Array是原生js类,上面语句应该只执行一次alert方法,且m为数组的索引0。但是,如果Array类被扩展了,多了一个toJSON方法,那么上面的语句将执行两次alert,第一次m为索引0,第二次s为方法名’toJSON’。如果你设计的代码的逻辑以原生Array类为基准,在某一天你的同事在页面里面引用了一个第三方的JS库,这个库又恰好扩展了Array类,结果将难以想象,很有可能原来的代码逻辑将不再成立。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值