手机版
你好,游客 登录 注册
背景:
阅读新闻

JavaScript中遍历数组 最好不要使用 for in 遍历

[日期:2017-01-14] 来源:Linux社区  作者:yang-C-J [字体: ]

JavaScript中遍历数组 最好不要使用 for in 遍历,先看一段代码

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6 </head>
 7 <body>
 8     
 9     <script>
10         // 一个普通的数组        
11         var arr =[3,5,2,6];
12         // 普通的for 循环遍历
13         for(var i = 0 ; i < arr.length; i++){
14             console.log(i,"类型:"+typeof i,arr[i]);
15         }
16         // 用for in 遍历数组
17         for(var k in arr){
18             console.log(k,"类型:"+typeof k,arr[k]);
19         }
20     </script>
21 </body>
22 </html>

这段代码显示出了 一点 for循环遍历数组 和for in 循环遍历 数组的一点区别:

  标准的for循环中的i是number类型,表示的是数组的下标,但是foreach循环中的i表示的是数组的key是string类型。

这还不是坑,只是一点区别。

再看一段代码

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Document</title>
 6 </head>
 7 <body>
 8     
 9     <script>
10         // 一个普通的数组        
11         var arr =[3,5,2,6];
12         // 在数组原型上扩展一个方法
13         Array.prototype.extend = function(){
14             console.log("在数组原型扩展一个方法");
15         }
16         // 普通的for 循环遍历
17         for(var i = 0 ; i < arr.length; i++){
18             console.log(i,"类型:"+typeof i,arr[i]);
19         }
20         // 用for in 遍历数组
21         for(var k in arr){
22             console.log(k,"类型:"+typeof k,arr[k]);
23         }
24     </script>
25 </body>
26 </html>

这段代码就是在上边的代码的基础上,为Array做了一下扩充。很简单,只是添加了一个函数。但是我们来看运行会出现了什么情况:

输出的结果中,多出了一行,这一行就是我们扩展的一个函数,不是我们定义在数组中的值。到此这个问题就出来了。

综上所述,用for...in...在通常情况下确实可以正确运行。

但是如果我们在项目采用的是用foreach遍历数组,假设有一天谁不小心自己为了扩展js原生的Array类,或者引入一个外部的js框架也扩展了原生Array。那问题就来了。

所以最好还是用for循环遍历数组

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-01/139546.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款