美文网首页@IT·互联网Web前端之路让前端飞
002|JavaScript ES6新特性之迭代器

002|JavaScript ES6新特性之迭代器

作者: 中年小钢炮 | 来源:发表于2017-05-30 11:45 被阅读48次

for...of

我们知道for...in可以用于遍历对象属性名key,而for...of则可以遍历容器的value。我们通过下面的例子来比较一下:

let arr = [7, 8, 9];
arr.foo = 'James';

for (let i in arr) {
   console.log(i); // logs "0", "1", "2", "foo"
}

for (let i of arr) {
   console.log(i); // logs 7, 8, 9
}

迭代器

迭代器(iterator)一个是可以用于遍历容器(如Array等)的对象。迭代器只有一个方法,next()。

next()

next将依次返回容器中的新值{value:xxx, done:false},直到遍历完毕返回{done:true}

我们来看一下创建一个array的迭代器:

function makeIterator(array) {
    var nextIndex = 0;
    
    return {
       next: function() {
           return nextIndex < array.length ?
               {value: array[nextIndex++], done: false} :
               {done: true};
       }
    };
}

var it = makeIterator(['David', 'James']);
console.log(it.next().value); // 'David'
console.log(it.next().value); // 'James'
console.log(it.next().done);  // true

迭代协议

for..offor...in 有着本质上的不同,隐藏于 for...of 背后的是原理是迭代协议。

迭代协议的涵义是,对象的System.iterator属性应当是一个函数,当调用后返回一个全新的迭代器。

当用for...of 遍历一个object时它的工作流程如下:
1、获取object的System.iterator属性指向的函数。
2、调用该函数,返回值为一个迭代器。
3、调用迭代器next()方法,得到value、done两个值。
4、如果done为true,退出循环。
5、如果值done为false,则将value用于statements中,执行for...of循环体。执行完后返回3。

好了,完结。

什么是生成函数?

相关文章

  • 002|JavaScript ES6新特性之迭代器

    for...of 我们知道for...in可以用于遍历对象属性名key,而for...of则可以遍历容器的valu...

  • 合集

    JavaScript合集 ES6 ES6新特性原生实现一个promiseSymbol 实例 JavaScript读...

  • Javascript 迭代器是什么

    Javascript 迭代器是什么 JavaScript迭代器是在ES6中引入的,用于循环一系列值,通常是某种集合...

  • JS学习笔记-进阶

    迭代器 ES6中提供了一个新的语法特性用于迭代,可以对数组,类数组,普通对象(需要依赖Object.entries...

  • ES6 常用函数 记一次分享内容

    ES6 新特性 简介: ECMAScript 6.0(以下简称 ES6)是 JavaScript 新一代标准,加入...

  • Javascript学习笔记-ES6语法

    ES6带来了Javascript新的变化,新的语法特性,使得之以前版本中需要特性方式才能解决的问题一些问题得到了简...

  • ES6新特性 iterators and Generators

    ES6中引入了许多新特性,目前大量的JavaScript项目已经使用了ES6来进行开发,那么熟悉这些新的特性是十分...

  • ES6对象展开符

    JavaScript是ECMAScript的实现和扩展,ES6标准的制定也为JavaScript加入了许多新特性。...

  • [Decorator] 学习

    # Javascript 中的装饰器 # ES6 系列之我们来聊聊装饰器

  • ECMAScript6-in-depth学习笔记

    ECMAScript 6 (ES6)JavaScript属于ES的扩展。 第二章·迭代器和for-of循环 1、E...

网友评论

    本文标题:002|JavaScript ES6新特性之迭代器

    本文链接:https://www.haomeiwen.com/subject/sbqrfxtx.html