首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

es6 -- Iterator 和 for...of 循环

对数组['a', 'b']执行这个函数,就会返回该数组的遍历器对象(即指针对象)it。 指针对象的 next 方法,用来移动指针。开始时,指针指向数组的开始位置。...如果Symbol.iterator方法对应的不是遍历器生成函数(即会返回一个遍历器对象),解释引擎将会报错 var obj = {}; obj[Symbol.iterator] = () => 1;...[...obj] // TypeError: [] is not a function 上面代码中,变量obj的Symbol.iterator方法对应的不是遍历器生成函数,因此报错。...5.Iterator 接口与 Generator 函数 Symbol.iterator方法的最简单实现,还是使用下一章要介绍的 Generator 函数。...v); // red green blue } 上面代码中,空对象obj部署了数组arr的Symbol.iterator属性,结果obj的for...of循环,产生了与arr完全一样的结果。

76840
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ES6

    在ES6之前,JavaScript中的变量声明使用var关键字,它具有函数作用域而不是块级作用域。这意味着使用var声明的变量可以在其所在的函数内部任何位置访问,而不仅仅是在声明的块级作用域内。...4、使用箭头函数绑定外部this值箭头函数可以绑定外部 this 值,这是因为箭头函数没有自己的 this 上下文。箭头函数的 this 值继承了它所在上下文的 this 值。...当我们在箭头函数中使用 this 时,它指向的就是箭头函数所在的上下文中的 this 值。...由于箭头函数继承了它所在上下文的 this 值,因此在箭头函数中我们可以访问到组件实例的 this 值。 三、模板字符串在ES6中,模板字符串是一种特殊的字符串语法,使用反引号(`)来包裹字符串内容。...= ...arr1, ...arr2;console.log(combinedArray); // 输出:1, 2, 3, 4, 5, 6在上面的例子中,我们使用扩展运算符将两个数组 arr1 和 arr2

    8310

    从零开始学 Web 之 ES6(四)ES6基础语法二

    然后,函数体中一般执行的是异步操作,比如发起Ajax请求,或者开启定时器等。 3、异步操作成功时,调用resolve回调函数,异步操作失败时,调用reject回调函数。...Promise的状态为rejected的情况; 6、上面说到,在异步操作成功或者失败的时候,会调用resolve和reject函数,在这两个回调函数中可以传入参数,这个参数可以直接带入到then中两个匿名函数的参数中使用...typeof运算符的结果,表明变量s是 Symbol 数据类型,而不是字符串之类的其他类型。 注意,Symbol函数前不能使用new命令,否则会报错。...当其他对象使用instanceof运算符,判断是否为该对象的实例时,会调用这个方法。...原因在于,这些数据结构原生部署了Symbol.iterator属性(详见下文),另外一些数据结构没有(比如对象)。凡是部署了Symbol.iterator属性的数据结构,就称为部署了遍历器接口。

    43510

    JS迭代器和生成器

    背景 遍历数组的时候,我相信大多数人已经用上ES6的for...of语法了: const arr = [1, 2, 3] for (const item of arr) { console.log...详细的内容请访问MDN查阅,我这里做一个总结: 可迭代对象需要有一个Symbol.iterator函数属性,返回迭代器对象。 迭代器对象需要有一个next函数属性,返回迭代结果。...所以说,根据这些,我们可以想到一个简化代码的思路,就是让range返回的对象本身也是一个迭代器,当调用Symbol.iterator时返回this: function range(end) {...} } } for (const i of range(5)) { console.log(i) } // 0 1 2 3 4 已经优化了很多了,但是这样还是不够简练,于是引出我们下文要说的内容...(r === itor) // true 和我们自己实现的时候类似,它调用Symbol.iterator时返回的是this。

    1K30

    ES6中的Iterator 和for of循环

    以上数据类型,都有 Symbol.iterator 属性,属性值是一个函数,执行这个函数就会返回一个迭代器。这个迭代器就有 next 方法可顺序迭代子元素。...Symbol.iterator 属性本身是一个函数,这个函数是当前数据结构默认的遍历器生成函数。执行这个函数,就会返回一个遍历器。...方法对应的不是遍历器生成函数(即会返回一个遍历器对象),解释引擎将会报错。...: undefined is not a function // 个人理解:报这个错是因为,执行for of循环的时候,会去遍历器生成函数Symbol.iterator的返回的对象中寻找next方法来执行...(item); // red green blue } 上面代码中,空对象 obj 部署了数组 arr 的 Symbol.iterator 属性,结果 obj 的 for…of 循环,产生了与 arr

    82720

    《你不知道的JavaScript》:迭代器Iterator的背景梳理

    ES6中规定对象的Symbol.iterator属性指向该对象的默认迭代器方法,当对象进行for...of..遍历迭代时,会调用对象的Symbol.iterator方法,返回该对象的默认迭代器。...下面是数组的迭代器接口使用示例: var arr = [10, 2, 3, 4, 5]; var it = arr[Symbol.iterator](); // 调用数组arr的迭代器接口方法,获取数组的迭代器对象...从ES6开始,从一个iterable中提取迭代器的方法是:iterable必须支持一个函数,其名称是专门的ES6符号值Symbol.iterator。调用这个函数时,它会返回一个迭代器。...for..of循环会自动调用它的Symbol.iterator函数来构建一个迭代器。当然也可以手工调用这个Symbol.iterator函数,然后使用它返回的迭代器。...对于上例中arr数组的手工创建迭代器: var arr = [10, 2, 3 , 5, 6]; var it = arr[Symbol.iterator](); // 注意,这里要调用(Symbol.iterator

    1.5K10

    【深扒】 JavaScript 中的迭代器

    在第一段代码中我们遍历的是一个数组,第二段遍历的是一个字符串,我们采用了不同的方法,也就是说我们在面对不同数据结构时往往会采取不同的遍历方式。...在 JavaScript 中原有的表示“集合”的数据结构,主要是 Array 和 Object ,而在 ES6中又新增了 Map和 Set 两种,同时我们还可以组合使用这些数据结构。...Symbol.iterator 属性本身是一个函数,就是当前数据结构默认的遍历器生成函数,执行这个函数,就会返回一个迭代器对象。...Iterator 原生应用场景 有些对象我们并没有为它们部署 Iterator 接口,但是仍然可以使用 for...of 进行遍历。这是因为在ES6中有些对象已经默认部署了这个接口。...解构赋值 对可迭代对象进行解构赋值时,会默认调用 Symbol.iterator 方法 let map = new Set().add('a').add('b'); let [x, y] = map console.log

    53520

    浅习一波JavaScript高级程序设计(第4版)p7-迭代器

    高程给出了解释: 迭代之前需要事先知道如何使用数据结构。 数组中的每一项都只能先通过引用取得数组对象, 然后再通过[]操作符取得特定索引位置上的项。并且,这种情况并不适用于所有数据结构。...即: for 循环不适用遍历所有数据结构; ES5 发布了 forEach ,并没有做出任何改善,反而也是弊端多多: 不能使用 break 语句中断循环; 不能使用 return 语句返回到外层函数;...]()); // ArrayIterator {} ES6 默认的 Iterator 接口部署在数据结构的 Symbol.iterator属性上,该属性本身是一个函数,代表当前数据结构默认的遍历器生成函数...执行该函数 [Symbol.iterator](),会返回一个遍历器对象。只要数据结构拥有 Symbol.iterator属性,那么它就是 “可遍历的” 。...]() { return this; } } 很神奇,不是吗?

    45310

    从理解到实现轻松掌握 ES6 中的迭代器

    JavaScript 中除了 Array 之外,ES6 还新增加了 Map、Set 结构,当我们需要操作这些数据时,就需要一种统一的接口来处理这些不同的数据结构。...了解生成器函数(Generator)的可能不会陌生,同样的当你执行一个生成器函数也会得到一个迭代器对象,但是要区分 生成器和迭代器不是一个概念。...Iterator 接口遍历 解构赋值 数组、Set、Map 解构赋值时,会默认调用 Symbol.iterator 方法。...]() for (const id of r1) { console.log(id); // 0,1,2,3 } 基于生成器函数的迭代器实现 使用生成器函数(Generator)实现是最简单的,只要使用...下一节我们将会讲解异步迭代器在 Node.js 中的使用,欢迎关注。

    46210

    ES6:【深扒】 JavaScript 中的迭代器

    在第一段代码中我们遍历的是一个数组,第二段遍历的是一个字符串,我们采用了不同的方法,也就是说我们在面对不同数据结构时往往会采取不同的遍历方式。...在 JavaScript 中原有的表示“集合”的数据结构,主要是 Array 和 Object ,而在 ES6中又新增了 Map和 Set 两种,同时我们还可以组合使用这些数据结构。...Symbol.iterator 属性本身是一个函数,就是当前数据结构默认的遍历器生成函数,执行这个函数,就会返回一个迭代器对象。...Iterator 原生应用场景 有些对象我们并没有为它们部署 Iterator 接口,但是仍然可以使用 for...of 进行遍历。这是因为在ES6中有些对象已经默认部署了这个接口。...解构赋值 对可迭代对象进行解构赋值时,会默认调用 Symbol.iterator 方法 let map = new Set().add('a').add('b'); let [x, y] = map console.log

    38330

    【深扒】 JavaScript 中的迭代器

    在第一段代码中我们遍历的是一个数组,第二段遍历的是一个字符串,我们采用了不同的方法,也就是说我们在面对不同数据结构时往往会采取不同的遍历方式。...在 JavaScript 中原有的表示“集合”的数据结构,主要是 Array 和 Object ,而在 ES6中又新增了 Map和 Set 两种,同时我们还可以组合使用这些数据结构。...Symbol.iterator 属性本身是一个函数,就是当前数据结构默认的遍历器生成函数,执行这个函数,就会返回一个迭代器对象。...Iterator 原生应用场景 有些对象我们并没有为它们部署 Iterator 接口,但是仍然可以使用 for...of 进行遍历。这是因为在ES6中有些对象已经默认部署了这个接口。...解构赋值 对可迭代对象进行解构赋值时,会默认调用 Symbol.iterator 方法 let map = new Set().add('a').add('b'); let [x, y] = map console.log

    51431

    一文彻底搞懂迭代器与生成器函数

    方法,再调用返回的next方法,最后得到当前的值 我们可以在控制台看下 数组是有这个Symbol.iterator属性的 从以上迭代器特征中,我们可以得知,数组是通过一个Symbol.iterator...yield这样的关键字 实际上这就是内部函数的状态机,当你使用用生成器时,你调用next就会返回一个对象,并且像迭代器一样返回{value: xxx, done: false}因此在使用上,我们必须认清...当你使用 ... gtest[Symbol.iterator]().next(); gtest[Symbol.iterator]().next() gtest[Symbol.iterator]().next...本质上是通过生成器对象的prototype的Symbol.iterator连接了起来 生成器函数的return 当我们在生成器函数内部return时,那么当调用next迭代完所有的值时,继续调用next...生成器函数调用返回的是一个迭代器,具备迭代器所有特性,yield这个状态机只能在生成器函数内部使用 以实际例子对对象扩展支持迭代器特性,如果需要支持迭代器特征,那么必须原型上扩展Symbol.iterator

    54620

    【扒一扒】深入理解 ES6 Iterator

    其实for of 并不是真的强大,他只是一种ES6新的语法而已。 并不是所有的对象都能使用 for of,只有实现了Iterator接口的对象才能够使用 for of 来进行遍历取值。...这是因为在 ES6中有些对象已经默认部署了此接口,不需要做任何处理,就可以使用 for of 来进行遍历取值。 不信?咿,你好难搞,我不要你说 - 信,我要我说 - 信。...数组 //数组 var arr=[100,200,300]; var iteratorObj= arr[Symbol.iterator]();//得到迭代器方法,返回迭代器对象 console.log...例如:Set、Map、Array.from 等 //为了证明,先把一个数组的默认迭代器给覆盖掉 var arr=[100,200,300]; arr[Symbol.iterator]=function...); //调用 Array.from方法 Array.from(arr); yield* 关键字 yield*后面跟的是一个可遍历的结构,执行时也会调用迭代器函数。

    64620
    领券