很长一段时间里,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"
位于脚本顶部,否则可能无法启用严格模式。
此处未启用严格模式
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
的一般情况。
在接下来的章节中,当我们学习语言特性时,我们将看到严格模式和旧模式之间的差异。幸运的是,差异并不多,而且它们实际上让我们的生活更美好。
本教程中的所有示例均假定为严格模式,除非(极少情况下)另有说明。
评论
<code>
标记,对于多行,请将其包装在<pre>
标记中,对于 10 行以上,请使用沙箱 (plnkr、jsbin、codepen…)