• for-in循环(for-in Loops)


    for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。
    
    从技术上将,你可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的。因为如果数组对象已被自定义的功能增强,就可能发生逻辑错误。另外,在for-in中,属性列表的顺序(序列)是不能保证的。所以最好数组使用正常的for循环,对象使用for-in循环。
    
    有个很重要的hasOwnProperty()方法,当遍历对象属性的时候可以过滤掉从原型链上下来的属性。
    
    思考下面一段代码:
    
    // 对象
    var man = {
       hands: 2,
       legs: 2,
       heads: 1
    };
    
    // 在代码的某个地方
    // 一个方法添加给了所有对象
    if (typeof Object.prototype.clone === "undefined") {
       Object.prototype.clone = function () {};
    }
     
    
    在这个例子中,我们有一个使用对象字面量定义的名叫man的对象。在man定义完成后的某个地方,在对象原型上增加了一个很有用的名叫 clone()的方法。此原型链是实时的,这就意味着所有的对象自动可以访问新的方法。为了避免枚举man的时候出现clone()方法,你需要应用hasOwnProperty()方法过滤原型属性。如果不做过滤,会导致clone()函数显示出来,在大多数情况下这是不希望出现的。
    
    // 1.
    // for-in 循环
    for (var i in man) {
       if (man.hasOwnProperty(i)) { // 过滤
          console.log(i, ":", man[i]);
       }
    }
    /* 控制台显示结果
    hands : 2
    legs : 2
    heads : 1
    */
    // 2.
    // 反面例子:
    // for-in loop without checking hasOwnProperty()
    for (var i in man) {
       console.log(i, ":", man[i]);
    }
    /*
    控制台显示结果
    hands : 2
    legs : 2
    heads : 1
    clone: function()
    */
     
     
  • 相关阅读:
    Spring boot如何快速的配置多个Redis数据源
    SMProxy,让你的数据库操作快三倍!
    利用OpenJ9大幅度降低JAVA内存占用
    利用mitmproxy实现抖音Cookie,设备ID获取(一)
    结合AndServer,实现抖音X-Gorgon算法,设备id生成接口
    抖音APP登录分析,Cookie获取
    Spring Boot 最简单整合Shiro+JWT方式
    shiro使用步骤梳理
    梳理搭建SSM步骤
    SSM中保存数据出现415错误
  • 原文地址:https://www.cnblogs.com/chris-oil/p/3243638.html
Copyright © 2020-2023  润新知