最近,我通过 Crockford 的JSLint运行了一些我的 JavaScript 代码,它给出了以下错误:
第 1 行问题 1:缺少 “使用严格” 声明。
做一些搜索,我意识到有些人加上"use strict";
进入他们的 JavaScript 代码。一旦我添加了语句,错误就会停止显示。不幸的是,谷歌没有透露这个字符串声明背后的历史。当然它必须与浏览器如何解释 JavaScript 有关,但我不知道效果会是什么。
那么什么是"use strict";
一切,它意味着什么,它仍然相关吗?
当前任何浏览器都会响应"use strict";
字符串或将来使用?
这篇关于 Javascript Strict Mode 的文章可能会让您感兴趣: John Resig - ECMAScript 5 Strict Mode,JSON 等
引用一些有趣的部分:
严格模式是 ECMAScript 5 中的一项新功能,允许您在 “严格” 操作上下文中放置程序或函数。这种严格的上下文阻止了某些操作被采取并引发更多异常。
和:
严格模式有两种方式:
- 它捕获了一些常见的编码 bloopers,抛出异常。
- 当采取相对 “不安全” 的操作(例如获取对全局对象的访问权限)时,它会阻止或抛出错误。
- 它会禁用令人困惑或经过深思熟虑的功能。
另请注意,您可以对整个文件应用 “严格模式”... 或者您只能将其用于特定功能(仍然引用 John Resig 的文章) :
// Non-strict code... (function(){ "use strict"; // Define your library strictly... })(); // Non-strict code...
如果你必须混合旧代码和新代码,这可能会有所帮助;-)
所以,我认为它有点像你可以在 Perl 中"use strict"
的"use strict"
(因此名称?) :通过检测更多可能导致破坏的事情,它可以帮助您减少错误。
这是 ECMAScript 5 的一个新功能. John Resig 写了一个很好的摘要 。
它只是一个放在 JavaScript 文件中的字符串(位于文件顶部或函数内部),如下所示:
"use strict";
现在将它放在你的代码中不应该导致当前浏览器出现任何问题,因为它只是一个字符串。如果您的代码违反了编译指示,将来可能会导致您的代码出现问题。例如,如果您当前有foo = "bar"
而没有先定义foo
,那么您的代码将开始失败...... 在我看来这是一件好事。
声明"use strict";
指示浏览器使用严格模式,这是一种简化且更安全的 JavaScript 功能集。
不允许全局变量。 (在变量名中捕获缺少的var
声明和拼写错误)
无提示失败的分配将在严格模式下抛出错误(指定NaN = 5;
)
尝试删除不可删除的属性将抛出( delete Object.prototype
)
要求对象文字中的所有属性名称都是唯一的( var x = {x1: "1", x1: "2"}
)
函数参数名称必须唯一( function sum (x, x) {...}
)
禁止八进制语法( var x = 023;
一些开发人员错误地认为前面的零不会改变数字。)
禁止使用with
关键字
严格模式下的eval
不会引入新变量
禁止删除普通名称( delete x;
)
禁止以任何形式绑定或赋值名称eval
和arguments
严格模式不会使用形式参数别名arguments
对象的属性。 (即function sum (a,b) { return arguments[0] + b;}
这是有效的,因为arguments[0]
绑定到a
等等。)
arguments.callee
不受支持
[参考: 严格模式 , Mozilla 开发者网络 ]