长久以来,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
会产生一些不一样的影响,你会得到错误的结果。
你可以试试按下 Shift+Enter 去输入多行代码,然后将 use strict
置顶,就像这样:
'use strict'; <Shift+Enter 换行>
// ...你的代码
<按下 Enter 以运行>
它在大部分浏览器中都有效,像 Firefox 和 Chrome。
如果依然不行,那确保 use strict
被开启的最可靠的方法是,像这样将代码输入到控制台:
(function() {
'use strict';
// ...你的代码...
})()
总是使用 “use strict”
我们还没说到使用 "use strict"
与“默认”模式的区别。
在接下来的章节中,当我们学习语言功能时,我们会标注严格模式与默认模式的差异。幸运的是,差异其实没有那么多。并且这些差异可以让我们更好地编程。
当前,一般来说了解这些就够了:
"use strict"
指令将浏览器引擎转换为“现代”模式,改变一些内建特性的行为。我们会在之后的学习中了解这些细节。- 严格模式通过将
"use strict"
放置在整个脚本或函数的顶部来启用。一些新语言特性诸如 “classes” 和 “modules” 也会自动开启严格模式。 - 所有的现代浏览器都支持严格模式。
- 我们建议始终使用
"use strict"
启动脚本。本教程的所有例子都默认采用严格模式,除非特别指定(非常少)。