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 相关文章推荐
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
Sep 22 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
Jan 15 Javascript
Eval and new funciton not the same thing
Dec 27 Javascript
JavaScript中字符串(string)转json的2种方法
Jun 25 Javascript
探寻JavaScript中this指针指向
Apr 23 Javascript
Angular企业级开发——MVC之控制器详解
Feb 20 Javascript
通过js修改input、select默认字体颜色
Apr 19 Javascript
解决vue项目报错webpackJsonp is not defined问题
Mar 14 Javascript
js canvas实现5张图片合成一张图片
Jul 15 Javascript
layui表单验证select下拉框实现验证的方法
Sep 05 Javascript
uniapp微信小程序实现一个页面多个倒计时
Nov 01 Javascript
Vue基本指令实例图文讲解
Feb 25 Vue.js
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-fpm的配置详解
2013/06/03 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
python实现的文件夹清理程序分享
2014/11/22 Python
Python functools模块学习总结
2015/05/09 Python
使用Python解析JSON数据的基本方法
2015/10/15 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
vscode调试django项目的方法
2020/08/06 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
法国家具及室内配件店:home24
2017/01/21 全球购物
小学教师节活动方案
2014/01/31 职场文书
幼师求职自荐信
2014/05/31 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
校园广播稿精选
2014/10/01 职场文书
保研推荐信格式
2015/03/25 职场文书
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android