哪些ECMAScript 6特性意味着严格模式?

30
在ECMAScript 6(也称为JavaScript)中,我们可以通过在函数(或文件)顶部添加"use strict"来触发严格模式。但是,在ECMAScript 6中,某些语法特性将启用严格模式,尤其是 class 和 模块(无论你如何实现)。因此,在ECMAScript 6中,触发严格模式的完整方式列表是什么?

我猜测ES6都是严格模式。 - Daniel A. White
那是最初的计划,但向后兼容性问题意味着规范仍然包含大量支持“宽松模式”的内容。 - Sean McMillan
1个回答

32

规范 表明:

  • 模块代码始终是严格模式代码。
  • ClassDeclarationClassExpression 的所有部分都是严格模式代码。

其余部分与 ES5 中已知的内容一致,基本上每个以"use strict"; 指令开始的全局 / eval / 函数代码。这在新的 ES6 函数类型(箭头函数、生成器、方法语法)中也适用。


3
看到生成器不是隐式严格的,我感到有些惊讶。 - Sean McMillan
答案和规范(由上面的某人链接)缺少一个关键信息:如果我使用ES 2015但没有ES 2015模块会怎样?因为我正在使用io.js和新的模块系统尚不能使用(除非我使用Babel),所以我确实使用ES 2015功能,但要等到我真正可以本地使用新的模块语法。在这种情况下是否隐含了严格模式?如果没有,他们应该真正说“ES 2015模块”。这仅与node.js/io.js相关,因为在浏览器中很明显,但是node.js已经有了模块.... - Mörre
4
“模块代码”是什么?文件中是否只要使用了export,还是还需要使用import - greim
4
是的,exportimport声明都会使JavaScript代码文件成为一个模块,在其他地方使用这些声明会导致语法错误。但是,JavaScript代码文件被解释为脚本还是模块取决于你的转译器/引擎,你无法通过查看代码来确定它的解释方式。 - Bergi
我明白了。所以,如果在您的代码中使用import关键字是有效的——即使您实际上没有使用它——那么整个代码片段都会被强制进入严格模式。而它是否有效取决于如何加载它和/或谁加载它。 - greim
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接