一尘不染

JavaScript 中的“use strict”有什么作用

javascript

最近,我通过 Crockford 的JSLint运行了我的一些 JavaScript 代码,它给出了以下错误:

第 1 行字符 1 的问题:缺少“use strict”语句。

做了一些搜索,我意识到有些人添加"use strict";到他们的 JavaScript 代码中。添加语句后,错误不再出现。不幸的是,谷歌没有透露这个字符串语句背后的大部分历史。当然,它肯定与浏览器如何解释 JavaScript 有关系,但我不知道会产生什么效果。

那么到底是"use strict";什么,它意味着什么,它仍然相关吗?

是否有任何当前浏览器响应该"use strict";字符串或供将来使用?


阅读 179

收藏
2021-12-31

共2个答案

一尘不染

ES6 模块的更新

原生 ECMAScript 模块(带有importexport语句)和ES6 类中,严格模式始终处于启用状态且无法禁用。

原答案

这篇关于 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 中使用的(因此得名?):它通过检测更多可能导致损坏的东西来帮助您减少错误。

2021-12-31
一尘不染

它只是您放入 JavaScript 文件(位于文件顶部或函数内部)的字符串,如下所示:

"use strict";

现在将它放入您的代码中不会对当前浏览器造成任何问题,因为它只是一个字符串。如果您的代码违反了编译指示,将来可能会导致您的代码出现问题。例如,如果您目前foo = "bar"没有foo先定义,您的代码将开始失败……在我看来这是一件好事。

2021-12-31