“use strict”在 JavaScript 中做了什么,背后的原因是什么?

新手上路,请多包涵

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

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

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

那么什么是 "use strict"; 所有关于,它意味着什么,它仍然相关吗?

当前浏览器是否响应 "use strict"; 字符串还是供将来使用?

原文由 Mark Rogers 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 989
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...

如果您必须混合旧代码和新代码,这可能会有所帮助;-)

所以,我想这有点像你可以在 Perl 中使用的 "use strict" (因此得名?) :它通过检测更多可能导致损坏的东西来帮助你减少错误。

现在 所有主要浏览器都支持 严格模式。

原文由 Pascal MARTIN 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是 ECMAScript 5 的一个新特性。John Resig 写了 一个很好的总结

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

 "use strict";

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

原文由 seth 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏