zoukankan      html  css  js  c++  java
  • 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()
    */
     
     
  • 相关阅读:
    C# 比较多个数组(lambda,匿名比较器)
    JPA javax.persistence.TransactionRequiredException
    JPA:identifier of an instance of was altered from
    JPA 连表查询
    java json转换(二)
    java querydsl使用
    SpringCloud 过滤器
    Android : Resource is not a Drawable (color or path)
    springcloud 新增微服务
    序列化二叉树
  • 原文地址:https://www.cnblogs.com/chris-oil/p/3243638.html
Copyright © 2011-2022 走看看