【问题标题】:Does browser internally transpile ES6 to ES5?浏览器是否在内部将 ES6 转换为 ES5?
【发布时间】:2021-08-04 05:19:07
【问题描述】:

由于现代浏览器支持 ES6。他们是否在内部将 ES6 转换为 ES5,然后执行代码?或者他们可以使用 C++ 引擎原生地理解 ES6 代码?

如果他们可以直接运行 ES6,它如何确保执行 ES6 代码的行为完全等同于执行该代码的转译 ES5 版本?

【问题讨论】:

  • 原生代码将直接运行 ES6。他们不会担心 ES5,他们会遵循规范。262.ecma-international.org/6.0
  • 转译后的代码是否与“本机” ES6 代码一样,不是浏览器关心的问题。这是编译器关心的问题。如果它们的行为不同,那么这是转译器中的错误。浏览器只会运行你给它的任何代码。
  • 最新的规范是 ECMAScript 2020 262.ecma-international.org,那是 ES11 吗?自从转向年度规范以来,每个浏览器支持的哪些功能变得更加重要,而不是哪个版本。
  • 确保 ES6 运行与 ES5 转译代码相同不是 JS 引擎的责任——这是转译器的责任。 JS 引擎需要按照规范运行 ES6 代码。 JS 引擎不会在内部将 ES6 转换为 ES5 - 它会原生执行 ES6。支持 TypeScript 的引擎(例如 Deno)会在内部将 TypeScript 转换为 ESx,然后运行 ​​ESx(其中x 表示其当前支持的 JS 版本)。我知道没有运行时引擎本身支持 TypeScript。有很多原生支持 ES6 的 JS 引擎。
  • babel 是否总是能够将新的 ES 功能转译到 ES5 中?也就是说,在某些情况下,新的 JS 特性是否无法通过 ES5 模仿?

标签: javascript node.js ecmascript-6 browser ecmascript-2016


【解决方案1】:

您的问题的答案很简单:不,浏览器不会转译您的代码。

没有必要,因为新规范试图通过添加新语法糖、新功能和新 API 来保持向后兼容,同时保持现有内容不变。

【讨论】:

  • babel 是否总是能够将新的 ES 功能转译到 ES5 中?也就是说,在某些情况下,新的 JS 功能是否无法通过 ES5 模仿?
  • Babel 文档的这个页面中有一些边缘案例列表:babeljs.io/docs/en/caveats
猜你喜欢
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2020-05-29
相关资源
最近更新 更多