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

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

上一篇 下一篇

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

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

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

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

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

分割线

网友回答:

这是 ECMAScript 5 的一个新功能。约翰·雷西格(John Resig)对此进行了很好的总结。

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

"use strict";

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

分割线

网友回答:

ES6 模块更新

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

原答案

这篇关于 Javascript Strict Mode 的文章可能会让你感兴趣:John Resig – ECMAScript 5 Strict Mode、JSON 等

引用一些有趣的部分:

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

和:

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

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

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

// Non-strict code...

(function(){
  "use strict";

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

// Non-strict code...

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

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

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

分割线

网友回答:

该语句指示浏览器使用严格模式,这是 JavaScript 的一个简化且更安全的功能集。"use strict";

功能列表(非详尽无遗)

  1. 不允许全局变量。(捕获变量名称中缺少的声明和拼写错误)var
  2. 静默失败的分配将在严格模式下引发错误(分配NaN = 5;)
  3. 尝试删除不可删除的属性将引发 (delete Object.prototype)
  4. 要求对象文本中的所有属性名称都是唯一的 (var x = {x1: "1", x1: "2"})
  5. 函数参数名称必须是唯一的 (function sum (x, x) {...})
  6. 禁止八进制语法(一些开发人员错误地认为前面的零不会改变数字。var x = 023;
  7. 禁止使用关键字with
  8. eval在严格模式下不引入新变量
  9. 禁止删除纯名称 (delete x;)
  10. 禁止以任何形式绑定或转让名称evalarguments
  11. 严格模式不会使用形式参数为对象的属性设置别名。(例如,在 这作品中 因为 绑定 等等。(请参阅下面的示例部分以了解差异argumentsfunction sum (a,b) { return arguments[0] + b;}arguments[0]a)
  12. arguments.callee不支持

[参考:严格模式,Mozilla 开发者网络]


例子:

  1. 严格模式代码不会为其中创建的参数对象的属性设置别名
function show( msg ){
    msg = 42;
    console.log( msg );          // msg === 42
    console.log( arguments[0] ); // arguments === 42
}
show( "Hey" );

// In strict mode arguments[i] does not track the value of 
// the corresponding named argument, nor does a named argument track the value in the corresponding arguments[i]
function showStrict( msg ){
    "use strict";
    msg = 42;
    console.log( msg );          // msg === 42
    console.log( arguments[0] ); // arguments === "Hey"
}
showStrict( "Hey" );

模板简介:该模板名称为【“use strict”在JavaScript中做了什么,背后的原因是什么?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 670次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-07
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信模板 响应式 微信图片 微信文章 单页式简历模板 微信素材 企业网站 微信公众平台 自适应 html5
您可能会喜欢的其他模板