2022年4月19日

现代模式,"use strict"

长久以来,JavaScript 不断向前发展且并未带来任何兼容性问题。新的特性被加入,旧的功能也没有改变。

这么做有利于兼容旧代码,但缺点是 JavaScript 创造者的任何错误或不完善的决定也将永远被保留在 JavaScript 语言中。

这种情况一直持续到 2009 年 ECMAScript 5 (ES5) 的出现。ES5 规范增加了新的语言特性并且修改了一些已经存在的特性。为了保证旧的功能能够使用,大部分的修改是默认不生效的。你需要一个特殊的指令 —— "use strict" 来明确地激活这些特性。

“use strict”

这个指令看上去像一个字符串 "use strict" 或者 'use strict'。当它处于脚本文件的顶部时,则整个脚本文件都将以“现代”模式进行工作。

比如:

"use strict";

// 代码以现代模式工作
...

很快我们就会学习到函数(一种组合命令的方式),所以让我们提前注意一下,"use strict" 可以被放在函数体的开头。这样则可以只在该函数中启用严格模式。但通常人们会在整个脚本中启用严格模式。

确保 “use strict” 出现在最顶部

请确保 "use strict" 出现在脚本的最顶部,否则严格模式可能无法启用。

这里的严格模式就没有被启用:

alert("some code");
// 下面的 "use strict" 会被忽略,必须在最顶部。

"use strict";

// 严格模式没有被激活

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

没有办法取消 use strict

没有类似于 "no use strict" 这样的指令可以使程序返回默认模式。

一旦进入了严格模式,就没有回头路了。

浏览器控制台

当你使用 开发者控制台 运行代码时,请注意它默认是不启动 use strict 的。

有时,当 use strict 会对代码产生一些影响时,你会得到错误的结果。

那么,怎么在控制台中启用 use strict 呢?

首先,你可以尝试搭配使用 Shift+Enter 按键去输入多行代码,然后将 use strict 放在代码最顶部,就像这样:

'use strict'; <Shift+Enter 换行>
//  ...你的代码
<按下 Enter 以运行>

它在大部分浏览器中都有效,像 Firefox 和 Chrome。

如果依然不行,例如你使用的是旧版本的浏览器,那么有一种很丑但可靠的启用 use strict 的方法。将你的代码放在这样的包装器中:

(function() {
  'use strict';

  // ...你的代码...
})()

我们应该使用 “use strict” 吗?

这个问题的答案好像很显而易见,但事实并非如此。

有人可能会建议在脚本的最顶部放置 "use strict" 这行代码…… 但你知道更酷的方式吗?

现代 JavaScript 支持 “class” 和 “module” —— 高级语言结构(本教程后续章节会讲到),它们会自动启用 use strict。因此,如果我们使用它们,则无需添加 "use strict" 指令。

因此,目前我们欢迎将 "use strict"; 写在脚本的顶部。稍后,当你的代码全都写在了 class 和 module 中时,你则可以将 "use strict"; 这行代码省略掉。

目前,我们已经基本了解了 use strict

在接下来的章节中,当我们学习语言功能时,我们会看到严格模式与旧的模式之间的差异。幸运的是,差异其实没有那么多。并且,这些差异实际上提升了我们的编程体验。

本教程的所有例子都默认采用严格模式,除非特别指定(非常少)。

教程路线图

评论

在评论之前先阅读本内容…
  • 如果你发现教程有错误,或者有其他需要修改和提升的地方 — 请 提交一个 GitHub issue 或 pull request,而不是在这评论。
  • 如果你对教程的内容有不理解的地方 — 请详细说明。
  • 使用 <code> 标签插入只有几个词的代码,插入多行代码可以使用 <pre> 标签,对于超过 10 行的代码,建议你使用沙箱(plnkrJSBincodepen…)