很长一段时间,JavaScript 都没有兼容性问题——新特性被添加,但不会影响旧代码运行。

这样做的好处是永远不会破坏现有的代码。不过缺点也很明显,JavaScript 的创造者们犯下的任何错误或不完美的决策都被永远留在了语言中。

直到 2009 年,ECMAScript 5(ES5)出现了。为 Javascript 添加了新特性,同时修改了一些现有的特新。为了保持旧代码能够正常工作,大多数修改默认都是关闭的。为了使用新特性行为,需要通过一个特殊的指令 "use strict" 来明确启用。

“use strict”

这个指令看起来像个字符串:"use strict"'use strict'。当他们被置于脚本顶部的时候,整个脚本都会按照“现代模式”运行。

例如:

  1. "use strict";
  2. // 代码按照现代的方式运行
  3. ...

我们很快就会学到函数,我们可以在函数开头使用 "use strict"。这样只在这个函数中里启用严格模式,但通常更习惯对整个脚本启用严格模式。

⚠️保证 **"use strict"** 在顶部使用

请确保在脚本顶部使用 "use strict",否则不会起作用。

比如,下面的写法就不会启用严格模式:

  1. alert("some code");
  2. // 下面的 "use strict" 会被忽略,必须放在顶部
  3. "use strict";
  4. // 严格模式没有激活

只有注释才能出现在 "use strict" 上面。

⚠️没有办法取消 **use strict**

没有提供 "no use strict" 或类似指令回退到旧的行为。

一旦我们启用了严格模式,就无法回退。

浏览器控制台

在浏览器控制台中执行的代码默认不是以严格模式运行的。

控制台中支持使用 Shift+Enter 快捷键多行编码,将 "use strict" 放在所有代码的上面就可以了。

  1. 'use strict'; <Shift+Enter 换到新行>
  2. // ...your code
  3. <Enter to run>

这种方式是用于大多数浏览器,比如 Firefox 和 Chrome。

如果行不通(比如在某些旧浏览器),还可以使用一种方式启用严格模式,虽然有些丑陋。

  1. (function() {
  2. 'use strict';
  3. // ...your code here...
  4. })()

应该使用严格模式吗?

答案似乎是确定的,但并不一定。

有人可能会建议在脚本开始使用“use strict”,但还有更酷的东西!

现代 JavaScript 支持“类”和“模块”—— 这些高级语言结构(后面会讲到)会自动使用严格模式,所以我们不再需要手动添加 "use strict" 指令。

通常情况下,会在脚本开头使用 "use strict",这种做法现在并不少见。以后,当你的代码是在类或模块中组织的时候,完全可以忽略它。

到目前为止,我们已经大致了解了严格模式。

在接下来的章节中,当我们学习语言特性时,将看到严格模式和旧模式之间的区别。幸运的是,没有并不多,实际上这些区别会让我们的生活变得更好。

本教程中的所有示例都采用严格模式,除非另有指定(很少)。

在接下来的章节中,当我们学习语言特性时,我们会记录严格模式的不同之处。幸运的是,没有那么多。它们实际上使我们的生活更美好。

(完)


📄 文档信息

🕘 更新时间:2021/09/17
🔗 原文链接:https://javascript.info/strict-mode