转→js数组遍历 千万不要使用for...in...
看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···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...相关推荐
- JS数组遍历的几种方式
JS数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代 ...
- js数组遍历和对象遍历
针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历:还有性能,优缺点等. JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3,9];for ( v ...
- JS遍历(循环)——JS对象遍历(循环)JS数组遍历(循环)
最近在处理一些偏逻辑的代码块经常遇到遍历问题,接下来跟大家一起温习一下有关于JS的遍历吧. js数组遍历 1.for循环 //不缓存 var arr = [5,2,0,1,3,1,4]; for ( ...
- html遍历数组,JS数组遍历的几种方式
JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通for循环 代码如下: for(j = ...
- js 数组遍历符合条件跳出循环体_Javascript数组循环遍历之forEach详解
1.js 数组循环遍历. 数组循环变量,最先想到的就是 for(var i=0;i除此之外,也可以使用较简便的forEach 方式 2.forEach函数. Firefox 和Chrome 的Arra ...
- html js 遍历数组,分享几种原生JS数组遍历的方法和应用
数组遍历,对于前后端开发人员,是必须掌握的方法,那么数组遍历有哪些方法呢? OK,今天就分享几种原生JS方法,从原生开始学习,有助于大家应用到各种框架[小程序.三大框架等]中去,毕竟原生才是基本.一共 ...
- js 数组遍历方法详解(map、filter、find、findIndex、reduce)
目录 前言 map map是什么 map方法的结构及入参 语法糖 map一般不改变原数组 filter 说明 例子 find 和 findIndex 说明 例子 reduce 说明 例子 尾言 前言 ...
- js数组遍历、对象遍历、字符串遍历
2019独角兽企业重金招聘Python工程师标准>>> 数组遍历 for --使用变量将数组长度缓存起来,在数组较长时性能优化效果明显 for(var i=0,len=arr.len ...
- js 数组遍历符合条件跳出循环体_Js数组遍历方法对比总结
引言: ES6为javascript为数组遍历提供了新的一种方式: for....of.....那之前的遍历方法各存在哪些缺点?for...of...有什么好处?接下来,我们先回顾一下有多少种方式. ...
最新文章
- 第十、十一周项目一-点-圆-圆柱类族的设计(2)
- java 一个大事务下的新增、修改、查询_重新学习Mysql数据库8:MySQL的事务隔离级别实战...
- Android之Activity的4种加载模式
- 前端学习(1514):vue-router使用步骤
- 【vue2.0进阶篇】用transition组件轻松实现过渡效果
- 服务器磁盘空间占用,大文件查找
- swift 通知_Swift 闭包无脑加 [weak self] 行不行?
- android7.0 ActivityManagerService(AMS)启动流程
- Java一般操作 对象序列化和反序列化
- blob形式导出Excel
- iOS 仿微信发送语音消息按钮 - 语音录音机(二)
- org.elasticsearch.common.util.concurrent.EsRejectedExecutionException 查询超时异常处理记录---一定要用单例模式
- Python 打印的中英文字体如何对齐?
- LVGL | LVGL移植之中文文档
- 2021-8-31 学习日记——idea中快捷键alt+insert找不到get和set方法
- 提取了下刘汝佳推荐的题号...
- 阿拉伯数字金额转换为中文大写
- matlab对于点云栅格化,并且提取路面(粗糙版)
- Apache thrift初探之旅
- Android 应用安全开发之浅谈加密算法
热门文章
- 【hbase】HBASE的安装与配置的步骤详解
- 测试基础-05-bug的定义生命周期
- 可以同时开发php Java_php可以和java一起开发吗
- win10怎么去掉计算机里百度云,主编教你win10系统清除百度云盘盘符的修复方法...
- RColorBrewer | R语言中的配色方法汇总(Ⅰ)
- 温州服务器付费方式_新购买的服务器是选择包年包月还是按流量计费呢?
- html定位ajax php,AJAX HTML PHP问题
- 京瓷打印机更换墨盒后显示缺粉_京瓷1800打印机更换墨盒后仍然提示添加墨粉,怎么解决啊?...
- 非线性薛定谔方程_五分钟彻底搞懂“薛定谔方程”,看后绝对不在迷惑了
- 如何用matlaab把csv转为mat文件_如何编辑pdf文档?看大神们是如何操作的