zoukankan      html  css  js  c++  java
  • 转→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循环总是可以很好的运行,代码如下:

    1     Array.prototype.searchItem = function(value){  
    2         return right;  
    3     }  
    4       
    5     var a = [1, 2, 3, 4];  
    6     for(var i = 0; i< a.length; i++){  
    7         console.log(a[i]);  
    8     }  

    老老实实写好for循环是避免这个错误的最好的做法了。当然还有别的办法,这是这个办法可以在未来可用,

    使用 for...of...语句,但是这个只能在未来使用,而不是现在,

    可以参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of 。

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


  • 相关阅读:
    繁简转换OpenCC,autogb 和 autob5,iconv,python的jianfan包
    Linux常用的系统监控shell脚本
    linux系统CPU,内存,磁盘,网络流量监控脚本
    linux系统巡检脚本shell实例
    主流脚本语言的比较和选择
    老男孩python第六期
    如何从 0 开始学 ruby on rails (漫步版)
    C#数学运算表达式解释器
    算法导论 第9章 中位数和顺序统计学(线性时间选择算法)
    ruby语言仅仅是昙花一现
  • 原文地址:https://www.cnblogs.com/love-zf/p/6231068.html
Copyright © 2011-2022 走看看