sunshine
管理员
管理员
  • 最后登录2023-10-30
  • 发帖数170
  • 社区居民
阅读:9247回复:1

[javascript]js中数组遍历for与for in区别(强烈建议不要使用for in遍历数组)

楼主#
更多 发布于:2016-07-29 16:40
js 中数组遍历可以用以下两种:

var arr = ["张三","李四","王五"];
 
    //for -var(这是通常所指的for循环)
    for(var p = 0 ;p<arr.length; p++){
        console.log("for-var:"+arr[p]);
    }
 
    //for-in (foreach)
    for(var p in arr){
        console.log("for-in:"+arr[p]);
    }
最后,可以发现输出结果一样的.
如果,在进行遍历前,对Array进行扩展,在原型上添加一个方法:

Array.prototype.test=function(){

}
添加后,代码如下:

Array.prototype.test=function(){
 
}
var arr = ["张三","李四","王五"];
 
for(var p = 0 ;p<arr.length; p++){
    console.log("for-var:"+arr[p]);
}
 
for(var p in arr){
    console.log("for-in:"+arr[p]);
}
最后,输出结果如下:可以发现,for-in把新添加的test也进行输出。
 for-var:张三
 for-var:李四
 for-var:王五
 for-in:张三
 for-in:李四
 for-in:王五
 for-in:function (){
    }
数组遍历时for与for in区别:
1.  for 取出来的值p , 为Number 类型
     for- in 取出来的值p, 为String类型
2. 本质不同:for是通过不同的下标,来进行循环的取值,效率比较高
                    :for-in 是通过key来进行取值的,遍历的是数组里的所有对象,效率较低
                       当没有对数组进行扩展时,没有任何问题. 但如果对数组对象Array进行了prototype,for-in就会对扩展对象也取出来。
再此建议两点
1.不要用for in遍历数组,全部统一采用标准的for循环变量数组(我们无法保证我们引入的js是否会采用prototype扩展原生的Array)
2.如果要对js的原生类扩展的时候,不要采用prototype了

参考:http://www.tuicool.com/articles/3meE3a
进击的一米六
新手
新手
  • 最后登录2017-01-04
  • 发帖数3
  • 社区居民
沙发#
发布于:2016-10-14 08:35
点击喜欢  收藏后 不会实时刷新收藏的总数
游客


返回顶部

公众号

公众号