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]);
        }
    }
  • 相关阅读:
    进制间转换的理论和实现不同
    操作DOM
    浏览器对象
    浏览器
    面向对象编程——class继承
    面向对象编程——原型继承
    js面向对象编程——创建对象
    JS面向对象编程
    js的JSON
    js标准对象——Date
  • 原文地址:https://www.cnblogs.com/haokaibo/p/for-in-loop.html
Copyright © 2011-2022 走看看