“使用严格”在JavaScript中做了什么,它背后的原因是什么?

2022-08-29 21:43:35

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

第 1 行字符 1 处的问题:缺少“使用严格”语句。

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

那么,这到底是怎么回事,它意味着什么,它是否仍然相关呢?"use strict";

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


答案 1

ES6 模块的更新

本机 ECMAScript 模块(带有导入导出语句)和 ES6 类中,严格模式始终处于启用状态,并且无法禁用。

原始答案

这篇关于 Javascript Strict Mode 的文章可能会引起您的兴趣:John Resig - ECMAScript 5 Strict Mode, JSON, and more

引用一些有趣的部分:

严格模式是 ECMAScript 5 中的一项新功能,它允许您将程序或函数置于“严格”操作上下文中。这种严格的上下文会阻止执行某些操作并引发更多异常。

和:

严格模式在以下几个方面有所帮助:

  • 它捕获了一些常见的编码膨胀,并引发异常。
  • 当执行相对“不安全”的操作(例如获取对全局对象的访问权限)时,它可以防止或引发错误。
  • 它禁用了令人困惑或考虑不周的功能。

另请注意,您可以将“严格模式”应用于整个文件...或者你可以只将其用于特定的功能(仍然引用John Resig的文章)

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code...

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

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

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


答案 2

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

它只是一个你放在JavaScript文件中的字符串(在文件的顶部或函数内部),看起来像这样:

"use strict";

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