2020 年 5 月 19 日

现代模式,“use strict”

很长一段时间里,JavaScript 在没有兼容性问题的情况下不断发展。新特性被添加到语言中,而旧功能没有改变。

这样做的好处是永远不会破坏现有代码。但缺点是 JavaScript 创建者所犯的任何错误或不完善的决策都会永远停留在语言中。

这种情况一直持续到 2009 年 ECMAScript 5 (ES5) 出现。它为该语言添加了新功能,并修改了一些现有功能。为了让旧代码继续工作,大多数此类修改在默认情况下都是关闭的。你需要使用特殊指令显式启用它们:"use strict"

“use strict”

该指令看起来像一个字符串:"use strict"'use strict'。当它位于脚本顶部时,整个脚本将以“现代”方式工作。

例如

"use strict";

// this code works the modern way
...

很快,我们将学习函数(一种对命令进行分组的方法),因此让我们提前注意,"use strict" 可以放在函数的开头。这样做仅在该函数中启用严格模式。但通常人们将其用于整个脚本。

确保 “use strict” 位于顶部

请确保 "use strict" 位于脚本顶部,否则可能无法启用严格模式。

此处未启用严格模式

alert("some code");
// "use strict" below is ignored--it must be at the top

"use strict";

// strict mode is not activated

只有注释可以出现在 "use strict" 上方。

无法取消 use strict

没有像 "no use strict" 这样的指令,它可以将引擎还原为旧行为。

一旦我们进入严格模式,就无法返回。

浏览器控制台

当你使用 开发者控制台 运行代码时,请注意它默认情况下不使用 use strict

有时,当 use strict 有所不同时,你会得到不正确的结果。

那么,如何在控制台中实际 use strict 呢?

首先,你可以尝试按 Shift+Enter 输入多行,并将 use strict 放在顶部,如下所示

'use strict'; <Shift+Enter for a newline>
//  ...your code
<Enter to run>

它适用于大多数浏览器,即 Firefox 和 Chrome。

如果不行,例如在旧浏览器中,有一种丑陋但可靠的方法来确保 use strict。将其放在这种包装器中

(function() {
  'use strict';

  // ...your code here...
})()

我们应该“use strict”吗?

这个问题听起来很明显,但事实并非如此。

有人建议用 "use strict" 启动脚本......但你知道什么很酷吗?

现代 JavaScript 支持“类”和“模块”——高级语言结构(我们一定会接触到它们),它们自动启用 use strict。因此,如果我们使用它们,就不需要添加 "use strict" 指令。

因此,目前 "use strict"; 是脚本顶部的一个受欢迎的访客。稍后,当你的代码全部在类和模块中时,你可以省略它。

现在,我们必须了解 use strict 的一般情况。

在接下来的章节中,当我们学习语言特性时,我们将看到严格模式和旧模式之间的差异。幸运的是,差异并不多,而且它们实际上让我们的生活更美好。

本教程中的所有示例均假定为严格模式,除非(极少情况下)另有说明。

教程地图

评论

在评论之前阅读此内容…
  • 如果你有改进建议,请 提交 GitHub 问题或拉取请求,而不是发表评论。
  • 如果你无法理解文章中的内容,请详细说明。
  • 要插入几行代码,请使用 <code> 标记,对于多行,请将其包装在 <pre> 标记中,对于 10 行以上,请使用沙箱 (plnkrjsbincodepen…)