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 相关文章推荐
JavaScript Cookie 直接浏览网站分网址
Dec 08 Javascript
『jQuery』取指定url格式及分割函数应用
Apr 22 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
Apr 04 Javascript
JavaScript实现存储HTML字符串示例
Apr 21 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
May 27 Javascript
Bootstrap每天必学之表格
Nov 23 Javascript
JavaScript获取select中text值的方法
Feb 13 Javascript
Javascript操作dom对象之select全面解析
Apr 24 Javascript
BootstrapTable加载按钮功能实例代码详解
Sep 22 Javascript
微信小程序下拉框组件使用方法详解
Dec 28 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
May 12 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
Aug 07 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
我的论坛源代码(三)
2006/10/09 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
Prototype 学习 Prototype对象
2009/07/12 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
很实用的js选项卡切换效果
2016/08/12 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
JS回调函数基本定义与用法实例分析
2017/05/24 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
OpenCV实现人脸识别
2017/04/07 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
python实现图像全景拼接
2020/03/27 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
中专毕业生自荐信范文
2013/11/28 职场文书
新年团拜会主持词
2014/04/02 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
教师自我剖析材料
2014/09/29 职场文书
婚礼答谢词范文
2015/09/29 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
Python中tkinter的用户登录管理的实现
2021/04/22 Python
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS