看到一篇内容还不错,但是排版实在糟糕,
逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···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 。

总结一下,用简单的方法去解决复杂的问题是我们程序员的基本思路,当然如果你为了花哨而落入陷阱那你只能自己爬出来。

最新文章

  1. Cleaver快速制作网页PPT
  2. jvm系列(一):java类的加载机制
  3. rpc框架之HA/负载均衡构架设计
  4. iOS通讯录开发
  5. [kipmi0]进程导致系统负载高
  6. bzoj 2730: [HNOI2012]矿场搭建
  7. 开发环境安装 Java Mysql MyEclipse Android Adt
  8. log log4net用代码记录日志
  9. Data.gov.uk电子政务云,牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践
  10. JavaScipt call和apply用法
  11. ReactJS虚拟DOM效应带来的一则副作用探索
  12. dedecms 后台可以上传mp4,但无法选择
  13. 2018-2019-2 网络对抗技术 20165236 Exp5 MSF基础应用
  14. matlab绘图与可视化
  15. Spring事物管理--相关要点及配置事物管理器
  16. HTML标签_增加css样式
  17. 『OpenCV3』处理视频&amp;摄像头
  18. [转载]Matlab中插值函数汇总和使用说明
  19. 翻译:GLSL的顶点位移贴图
  20. [Javascript] Wrap an API with a Proxy

热门文章

  1. 被我们忽略的HttpSession线程安全问题
  2. Python学习笔记8-单元测试(1)
  3. kmeans算法并行化的mpi程序
  4. hibernate学习-HibernateDemo
  5. Java Web中的中文编码
  6. [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
  7. [LeetCode] Integer to English Words 整数转为英文单词
  8. [LeetCode] ZigZag Converesion 之字型转换字符串
  9. 使用SharpPCap在C#下进行网络抓包
  10. C# readonly 与const