zoukankan      html  css  js  c++  java
  • JavaScript Patterns 2.4 For-in loop

    Principle

    1. Enumeration should be used to iterate over nonarray objects.
    2. It's important to use the method hasOwnProperty()when iterating over object properties to filter out properties that come down the prototype chain. 
    // the object
    var man = {
        hands: 2,
        legs: 2,
        heads: 1
    };
    
    // somewhere else in the code
    
    // a method was added to all objects
    if (typeof Object.prototype.clone = = = "undefined") {
        Object.prototype.clone = function () {};
    }
    
    // 1. for-in loop
    for (var i in man) {
        if (man.hasOwnProperty(i)) { // filter
            console.log(i, ":", man[i]);
        }
    }
    
    /*
        result in the console
        hands : 2
        legs : 2
        heads : 1
    */
    
    // 2. antipattern:
    // for-in loop without checking hasOwnProperty()
    for (var i in man) {
        console.log(i, ":", man[i]);
    }
    
    /*
        result in the console
        hands : 2
        legs : 2
        heads : 1
        clone: function()
    */

    Call method off of the Object.prototype to avoid naming collisions that man object redefined hasOwnProperty. And use a local variable to cache it.

    var i,
        hasOwn = Object.prototype.hasOwnProperty;
        for (i in man) {
            if (hasOwn.call(man, i)) { // filter
                console.log(i, ":", man[i]);
        }
    }
  • 相关阅读:
    接口和抽像类
    java中FastJson的json类型转换
    可参考的源码
    @Autowired注解和静态属性
    IDEA中,将项目加入maven管理。
    关于.idea未上传导致不能显示项目文件结构的问题
    Master-Worker模式
    Future模式
    了解Queue
    ConcurrentMap与CopyOnWrite容器
  • 原文地址:https://www.cnblogs.com/haokaibo/p/for-in-loop.html
Copyright © 2011-2022 走看看