当您缓存一个新的Google脚本时,默认情况下它似乎支持v8运行时。文档指出:
应用程序脚本支持两个JavaScript运行时:现代的V8运行时和由Mozilla的Rhino JavaScript解释器驱动的旧运行时。 V8运行时支持现代的ECMAScript语法和特性。
V8运行时文档指出:
您可以在由ECMAScript运行时驱动的脚本中使用现代的V8语法。这个语法包括let、const和许多其他流行特性。
在这两种情况下,对于支持哪个ECMAScript版本,他们都非常模糊,只是简单地说明了“现代ECMAScript语法”。这是有问题的,因为有2015年至2021年发布的7个版本。因此,“现代”可以指这些版本中的任何一个。
例如,我可以很容易地假设“现代”指的是最新的第12版(2022年) ECMAScript,并最终编写了如下代码:
let a = 1_000;但是,试图使用该语法会导致错误:
语法错误: ParseError:意外令牌非法行:.
与其手动遍历其余6个版本中的每个版本,直到找到支持的最新版本,不如找到明确声明支持哪个ECMAScript版本的文档。
注意:前一个相关的问题(Google脚本支持哪个版本的ECMA-262?)是没有帮助的,因为这些答案也提到了“现代ECMAScript”,而不是一个明确的、具体的版本。
ECMAScript运行时支持哪个版本的V8?
发布于 2022-02-12 18:30:48
这里有一些细微之处:
Google脚本使用哪个版本的V8?
一个合理的最新版本,它经常被更新。我相信这个想法是跟踪或稍微落后于稳定的Chrome版本,但是(就像任何大型项目更新它的依赖项一样)可能偶尔会出现问题/延迟。现在它应该在9.x版本范围的某个地方。(对于未来读者:我希望这句话在2022年结束之前就过时了!)
Google脚本ECMAScript运行时支持哪个版本的V8?
我想如果有一个简单的答案,你会发现在文档中。正如@Kaiido在评论中所说,JavaScript引擎一个接一个地实现新的JavaScript特性(而不是EcmaScript版本)。因此,对于像GAS这样的环境一样的浏览器来说,问“features支持吗?”通常更有意义,因为很可能有些(比方说) ES2020特性仍然缺失,但一些ES2021功能已经可用。
为什么
let a = 1_000;会产生语法错误?
好吧,GAS使用的V8版本足够新(至少两年)来支持它;但是总的GAS体验依赖于V8以外的更多:编辑器正在解析输入的源代码,以提供帮助或突出显示或错误检查等等。看起来燃气团队已经意识到某些特性还没有被负责的组件所支持,并且正在积极地致力于解决这个问题。(我不知道时间线是什么。)
发布于 2022-02-12 19:52:44
为什么
let a = 1_000;会产生语法错误?
仅仅是为了扩展关于解析器不支持的新特性的@jmrk的回答。
function test2564(){
//let a = 1_000; throws syntax error by the parser
console.info(eval(`1_000`));// correctly logs 1000
}底层的V8引擎很好,并且支持最新的特性,但是解析器不允许您使用这些特性保存或执行项目,因为它认为它们是语法错误。
https://stackoverflow.com/questions/71089066
复制相似问题