Javascript 检查 yield 支持

在 ECMAScript 6 中,生成器(Generator)是一种新的函数类型,可以通过 yield 关键字来暂停和恢复函数执行。生成器函数常用于异步编程和迭代器实现。

但是,并不是所有的浏览器都支持生成器语法。因此,在使用生成器之前,我们需要检查当前环境是否支持 yield 关键字。

检测方法

我们可以使用以下代码来检查当前环境是否支持 yield

--------- ------ -
  ----- --
-

----- ----------- - ------ ----------------------- --- -----------

在这个示例中,我们定义了一个简单的生成器函数 test,该函数仅返回数字 1。然后,我们使用生成器函数的 [Symbol.iterator] 属性来检查当前环境是否支持 yield 关键字。如果支持 yield,则该属性将返回一个迭代器对象,否则将返回 undefined

最后,我们定义一个布尔值变量 isSupported,它表示当前环境是否支持 yield 关键字。

Polyfill 实现

如果当前环境不支持 yield,我们需要使用 polyfill 来实现该特性。下面是一个简单的 polyfill 实现:

-- ------- ------ --- ----------- -- ----------------- -
  --------------- - -- -- --
    ----- -- -- -- ----- ---- --
  ---
-

在这个示例中,我们首先检查 Symbol 对象和 Symbol.iterator 属性是否存在。如果它们不存在,则定义一个新的 Symbol.iterator 属性并返回一个对象,该对象包含一个 next 方法,该方法总是返回一个 { done: true } 对象。

这个 polyfill 实现可以让不支持 yield 的环境也能够使用生成器语法。

总结

在使用生成器之前,我们需要检查当前环境是否支持 yield 关键字。如果不支持,我们需要使用 polyfill 来实现该特性。检查支持和实现 polyfill 的方法均已经介绍过了,可以根据实际情况来选择使用哪种方法。

示例代码

检测是否支持 yield

--------- ------ -
  ----- --
-

----- ----------- - ------ ----------------------- --- -----------

-------------------------

Polyfill 实现

-- ------- ------ --- ----------- -- ----------------- -
  --------------- - -- -- --
    ----- -- -- -- ----- ---- --
  ---
-

--------- ------ -
  ----- --
  ----- --
  ----- --
-

--- ------ ----- -- ------- -
  -------------------
-

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/30496