看到一篇内容还不错,但是排版实在糟糕,
逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误...
第一次因为实在看不下去一篇博客的排版,
为了排版而转载...

 转载地址:http://m.blog.csdn.NET/blog/u014357977/38298263

正文↓

js数组遍历相信大家都不陌生,很多人会想到for循环和 for...in...循环,但是千万不要使用for...in...循环遍历数组,特别是如果你想写点有用的,能够移植的代码时。下面我们来看看这个可恶的for...in...。

1、语法

for (variable in object)
{//do sth ...
}  

这个语法中有个object,我们知道在javascript中对象这个概念是很宽泛的,那这个地方的对象可以是数组吗?当然可以,下面是一个例子:

var a = [1, 2, 3, 4];
for(var i in a){  console.log(a[i]);
}  

这段代码并不出人所料,会输出 1 2 3 4,一点问题都没有,并且是非常正确的用法。但是这只是通常是正确的。

2、for...in...遍历数组的问题

先上代码:

    Array.prototype.searchItem = function(value){//函数已被简化  return right;  }  var a = [1, 2, 3, 4];  for(var i in a){  console.log(a[i]);  }  

这段代码就是在上边的代码的基础上,为Array做了一下扩充。很简单,只是添加了一个用于搜索的函数(这个函数已被我简化成和上边那样)。但是我们来看运行会出现什么情况:

function (value){  return right;
}   

输出的结果中,多出了一行,这一行是一个函数,不是我们定义在数组中的值。到此这个问题就出来了。这个真的是你的本意吗?答案是否定的。

综上所述,用for...in...在通常情况下确实可以正确运行,但是如果我们的代码时放到别人的环境中也想跑,那请不要使用for...in...来循环数组。并且这种错误往往真的很隐蔽。

3、如何解决上述问题——老老实实写for循环

在上述的两种(一种正确,一种错误)情况下,for循环总是可以很好的运行,代码如下:

1     Array.prototype.searchItem = function(value){
2         return right;
3     }
4
5     var a = [1, 2, 3, 4];
6     for(var i = 0; i< a.length; i++){
7         console.log(a[i]);
8     }  

老老实实写好for循环是避免这个错误的最好的做法了。当然还有别的办法,这是这个办法可以在未来可用,

使用 for...of...语句,但是这个只能在未来使用,而不是现在,

可以参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of 。

总结一下,用简单的方法去解决复杂的问题是我们程序员的基本思路,当然如果你为了花哨而落入陷阱那你只能自己爬出来。

转→js数组遍历 千万不要使用for...in...相关推荐

  1. JS数组遍历的几种方式

    JS数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代 ...

  2. js数组遍历和对象遍历

    针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历:还有性能,优缺点等. JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3,9];for ( v ...

  3. JS遍历(循环)——JS对象遍历(循环)JS数组遍历(循环)

    最近在处理一些偏逻辑的代码块经常遇到遍历问题,接下来跟大家一起温习一下有关于JS的遍历吧. js数组遍历 1.for循环 //不缓存 var arr = [5,2,0,1,3,1,4]; for ( ...

  4. html遍历数组,JS数组遍历的几种方式

    JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代码如下: for(j = ...

  5. js 数组遍历符合条件跳出循环体_Javascript数组循环遍历之forEach详解

    1.js 数组循环遍历. 数组循环变量,最先想到的就是 for(var i=0;i除此之外,也可以使用较简便的forEach 方式 2.forEach函数. Firefox 和Chrome 的Arra ...

  6. html js 遍历数组,分享几种原生JS数组遍历的方法和应用

    数组遍历,对于前后端开发人员,是必须掌握的方法,那么数组遍历有哪些方法呢? OK,今天就分享几种原生JS方法,从原生开始学习,有助于大家应用到各种框架[小程序.三大框架等]中去,毕竟原生才是基本.一共 ...

  7. js 数组遍历方法详解(map、filter、find、findIndex、reduce)

    目录 前言 map map是什么 map方法的结构及入参 语法糖 map一般不改变原数组 filter 说明 例子 find 和 findIndex 说明 例子 reduce 说明 例子 尾言 前言 ...

  8. js数组遍历、对象遍历、字符串遍历

    2019独角兽企业重金招聘Python工程师标准>>> 数组遍历 for --使用变量将数组长度缓存起来,在数组较长时性能优化效果明显 for(var i=0,len=arr.len ...

  9. js 数组遍历符合条件跳出循环体_Js数组遍历方法对比总结

    引言: ES6为javascript为数组遍历提供了新的一种方式: for....of.....那之前的遍历方法各存在哪些缺点?for...of...有什么好处?接下来,我们先回顾一下有多少种方式. ...

最新文章

  1. 第十、十一周项目一-点-圆-圆柱类族的设计(2)
  2. java 一个大事务下的新增、修改、查询_重新学习Mysql数据库8:MySQL的事务隔离级别实战...
  3. Android之Activity的4种加载模式
  4. 前端学习(1514):vue-router使用步骤
  5. 【vue2.0进阶篇】用transition组件轻松实现过渡效果
  6. 服务器磁盘空间占用,大文件查找
  7. swift 通知_Swift 闭包无脑加 [weak self] 行不行?
  8. android7.0 ActivityManagerService(AMS)启动流程
  9. Java一般操作 对象序列化和反序列化
  10. blob形式导出Excel
  11. iOS 仿微信发送语音消息按钮 - 语音录音机(二)
  12. org.elasticsearch.common.util.concurrent.EsRejectedExecutionException 查询超时异常处理记录---一定要用单例模式
  13. Python 打印的中英文字体如何对齐?
  14. LVGL | LVGL移植之中文文档
  15. 2021-8-31 学习日记——idea中快捷键alt+insert找不到get和set方法
  16. 提取了下刘汝佳推荐的题号...
  17. 阿拉伯数字金额转换为中文大写
  18. matlab对于点云栅格化,并且提取路面(粗糙版)
  19. Apache thrift初探之旅
  20. Android 应用安全开发之浅谈加密算法

热门文章

  1. 【hbase】HBASE的安装与配置的步骤详解
  2. 测试基础-05-bug的定义生命周期
  3. 可以同时开发php Java_php可以和java一起开发吗
  4. win10怎么去掉计算机里百度云,主编教你win10系统清除百度云盘盘符的修复方法...
  5. RColorBrewer | R语言中的配色方法汇总(Ⅰ)
  6. 温州服务器付费方式_新购买的服务器是选择包年包月还是按流量计费呢?
  7. html定位ajax php,AJAX HTML PHP问题
  8. 京瓷打印机更换墨盒后显示缺粉_京瓷1800打印机更换墨盒后仍然提示添加墨粉,怎么解决啊?...
  9. 非线性薛定谔方程_五分钟彻底搞懂“薛定谔方程”,看后绝对不在迷惑了
  10. 如何用matlaab把csv转为mat文件_如何编辑pdf文档?看大神们是如何操作的