很长一段时间,JavaScript 都没有兼容性问题——新特性被添加,但不会影响旧代码运行。
这样做的好处是永远不会破坏现有的代码。不过缺点也很明显,JavaScript 的创造者们犯下的任何错误或不完美的决策都被永远留在了语言中。
直到 2009 年,ECMAScript 5(ES5)出现了。为 Javascript 添加了新特性,同时修改了一些现有的特新。为了保持旧代码能够正常工作,大多数修改默认都是关闭的。为了使用新特性行为,需要通过一个特殊的指令 "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"
或类似指令回退到旧的行为。
一旦我们启用了严格模式,就无法回退。
浏览器控制台
在浏览器控制台中执行的代码默认不是以严格模式运行的。
控制台中支持使用 Shift+Enter
快捷键多行编码,将 "use strict"
放在所有代码的上面就可以了。
'use strict'; <Shift+Enter 换到新行>
// ...your code
<Enter to run>
这种方式是用于大多数浏览器,比如 Firefox 和 Chrome。
如果行不通(比如在某些旧浏览器),还可以使用一种方式启用严格模式,虽然有些丑陋。
(function() {
'use strict';
// ...your code here...
})()
应该使用严格模式吗?
答案似乎是确定的,但并不一定。
有人可能会建议在脚本开始使用“use strict”,但还有更酷的东西!
现代 JavaScript 支持“类”和“模块”—— 这些高级语言结构(后面会讲到)会自动使用严格模式,所以我们不再需要手动添加 "use strict"
指令。
通常情况下,会在脚本开头使用 "use strict"
,这种做法现在并不少见。以后,当你的代码是在类或模块中组织的时候,完全可以忽略它。
到目前为止,我们已经大致了解了严格模式。
在接下来的章节中,当我们学习语言特性时,将看到严格模式和旧模式之间的区别。幸运的是,没有并不多,实际上这些区别会让我们的生活变得更好。
本教程中的所有示例都采用严格模式,除非另有指定(很少)。
在接下来的章节中,当我们学习语言特性时,我们会记录严格模式的不同之处。幸运的是,没有那么多。它们实际上使我们的生活更美好。
(完)
📄 文档信息
🕘 更新时间:2021/09/17
🔗 原文链接:https://javascript.info/strict-mode