使用babel-runtime兼容Set、Map、Promise等接口的疑惑?

在支持上述接口的浏览器中,babel-runtime是使用原生的api还是它模拟的api ?

阅读 3.6k
1 个回答

babel-runtime 不会转译实例方法,如 "foobar".includes("foo")之类的实例方法。

对于Set Map Promise 等全局对象的兼容,babel-runtime提供了polyfill选项:

polyfill

boolean, defaults to true.
Toggles whether or not new built-ins (Promise, Set, Map, etc.) are transformed to use a non-global polluting polyfill.

也就是说,如果polyfilltrue无论浏览器支不支持Promise等新全局对象,浏览器都会使用babel-runtime转换后的全局对象

如果polyfill设为 false,在不支持上述接口的浏览器中,会报错。在支持上述接口的浏览器中,则会使用浏览器原生的对象。

以下是三种不同的情况下打印Promise对象,可以看出明显区别:

  • polyfilltrue, 浏览器支持Promise

    clipboard.png

  • polyfillfalse, 浏览器支持Promise

    clipboard.png

  • polyfillfalse, IE浏览器不支持Promise

    clipboard.png

参考:

  1. Runtime transform

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题