首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EcmaScript-6向后兼容性

EcmaScript-6向后兼容性
EN

Stack Overflow用户
提问于 2015-05-10 07:56:03
回答 2查看 11K关注 0票数 14

我很想了解/弄清楚ECMAScript-6新的更改是否能在旧浏览器上工作。

我问这个问题的原因是:

我记得在ECMAScript-5中引入了'use strict';,它的目的是为了与旧版本兼容。

这意味着旧的浏览器将保持良好的工作状态,当它们在解析新的'use strict';代码时遇到JavaScript语句时就会忽略它。

新的JS引擎将以某种特殊的方式处理语句'use strict';,详见此处严格模式

所以,关于这个问题

我对ECMAScript-5兼容浏览器在解析ECMAScript-6代码时的行为表示严重怀疑和好奇。

我怀疑的原因是ECMAScript-6新特性涉及语法更改/更新。而旧的浏览器是新语法--不知情的--当它们遇到下列任何新语法时,它们将开始抛出错误。

yield[*], Map, Set, WeakMap, function* foo(){}, =>, for...of etc.

我担心的是,ECMAScript-6中新特性的决定/包含是否考虑到了对旧浏览器的支持而不中断代码呢?

,如果是,,那么怎么做?

,如果不是,我该怎么做才能让我的老浏览器用户高兴呢?

我看到了一个让使用旧浏览器的用户满意的解决方案,在我的项目中包括了一些引射器 (比如跟踪编译器 )。这将将我的ECMAScript-6代码转换为ECMAScript-5等效代码。但是我有没有其他的解决方案来让我的老浏览器用户满意呢?

EN

回答 2

Stack Overflow用户

发布于 2015-06-01 05:25:28

您在这里试图解释的是向前兼容性。显然,ES 5(或更准确地说是ES 5引擎)并不是向前兼容的。不管怎么说都很难找到,很难找到。

尽管您可以看到,即将到来的ES 7的一些功能已经过时,因此考虑到这些增强,可能会实现ES 6的引擎。因此,每当ES 7出现时,一些特性将在旧引擎中工作。对问题的回答是,ES 6向后兼容将是“是”。是!ES 6的引擎很乐意运行ES 5的代码,反之亦然。

票数 9
EN

Stack Overflow用户

发布于 2015-05-10 08:17:04

许多ES6特性不能在ES5 JS引擎中工作,特别是新的语法特性,如for/of或箭头函数、生成器等.一些特性,如Set对象,可以为旧浏览器部分填充,而其他功能则不能。

在您的问题中所包含的特性列表:

代码语言:javascript
复制
yield[*], Map, Set, WeakMap, function* foo(){}, =>, for...of

所有这些都不兼容早期版本的Javascript,并且将导致语法错误或引用错误。MapSet的一些特性可以被多填充(虽然不是全部)。产量、生成器、箭头函数和for...of只是旧浏览器不处理也不能执行的新语法。可以使用ES6转换程序将您的代码转换为与ES5兼容的代码。这并不是真正的ES6向后兼容性,而是一种代码转换,它只使用ES5语法来完成在较新的ES6语法中表达的相同内容。其中的一些是用多填充完成的,而另一些则是使用仅使用ES6代码(通常是更多的ES5代码)来表示ES5构造的替代方法。

如果您的代码运行在类似node.js的内容中,或者是特定浏览器的特定版本的插件,那么您可以更好地控制JS引擎,并且可能比在浏览器中更快地使用ES6特性。

如果您的代码在浏览器中运行,并且没有使用转换程序来转换到ES5代码,那么还需要一段时间(许多年),直到互联网上大多数正在使用的浏览器都准备好了ES6。

"use strict";的不同用途(删除对不良实践的支持)更符合于允许与旧版本兼容,而不是像生成器这样的新语言特性,因为"use strict";构造被专门选择为新浏览器可以检测到的内容,但旧浏览器只会将其视为正常字符串。表示新语言语法的新ES6特性并不是这样的,因为旧的浏览器不知道如何处理它们,即使它们可以忽略较新的语法,也不支持新语法所暗示的功能。

您可能会发现这篇文章很有用,它讨论了今天尝试使用ES6时的一些问题:

ECMAScript 6好奇JavaScripter的资源

如果您现在想在广泛的浏览器中使用大多数ES6功能,那么最好的选择可能是使用类似于BabelJS的代码。这将将您的ES6代码转换为将在任何ES5浏览器中运行的ES5兼容代码。您可以使用ES6编写,但是代码将在多种浏览器中运行。

或者,如果您仅在特定环境(例如特定版本的浏览器插件)或特定运行时引擎(如node.js )中运行,则可以编写使用该特定引擎中已经支持的ES6特性的代码。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30149034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档