最近,我通过克罗福德 查了一些JavaScript代码JSLint JSLint,并给出了以下错误:
第1行第1字符1:缺少“严格使用”声明的问题。
在做一些搜索时,我意识到有些人加了"use strict";
输入 JavaScript 代码。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并未披露此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读 JavaScript 有关, 但我不知道效果会是什么 。
那么,什么是"use strict";
关于它的意义是什么,它是否仍然相关?
当前浏览器中的任意浏览器响应"use strict";
字符串, 还是用于未来用途 ?
“ 严格使用 ” ; 定义 JavaScript 代码应以“ 限制模式” 执行 。
- ECMAScript 5版的新指令是“严格使用”指令。
- 它不是一种声明,而是一种字面表达,被以前版本的JavaScript所忽视。
- “严格使用”的目的是表示代码应以“严格模式”执行。
- 在严格模式下,您不能使用未声明的变量。
所有现代浏览器支持“ 严格使用 ” , 除非因特网探索者 9 及以下.
缺点
如果开发商使用一个严格模式的图书馆, 但开发商通常使用正常模式,
更糟糕的是,由于开发商处于正常模式,他们没有被抛出额外错误的好处,因此错误可能会无声无息地失败。
此外,如上所列,严格模式阻止你做某些事情。
但有些开发商不喜欢这种限制, 并想使用语言的所有特征。
ECMAScript 5采用了JavaScript“严格”模式。
(function() {
"use strict";
your code...
})();
书写"use strict";
在您的 JS 文件的顶端, 打开严格的语法检查 。 它为我们执行以下任务 :
如果您试图指定给一个未声明的变量,则显示错误。
停止您覆盖关键 JS 系统库
禁止某些不安全或容易出错的语言特征
use strict
也属于个别职能内的工作。use strict
在你的代码。
浏览器兼容性问题 : “ 使用” 指令意在向后兼容。 不支持这些指令的浏览器将只看到一个字符串字典, 但没有进一步引用。 因此, 他们将会通过它继续前进 。
我的两分钱:
严格模式的目标之一是允许更快地调试问题。 它有助于开发者, 当某些错误的事情发生时, 可能导致您网页的沉默和奇怪行为时, 将例外丢弃给开发者 。 我们使用的时间 use strict
,代码将排除错误,帮助开发者提前修正错误。
使用后我学到的几件重要东西 use strict
:
防止全球变量宣言:
"use strict";
var tree1Data = { name: 'Banana Tree',age: 100,leafCount: 100000};
function Tree(typeOfTree) {
var age;
var leafCount;
age = typeOfTree.age;
leafCount = typeOfTree.leafCount;
nameoftree = typeOfTree.name;
};
var tree1 = new Tree(tree1Data);
console.log(window);
现在,这个代码创造了nameoftree
全球范围,可使用window.nameoftree
.当我们执行use strict
代码会丢出错误 。
未标记引用错误: 未定义树名
消除 " 消除 "with
语句:
with
无法使用工具例如微克- js。它们也是折旧从未来的 JavaScript 版本中删除 。
样本 :
"use strict";
var tree1Data = {
name: 'Banana Tree',
age: 100,
leafCount: 100000
};
function Tree(typeOfTree) {
var age;
var leafCount;
age = typeOfTree.age;
leafCount = typeOfTree.leafCount;
// nameoftree = typeOfTree.name;
for (var i = 0; i < 2; ++i) {
// let(leafCount = i) { /*do something*/ }
}
for (var i = 0; i < 2; ++i) {
with(leafCount = i) { /*do something*/ }
}
};
var tree1 = new Tree(tree1Data);
console.log(window);
防止重复:
当我们有重复财产时,它会提出一个例外
未标记的语法错误: 严格方式不允许以对象文字复制数据属性
"use strict";
var tree1Data = {
name: 'Banana Tree',
age: 100,
leafCount: 100000,
name:'Banana Tree'
};
几乎没有更多的人,但我需要获得更多这方面的知识。