现代模式,"use strict"

长久以来,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 产生影响的时候,你会得到错误的结果。

你可以试试按下 Shift+Enter 去输入多行代码,然后将 use strict 置顶,就像这样:

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

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

如果依然不行,那确保 use strict (有效)的最可靠方法是像这样将代码输入到控制台:

(function() {
  'use strict';

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

总是使用 “use strict”

我们还没说到使用 "use strict" 与“默认”模式的区别。

在接下来的章节中,当我们学习语言功能时,我们会标注严格模式与默认模式的差异。幸运的是,没有那么多。实际上,它们为我们编写代码提供了极大的便利。

当前,一般来说了解这些就够了:

  1. "use strict" 指令将浏览器引擎转换为“现代”模式,改变一些内建特性的行为。我们会在之后的学习中了解这些细节。
  2. 严格模式通过将 "use strict" 放置在整个脚本或函数的顶部来启用。一些新语言特性诸如 “classes” 和 “modules” 也会自动开启严格模式。
  3. 所有的现代浏览器都支持严格模式。
  4. 建议始终使用 "use strict" 启动脚本。本教程的所有例子都默认采用严格模式,除非特别指定(非常少)。
教程路线图

评论

在评论之前先阅读本内容…
  • 欢迎你在文章下添加补充内容、提出你的问题或回答提出的问题。
  • 使用 <code> 标签插入几行代码,对于多行代码 — 可以使用 <pre>,对于超过十行的代码 — 建议使用沙箱(plnkrJSBincodepen 等)。
  • 如果你无法理解文章中的内容 — 请详细说明。