为什么在 Chrome 和其他浏览器更支持 ES6 的情况下使用 transpilers/shims?

Why use transpilers/shims when ES6 is more supported in Chrome and other Browsers anyway?

根据 ES6 兼容性判断table发现here

大多数 shim 和转译器只实现了 70% 以下的 ES6 功能,所以当 Javascript 现在 Chrome/Safari 和 Firefox 默认支持 ES6 时,为什么还要有人使用 Babel/Traceur .

我的意思是,如果我是 say Babel 的开发人员 - 确保您在竞争之前实现 ES6 甚至 ES7 功能肯定是您的第一要务。

还是我漏掉了什么?

一般来说,转译器的存在是为了将为一种环境编写的代码转换为为不同环境编写的代码。这可以用于在完全不同的语言之间或仅在一种语言的不同版本之间转换代码。

所以在 ECMAScript 6 刚刚出现并且浏览器对它的支持不多的时候,开发了一些转译器来让你在只支持 "legacy" ECMAScript 的浏览器中使用 ECMAScript 的新语言特性功能。

尽管最新的浏览器现在支持大部分或所有新功能,但变化不大。您仍然会使用转译器来支持那些以前不支持这些功能的相同实现。

在某些时候,开发人员可能会放弃对某些浏览器的支持,这意味着到那时他们可以停止转译代码。不同的人会做出不同的决定,因此转译器将在未来几年继续使用。

Most shims and transpilers only implement below 70% of ES6 features, so why should someone use Babel/Traceur when Javascript ES6 is pretty much supported now in Chrome/Safari and Firefox by default.

因为我的一些应用程序仍然需要支持低至 IE9(我们终于让您的客户提高 IE9 的门槛)。这不是因为我们的客户缺乏知识,而是因为该平台的用户实际使用该浏览器。

尤其是当您的用户是公司(或其员工)时,IE(甚至 Edge)通常仍然是标准配置。

"am I missing something here?" -Yes. You are missing decades of arguments about the relative merits of dynamic and static typing. Get to reading. – Jared Smith

@Daniel,你的 none 编辑确实改变了 Jared 在这一点上所做的任何事情。

JS 可能永远不会提供静态类型检查或编译时错误;因为这是编写和发布代码的一种截然不同的方法。

I mean, if I was a developer at say Babel - surely it would be your number 1 priority to make sure you have ES6 and even ES7 features implemented before your competition.

是的,我喜欢使用 ES6 并在需要时使用转译器,但我仍然认为 ES7 功能不稳定并且正在开发中。如果最终实现与当前版本不同,我将不得不重新访问并检查我将使用它的每个项目。在生产中实际使用它们的不确定性太大,所以......
(作为 Babels 的用户之一) 实际上并不关心一个转译器或另一个是否已经支持这些最新功能,除非发布了最终标准。

虽然有时我喜欢玩弄这些新功能,喜欢看看它们的好处、可能性、限制和问题,以及如何将它们转换为当前代码。