最近,我通过 Crockford 的JSLint运行了我的一些 JavaScript 代码,它给出了以下错误:
第 1 行字符 1 的问题:缺少“use strict”语句。
做了一些搜索,我意识到有些人添加"use strict";到他们的 JavaScript 代码中。添加语句后,错误不再出现。不幸的是,谷歌没有透露这个字符串语句背后的大部分历史。当然,它肯定与浏览器如何解释 JavaScript 有关系,但我不知道会产生什么效果。
"use strict";
那么到底是"use strict";什么,它意味着什么,它仍然相关吗?
是否有任何当前浏览器响应该"use strict";字符串或供将来使用?
在原生 ECMAScript 模块(带有import和export语句)和ES6 类中,严格模式始终处于启用状态且无法禁用。
import
export
这篇关于 Javascript 严格模式的文章可能会让您感兴趣:John Resig - ECMAScript 5 严格模式、JSON 等
引用一些有趣的部分:
严格模式是 ECMAScript 5 中的一项新功能,它允许您将程序或函数置于“严格”操作上下文中。这种严格的上下文会阻止执行某些操作并引发更多异常。
和:
严格模式有以下几个方面的帮助: 它捕获一些常见的编码错误,抛出异常。 当采取相对“不安全”的操作(例如获得对全局对象的访问权)时,它会阻止或抛出错误。 它禁用令人困惑或考虑不周的功能。
严格模式有以下几个方面的帮助:
另请注意,您可以将“严格模式”应用于整个文件......或者您可以仅将其用于特定功能(仍然引用 John Resig 的文章):
// Non-strict code... (function(){ "use strict"; // Define your library strictly... })(); // Non-strict code...
如果您必须混合旧代码和新代码,这可能会有所帮助;-)
所以,我想它有点像"use strict"您可以在 Perl 中使用的(因此得名?):它通过检测更多可能导致损坏的东西来帮助您减少错误。
"use strict"
它只是您放入 JavaScript 文件(位于文件顶部或函数内部)的字符串,如下所示:
现在将它放入您的代码中不会对当前浏览器造成任何问题,因为它只是一个字符串。如果您的代码违反了编译指示,将来可能会导致您的代码出现问题。例如,如果您目前foo = "bar"没有foo先定义,您的代码将开始失败……在我看来这是一件好事。
foo = "bar"
foo