zoukankan      html  css  js  c++  java
  • deep-in-es6(一)

    一 迭代器和for-of循环
    以前的一些遍历数组:

    function c(n) {
        console.log(n);
    }

    方法一:

    for(let i = 0;i < arr.length;i++) {
        c(i);
    }

    方法二:ES5语法

    arr.forEach(function(value,index) {
        //c(value+" "+index);
        if(value > 5) {
            //break; //报错
            //return value;
            c(value+" "+index);
        }
    });

    有个小缺陷,再次循环中不能使用break,return语句。

    方法三:遍历对象的for-in循环

    for(var index in arr) {
        c(arr[index]+" "+index);
    }

    有很多缺点:

    1.其中的index是字符串,不是数字,如果进行计算会产生很大的麻烦。
    2.它不但遍历数组,还可以遍历数组的属性,如果数组中有枚举属性,则for-in循环会额外的执行一次。就连原型链上的属性也会访问。
    3.for-in循环最大的缺点会按照随机顺序遍历数组。
    4.for-in循环的设计是为了遍历对象,可以遍历字符串类型的值,但不适用于数组。
    1.1 方法四:for-of循环

    for(let value of arr) {
        c(value);
    }

    解决了for-in遍历数组的一切缺点,也满足forEach()迭代的缺点,能使用break,return语句。

    for-of遍历其他集合:它支持数组遍历,还支持大多数类数组对象。例如:DOM NodeList对象,字符串的遍历,Set,Map(es6新增的对象)。他们都有个共同点,他们都有一个迭代器的方法。不支持普通对象(普通对象的遍历for-in),或者可以使用内建的Object.keys();

    for(var key of arr.keys()) {
        c(key);//遍历的索引值
    }

    1.2 迭代器:

    给人以类型的对象添加迭代器的方法。
    给随便的一个类字符串添加toString();的方法即可转换成字符串,同样给任意的对象添加[Symbol.iterator]();方法就可以使用for-of来遍历该对象。
    eg:给jQuery添加和数组一样的fot-of遍历的方法:、

    jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];

    Symbols是es6里面的新类型。拥有[Symbol.iterator]();的对象是可迭代的。

    var zeroesForeverIterator = {
        [Symbol.iterator] : function() {//命名而已,保证新的和已有的不冲突。
            return this;
        },
        next : function() {
            return {
                done : false,
                value : 0
            }
        }
    };                        

    以上是一个简单的迭代器,for-of循环首先调用集合的[Symbol.iterator]();方法,接着返回一个新的迭代器对象,迭代器对象可以是任意具有.next();方法的对象,for-of循环将重复调用这个方法,每次循环调用一次。

    语法运行环境:
    web重要使用这种语法,要使用Babel和Traceur这些预编译器将es6代码翻译成es5代码。
    在服务器端:不需要任何的预编译器,io.js支持es6,node中需要启用--homoney选项来启动相关属性。

  • 相关阅读:
    strcpy 详解
    c/c++中static详解
    c/c++中const详解
    12、Java中的接口
    11、java中的模板方法设计模式
    10、java中的抽象类
    9、java中的final关键字
    8、java继承中的this和super的应用
    7、java实现的两种单例模式
    6、java中的构造代码块
  • 原文地址:https://www.cnblogs.com/intelwisd/p/7900949.html
Copyright © 2011-2022 走看看