javascript数组遍历for与for in区别详解


Posted in Javascript onDecember 04, 2014

js中遍历数组的有两种方式

var array=['a']

//标准的for循环

for(var i=1;i<array.length;i++){

    alert(array[i])

}

//foreach循环

for(var i in array){

    alert(array[i])

}

正常情况下上面两种遍历数组的方式结果一样。首先说两者的第一个区别

标准的for循环中的i是number类型,表示的是数组的下标,但是foreach循环中的i表示的是数组的key是string类型,因为js中一切皆为对象。自己试试 alert(typeof i);这个区别是小问题。现在我加上如下代码,上面的执行结果就不一样了。

//扩展了js原生的Array

Array.prototype.test=function()

 

}

试试看上面的代码执行什么。我们发现标准的for循环任然真正的对数组循环, 但是此时foreach循环对我刚才写的test方法写打印出来了。这就是for与foreach遍历数组的最大区别,如果我们在项目采用的是用foreach遍历数组,假设有一天谁不小心自己为了扩展js原生的Array类,或者引入一个外部的js框架也扩展了原生Array。那问题就来了。

再此建议两点

1.不要用for in遍历数组,全部统一采用标准的for循环变量数组(我们无法保证我们引入的js是否会采用prototype扩展原生的Array)
2.如果要对js的原生类扩展的时候,不要采用prototype了

Javascript 相关文章推荐
不用写JS也能使用EXTJS视频演示
Dec 29 Javascript
javascript 写类方式之七
Jul 05 Javascript
JavaScript this 深入理解
Jul 30 Javascript
window.location.hash 属性使用说明
Mar 20 Javascript
javascript倒计时功能实现代码
Jun 07 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
Aug 02 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
Jan 20 Javascript
JavaScript文本特效实例小结【3个示例】
Dec 22 Javascript
layer.open的自适应及居中及子页面标题的修改方法
Sep 05 Javascript
微信小程序如何实现五星评价功能
Oct 15 Javascript
详解CocosCreator消息分发机制
Apr 16 Javascript
JavaScript实现贪吃蛇游戏
Jun 16 Javascript
c#+jquery实现获取radio和checkbox的值
Sep 12 #Javascript
express的中间件cookieParser详解
Dec 04 #Javascript
express的中间件bodyParser详解
Dec 04 #Javascript
express的中间件basicAuth详解
Dec 04 #Javascript
详解JS函数重载
Dec 04 #Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
Dec 04 #Javascript
javascript常用代码段搜集
Dec 04 #Javascript
You might like
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
angular4 共享服务在多个组件中数据通信的示例
2018/03/30 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
python机器学习之神经网络(三)
2017/12/20 Python
Python SQLite3简介
2018/02/22 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
python+opencv实现车道线检测
2021/02/19 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
新闻发布会策划方案
2014/06/12 职场文书
个人年底工作总结
2015/03/10 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
公务员岗前培训心得体会
2016/01/08 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
入党申请书怎么写?
2019/06/11 职场文书
Django 实现jwt认证的示例
2021/04/30 Python