• javascript中的iterable


    遍历Array可以采用下标循环,遍历MapSet就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,ArrayMapSet都属于iterable类型。

    具有iterable类型的集合可以通过新的for ... of循环来遍历。

    for ... of循环是ES6引入的新的语法,请测试你的浏览器是否支持:

    1 "use strict";
    2 var a = [1, 2, 3];
    3 for(var x of a) {
    4 }
    5 console.log("你的浏览器支持for...of");
    以上代码可以在chrome的开发模式中直接运行测试;
    for ... of循环遍历集合,用法如下:
     1 var a = ['A', 'B', 'C'];
     2 var s = new Set(['A', 'B', 'C']);
     3 var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
     4 for (var x of a) { // 遍历Array
     5     console.log(x);
     6 }
     7 for (var x of s) { // 遍历Set
     8     console.log(x);
     9 }
    10 for (var x of m) { // 遍历Map
    11     console.log(x[0] + '=' + x[1]);
    12 }
    那么for...of循环和for...in循环有什么区别呢?

    for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。

    当我们手动给Array对象添加了额外的属性后,for ... in循环将带来意想不到的意外效果:

    1 var a = ['A', 'B', 'C'];
    2 a.name = 'Hello';
    3 for (var x in a) {
    4     console.log(x); // '0', '1', '2', 'name'
    5 }

    for ... in循环将把name包括在内,但Arraylength属性却不包括在内。

    for ... of循环则完全修复了这些问题,它只循环集合本身的元素:

    1 var a = ['A', 'B', 'C'];
    2 a.name = 'Hello';
    3 for (var x of a) {
    4     console.log(x); // 'A', 'B', 'C'
    5 }

    这就是为什么要引入新的for ... of循环。

    然而,更好的方式是直接使用iterable内置的forEach方法,它接收一个函数,每次迭代就自动回调该函数。以Array为例:

    1 'use strict';
    2 var a = ['A', 'B', 'C'];
    3 a.forEach(function (element, index, array) {
    4     // element: 指向当前元素的值
    5     // index: 指向当前索引
    6     // array: 指向Array对象本身
    7     console.log(element + ', index = ' + index);
    8 });

    注意forEach()方法是ES5.1标准引入的,你需要测试浏览器是否支持。

    SetArray类似,但Set没有索引,因此回调函数的前两个参数都是元素本身:

    1 var s = new Set(['A', 'B', 'C']);
    2 s.forEach(function (element, sameElement, set) {
    3     console.log(element);
    4 });

    Map的回调函数参数依次为valuekeymap本身:

    1 var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
    2 m.forEach(function (value, key, map) {
    3     console.log(value);
    4 });

    如果对某些参数不感兴趣,由于JavaScript的函数调用不要求参数必须一致,因此可以忽略它们。例如,只需要获得Arrayelement

    1 var a = ['A', 'B', 'C'];
    2 a.forEach(function (element) {
    3     console.log(element);
    4 });

    参考:https://www.baidu.com/link?url=_Gez6t-oWUcG7C19oVjjQmFAuSLEMbvAuqVIN2CRu0gRBZ_Cv1Q1arLkd128nbvP&wd=&eqid=ba5e12510001045e000000065a2bfb64

  • 相关阅读:
    黑马程序员__OC三大特性
    黑马程序员___OC类和对象
    黑马程序员___预处理指令
    黑马程序员___数据类型总结
    黑马程序员__指针
    黑马程序员__C语言__函数__static和extern
    黑马程序员__C语言__流程控制__选择结构
    黑马程序员__C语言__循环结构
    入园随笔
    Fiddler中抓取不到Jmeter模拟的请求包。
  • 原文地址:https://www.cnblogs.com/cjx-work/p/8013092.html
Copyright © 2020-2023  润新知