原文链接:https://javascript.info/polyfills,translate with ❤️ by zhangbao.

JavaScript 语言稳步发展。 对该语言的新提议定期出现,对它们进行分析,如果认为有价值,则将其附加到 https://tc39.github.io/ecma262/ 列表中,然后进入规范。

JavaScript 引擎背后的团队对于首先要实现的内容有自己的想法。 他们可能决定实施草案中的提案并推迟已经在规范中的内容,因为它们不那么有趣或者更难做。

因此,引擎仅实现标准的一部分是很常见的。

查看当前语言功能支持状态的好页面是 https://kangax.github.io/compat-table/es6/(有很多内容,我们还有很多要研究的内容)。

Babel

当我们使用该语言的现代功能时,某些引擎可能无法支持此类代码。 正如所说,并非所有功能都在各处实现。

Babel 在这里就其作用了。

Babel 是一个转码器,它将现代 JavaScript 代码重写为先前的标准。

实际上,Babel 有两个部分:

  1. 首先,重新编写代码的转换器程序。 开发人员在自己的计算机上运行它。 它将代码重写为旧标准。 然后将代码交付给用户的网站。 像 webpackbrunch 这样的现代项目构建系统提供了在每次代码更改时自动运行转换器的方法,因此不会造成我们方面的任何时间损失。

  2. 第二点,就是 polyfill。

转换器重写代码,因此涵盖了语法功能。 但是对于新函数,我们需要编写一个实现它们的特殊脚本。 JavaScript 是一种高度动态的语言,脚本不仅可以添加新功能,还可以修改内置功能,以便它们按照现代标准运行。

有一个术语“polyfill”用于脚本“填补”差距并添加缺少的实现。

两个有趣的 polyfill 是:

  • babel polyfill,它支持很多,但很大。

  • polyfill.io 服务,允许根据我们需要的功能按需加载/构建 polyfill。

因此,我们需要设置转换器并为旧引擎添加 polyfill 以支持现代功能。

如果我们面向现代引擎并且不使用除了那些支持的功能之外的功能,那么我们不需要使用Babel。

本教程中的示例

大多数例子都是可运行的,像这样:

  1. alert('Press the "Play" button in the upper-right corner to run');

使用现代 JS 的示例仅在您的浏览器支持时才有效。

Chrome Canary 适用于所有示例,但其他现代浏览器也很好。

请注意,在制作时我们可以使用 Babel 将代码转换为适合不太新的浏览器,因此不会有这样的限制,代码将在任何地方运行。

(完)