转→js数组遍历 千万不要使用for...in...
看到一篇内容还不错,但是排版实在糟糕,
逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误...
第一次因为实在看不下去一篇博客的排版,
为了排版而转载...
正文↓
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循环总是可以很好的运行,代码如下:
Array.prototype.searchItem = function(value){
return right;
} var a = [1, 2, 3, 4];
for(var i = 0; i< a.length; i++){
console.log(a[i]);
}
老老实实写好for循环是避免这个错误的最好的做法了。当然还有别的办法,这是这个办法可以在未来可用,
使用 for...of...语句,但是这个只能在未来使用,而不是现在,
可以参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of 。
总结一下,用简单的方法去解决复杂的问题是我们程序员的基本思路,当然如果你为了花哨而落入陷阱那你只能自己爬出来。
转→js数组遍历 千万不要使用for...in...的更多相关文章
- js数组遍历 千万不要使用for...in...
昨天做个下拉框 扩充了一下数组的方法 Array.prototype.remove = function (val) { var index = this.indexOf(val); if (inde ...
- js数组遍历和对象遍历
针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历:还有性能,优缺点等. JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3,9]; for ( ...
- 浅谈6种JS数组遍历方法的区别
本篇文章给大家介绍一下6种JS数组遍历方法:for.foreach.for in.for of.. each. ().each的区别.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. ...
- JS数组遍历方法
常用数组遍历方法: 1.原始for循环 var a = [1,2,3]; for(var i=0;i<a.length;i++){ console.log(a[i]); //结果依次为1,2,3 ...
- js数组遍历方法总结
数组遍历方法 1.for循环 使用临时变量,将长度缓存起来,避免重复获取数组长度,当数组较大时优化效果才会比较明显. 1 2 3 for(j = 0,len=arr.length; j < le ...
- js 数组遍历 对象遍历
一.数组遍历 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3,9]; for ( var i = 0; i <arr.length; i++){ console.lo ...
- js 数组遍历
map.filter.forEach.every.some http://www.runoob.com/jsref/jsref-obj-array.html 1.在字符串中使用 map 在一个Stri ...
- JS数组遍历方法集合
就让我们在逆战中成长吧,加油武汉,加油自己 1.for循环 使用零时变量将长度存起来,当数组较大时优化效果才会比较明显. var ar1=[2,4,6,8] for(var i=0;i<ar1. ...
- js 数组遍历for..in弊端
//for..in在数组中的弊端 原则上数组Array对象是不能操作的,但是有些程序员开始不注意把Array的原型链上添加了方法就会出现意想不到的bug //例如 ,,]; Array.prototy ...
随机推荐
- Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
错误:Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds 错误提示就是我们限定了部署的时间导致的错 ...
- Block入门
iOS4.0开始,Block横空出世,它其实就是c预言的补充,书面点说就是带有自动变量的匿名函数,Block简洁,代码的可读性也高,因此深受广大开发者的喜爱,这一次给大家介绍Block的基本类型和项目 ...
- 升级xcode8之后出现报错提示,提示swift版本问题
最近Xcode升级了,出现了各种蛋疼的错误提示,今天遇到个导入框架出现了提示Swift版本的问题,具体如下: "Use Legacy Swift Language Version" ...
- 数组,集合分割函数,join()
join函数定义如下: // 串联类型为 System.String 的 System.Collections.Generic.IEnumerable<T> 构造集合的成员,其中在每个成员 ...
- C#中ToString()格式详解
以下内容均摘自博客园,仅供资料查询. ToString格式化 在很多对象显示为字符串的时候都会使用到ToString中的格式化,由于以前没怎么注意到这个问题,想总结一下各个基础结构对象的格式化,以便后 ...
- c# MongoDB 经纬度应用示例
class Program { static string mongodb = "mongodb://127.0.0.1:27017"; ...
- [LeetCode] Combination Sum II 组合之和之二
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
- 如何用卷积神经网络CNN识别手写数字集?
前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP, ...
- Android国际化--I18N
在res下创建对应国家的环境的目录如:values-zh,values-en,然后在对应的目录下将对应的字符串翻译成对应国家的语言即可.
- echarts-案例
关系图 http://echarts.baidu.com/echarts2/doc/example/force1.html http://www.cnblogs.com/spring_wang/p/4 ...