最近,我通过克罗福德 查了一些JavaScript代码JSLint JSLint,并给出了以下错误:
第1行第1字符1:缺少“严格使用”声明的问题。
在做一些搜索时,我意识到有些人加了"use strict";
输入 JavaScript 代码。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并未披露此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读 JavaScript 有关, 但我不知道效果会是什么 。
那么,什么是"use strict";
关于它的意义是什么,它是否仍然相关?
当前浏览器中的任意浏览器响应"use strict";
字符串, 还是用于未来用途 ?
更新ES6模块的更新
内ECMAScript 本地 ECMAScript 模块(与import
和export
和 报表)和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 中使用(因此命名? )它可以帮助您减少错误, 通过检测更多可能导致破碎的东西。
严格模式为现在由所有主要浏览器支持.
我强烈建议每个开发商现在就开始使用严格模式。 有足够的浏览器支持严格模式,严格模式将合法帮助我们避免我们甚至不知道的代码中的错误。
显然,在最初的阶段,我们从未遇到过错误。 为了获得全部好处,我们需要在转换到严格模式后进行适当的测试,以确保我们抓住了一切。 当然,我们不只是抛掷而已。use strict
在我们的代码中,假设没有错误。 因此,语句是,是时候开始使用这个非常有用的语言功能来写更好的代码了。
例如,
var person = {
name : 'xyz',
position : 'abc',
fullname : function () { "use strict"; return this.name; }
};
JSLint JSLint由 Douglas Crockford 撰写的调试器。 只需在您的脚本中粘贴,它就能快速扫描代码中任何明显的问题和错误。
"use strict"
使 JavaScript 代码运行到严格限制模式使用严格模式的主要原因是避免意外地在全球使用未定义的方法。
严格地说,事情跑得更快, 一些警告或无声警告 扔出致命错误, 最好总是用它来做一个更干净的代码。
"use strict"
EECMA5广泛需要广泛使用。在 ECMA6 中它默认为 JavaScript 的一部分,所以如果你使用ES6, 不需要添加。
看看这些声明和MDN的例子:
“严格使用”指令
JavaScript 1. 8.5 (ECMAScript 版本 5) 的“ 严格使用” 指令是新的 JavaScript 1. 8.5 (ECMAScript 版本 5) 。 它不是一个声明,而是一个字面表达, 先前版本的 JavaScript 忽略了它。 “ 严格使用” 的目的是表示代码应在“ 严格模式” 中执行。 例如, 严格模式下, 您不能使用未声明的变量 。
使用“ 严格使用” 的例子 :
功能的严格模式 : 同样, 要对函数使用严格的方式, 请在函数的正文中将确切的语句“ 使用严格 ” ; (或“ 使用严格 ” ) 置于任何其他语句之前 。
(1) (1) 功能的严格模式
function strict() {
// Function-level strict mode syntax
'use strict';
function nested() { return 'And so am I!'; }
return "Hi! I'm a strict mode function! " + nested();
}
function notStrict() { return "I'm not strict."; }
console.log(strict(), notStrict());
2) 完全上标的严格模式
'use strict';
var v = "Hi! I'm a strict mode script!";
console.log(v);
(3) (3) 转让给不可撤销的全球转让
'use strict';
// Assignment to a non-writable global
var undefined = 5; // throws a TypeError
var Infinity = 5; // throws a TypeError
// Assignment to a non-writable property
var obj1 = {};
Object.defineProperty(obj1, 'x', { value: 42, writable: false });
obj1.x = 9; // throws a TypeError
// Assignment to a getter-only property
var obj2 = { get x() { return 17; } };
obj2.x = 5; // throws a TypeError
// Assignment to a new property on a non-extensible object.
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = 'ohai'; // throws a TypeError
你可以MDN 上更多读取.
“ 严格使用 ” ; 定义 JavaScript 代码应以“ 限制模式” 执行 。
- ECMAScript 5版的新指令是“严格使用”指令。
- 它不是一种声明,而是一种字面表达,被以前版本的JavaScript所忽视。
- “严格使用”的目的是表示代码应以“严格模式”执行。
- 在严格模式下,您不能使用未声明的变量。
所有现代浏览器支持“ 严格使用 ” , 除非因特网探索者 9 及以下.
缺点
如果开发商使用一个严格模式的图书馆, 但开发商通常使用正常模式,
更糟糕的是,由于开发商处于正常模式,他们没有被抛出额外错误的好处,因此错误可能会无声无息地失败。
此外,如上所列,严格模式阻止你做某些事情。
但有些开发商不喜欢这种限制, 并想使用语言的所有特征。
JavaScript由于浏览器战争和管理不善而匆忙设计和实施,导致许多设计决定不善,不直观的语法和混乱的语义被混为一谈。 严格模式旨在修正其中的一些错误。
但是,在不创造替代解释的情况下纠正这些错误会打破后向兼容性。所以,"use strict"
指令规定对代码的替代解释,同时将其告知程序员。
例如,this
关键字在方法定义中指向对象,例如this
或self
以其他语文提供。
let o = {
name: 'John Doe',
sayName: function(){
console.log(this.name);
}
};
o.sayName(); // 'John Doe'
this
方法上下文外没有目的,但所有 JavaScript 函数都具有this
关键字是否为方法 :
function run() {
console.log(this);
}
run(); // Window
给this
确定全球对象,因为全球对象在范围中已经存在,所以它毫无意义,没有意义。
严格方式this
在一个全球职能中,我们决心作出不确定的决定,这正是我们所期望的。
"use strict"
function run() {
console.log(this);
}
run(); // undefined
有些错误即使严格的方式也无法固定,因为语法对旧浏览器应该有效,因为它们忽略了"strict mode"
这是按设计设计的指令。