JS 生成器推导语法【非标准】

🌙
手机阅读
本文目录结构

非标准的。不要使用! generator 推导式是非标准的,而且它不太可能会被添加到 ECMAScript。考虑到将来,请使用 generator。

生成器推导语法是一种 JavaScript 表达式,它允许您基于现有的可迭代对象快速组合新的生成器函数。

许多编程语言中都存在推导。

看下面,原来 Generator 推导式语法在 SpiderMonkey 的不同之处,它是基于对 ECMAScript4 的提议。

语法

(for (x of iterable) x)
(for (x of iterable) if (condition) x)
(for (x of iterable) for (y of iterable) x + y)

描述

在 Generator 推导式中,这两种构成方式都是允许的:

  • for…of
  • if for-of 迭代器是构成的第一个部分。当由多重部分构成时,后面 for-of 和 if 构成方式都是被允许的。

示例

单个构成部分的 generator 推导式:

(for (i of [ 1, 2, 3 ]) i*i );
// generator function which yields 1, 4, and 9

[...(for (i of [ 1, 2, 3 ]) i*i )];
// [1, 4, 9]

var abc = [ "A", "B", "C" ];
(for (letters of abc) letters.toLowerCase());
// generator function which yields "a", "b", and "c"

有 if 伴随的多重构成的 gennerator 推导式:

var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];

(for (year of years) if (year > 2000) year);
// generator function which yields 2006, 2010, and 2014

(for (year of years) if (year > 2000) if(year < 2010) year);
// generator function which yields 2006, the same as below:

(for (year of years) if (year > 2000 && year < 2010) year);
// generator function which yields 2006

Generator 推导式与 Generator 函数对比

用一种简单的方式来理解 generator 推导式的语法并与 generator 函数来做个比较。

Example 1: 仅是 generator.

var numbers = [ 1, 2, 3 ];

// Generator 函数
(function*() {
  for (let i of numbers) {
    yield i * i;
  }
})()

// Generator 推导式
(for (i of numbers) i*i );

// 结果: 两者都得到 yields [ 1, 4, 9 ]

Example 2: 在 generator 中用 if.

var numbers = [ 1, 2, 3 ];

// Generator 函数
(function*() {
  for (let i of numbers) {
    if (i < 3) {
      yield i * 1;
    }
  }
})()

// Generator 推导式
(for (i of numbers) if (i < 3) i);

// 结果: 两者都得到 yields [ 1, 2 ]

规范

Generator 推导式是最初在 ECMAScript 2015 中进行拟稿,但是在 14 年 8 月 27 号修订中被移除了。

请参阅较旧版本的 ES2015 规范语义。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了