繁体   English   中英

如何安全使用ES6的新功能?

[英]How to safely use ES6 new features?

ES6的许多功能看起来很不错,例如=>语法, Map对象和long等。

老实说,我有点讨厌检查是否由于ie8 attachEvent而支持addEventListener,我不希望这种痛苦回到我的生活中。

那么,您将如何应对这种新的可能性? (或者说,您将如何在一年左右的时间内)。 您是否不将它们用于基本操作,而是添加另一层附加功能? 您是否仅将它用于知道将在支持它们的浏览器中运行的应用程序? 您会等到至少有90%的支持吗?

我了解这些功能很棒,但是对于中短期使用来说,您似乎需要加倍代码检查和后备支持才能使用。

对这个主题有什么启示吗?

编辑:请不要将此标记为重复。 注意,我不是在问如何检查支持,而是在问开始使用它是否明智,或者最好等待一下。 我还问支持检查是否是最好的选择,而不是怎么做,或者在设计代码时是否还有其他方法可以进行。

TL;博士:利用transpilerspolyfills的。


是否应使用新功能主要取决于目标环境以及使用新功能的精确程度。 例如,如果您仅针对最新的浏览器版本,则不会有问题。 必须支持IE8? 那可能会更困难。

虽然在一般,你应该开始使用新功能尽快和利用的工具,帮你。


有两个方面需要考虑:

  • 新的API
  • 新的语法构造

蜜蜂

可以(但并非总是)将新API进行polyfilled 即,您包括一个库,该库检查API的某些部分是否存在,例如Map ,如果不存在,则提供替代实现。

这些替代实现可能不是100%等效的,或者可能不像本机实现那样高效,但是我想说它们在所有用例中都可以达到95%。

关于polyfills的好处是,如果可用,您将自动使用本机浏览器实现。

句法

使用新的语法构造(例如箭头函数或类)要复杂一些(但不多)。 最大的问题是不支持语法的浏览器甚至无法评估您的代码。 您只能将代码发送到实际上可以解析的浏览器。

幸运的是,许多新的语法元素(例如箭头函数)实际上只是ES5已经可以实现的语法糖 因此,我们可以 ES6代码转换为其ES5或等效的ES3。

在过去的一两年中,出现了几种称为转译器的工具。 请注意,编译器必须先转换代码, 然后再将其发送到浏览器。 这意味着您不仅需要简单地编写JS文件并直接将其包含在页面中,还需要有一个构建步骤 ,该步骤首先转换代码(就像我们在其他语言(如C或Java)中一样)。

这与几年前我们编写JS的方式不同,但是拥有构建步骤已被JS社区越来越接受。 也有许多构建工具试图使此过程尽可能轻松。

一个缺点是,与polyfill不同,如果原始功能可用,您将不会神奇地使用它们。 因此,您可能会长时间坚持交付已转译的版本,直到所有目标环境都支持所需的所有功能。 但这可能比根本不使用新功能要好。

您可以使用BabelJSGoogle Traceur

您必须在构建过程中包括将ES6,ES7代码转换为与当今浏览器兼容的Javascript的步骤。 大口大口咕gr的任务。 Babel 此处提供了支持的工具列表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM