Google Apps Scrip V8运行时使用哪个版本的ECMAScript?

2022-06-15 00:00:00 google-apps-script javascript v8 ecma

当您创建一个新的Google Apps脚本时,它似乎默认支持V8运行时。documentation状态:

Apps脚本支持两个JavaScript运行时:现代的V8运行时和由Mozilla的Rhino JavaScript解释器支持的旧运行时。

V8运行时支持现代ECMAScript语法和功能。

V8 runtime documentation状态:

您可以在由V8运行时支持的脚本中使用现代ECMAScript语法。此语法包括let、const和许多其他流行功能。

在这两种情况下,他们都非常含糊地说明支持哪个ECMAScript版本,只是简单地声明了现代ECMASIPT语法。这是有问题的,因为有7 versions that were released between 2015 and 2021。因此,摩登&可以引用这些版本中的任何一个。

例如,我可以很容易地假设&现代&引用最新的ECMAScript第12版(2022),并最终编写如下代码:

let a = 1_000;

但是,尝试使用该语法会导致错误:

语法错误:ParseError:意外令牌非法行:...

在找到受支持的最新版本之前,不必手动逐一查看其余6个版本,最好能找到明确说明受支持的ECMAScript版本的文档。

注意:前面的相关问题(Which Edition of ECMA-262 Does Google Apps Script Support?)没有什么用处,因为这些答案还参考了现代ECMAScript&,而不是明确的特定版本。

V8运行时支持哪个版本的ECMAScript?


解决方案

这里有一些细微差别:

Google Apps脚本使用哪个版本的V8?

是一个相当新的版本,而且经常更新。我相信这个想法是为了跟踪或稍微落后于稳定的Chrome版本,但(就像任何更新其依赖项的大型项目一样)可能偶尔会出现问题/延迟。现在它应该在9.x版本范围内的某个地方。(对于未来的读者:我预计这一声明在2022年结束之前就会过时!)

Google Apps脚本V8运行时支持哪个版本的ECMAScript?

我想,如果这个问题有一个简单的答案,您可以在文档中找到。正如@Kaiido在评论中所说,JavaScript引擎逐一实现新的JavaScript功能(而不是ECMAScript版本)。因此,对于浏览器而言,就像在GAS这样的环境中一样,询问功能X是否受支持通常更有意义,因为很可能仍缺少某些ES2020功能,但某些ES2021功能已经可用。

为什么let a = 1_000;会产生语法错误?

好的,GAS使用的V8版本足够新(至少两年)来支持它;但是整体的GAS体验不仅取决于V8:编辑器正在解析输入的源代码,以便提供帮助、突出显示、错误检查或诸如此类的东西。看起来GAS团队意识到某些功能尚未得到负责的组件的支持,并正在积极努力解决这一问题。(我不知道时间表是什么。)

相关文章