最近,我通过克罗福德 查了一些JavaScript代码JSLint JSLint,并给出了以下错误:
第1行第1字符1:缺少“严格使用”声明的问题。
在做一些搜索时,我意识到有些人加了"use strict";
输入 JavaScript 代码。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并未披露此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读 JavaScript 有关, 但我不知道效果会是什么 。
那么,什么是"use strict";
关于它的意义是什么,它是否仍然相关?
当前浏览器中的任意浏览器响应"use strict";
字符串, 还是用于未来用途 ?
“ 严格使用 ” ; 是程序员不会使用 JavaScript 的松散特性或坏特性的保险 。 它是一种指南, 就像标尺会帮助您做直线。 “ 严格使用” 有助于您做“ 交易编码 ” 。
那些不愿使用统治者直线行事的人 通常最终会出现在那些网页上 要求其他人调试他们的代码
相信我 与设计不当的代码相比 间接费用微不足道多年来一直担任高级JavaScript开发商的Doug Crockford,个人来说,我一直想回到他的网站 以确保我不会忘记我的好做法
现代 JavaScript 实践应该总是引用“严格使用”;ECMA集团之所以将“Scrit”模式作为任择模式的唯一原因允许经验较少的编码员进入JavaScript, 并给予时间适应新的和安全的编码做法。
如果人们担心使用use strict
也许值得看看这篇文章:
在浏览器中支持 ECMAScript 5 “ 立体模式” 。 这是什么意思 ?
NovoGeeek.com - 克里希纳的博客
讨论浏览器支持, 但更重要的是如何安全处理:
function isStrictMode(){
return !this;
}
/*
returns false, since 'this' refers to global object and
'!this' becomes false
*/
function isStrictMode(){
"use strict";
return !this;
}
/*
returns true, since in strict mode the keyword 'this'
does not refer to global object, unlike traditional JS.
So here, 'this' is 'undefined' and '!this' becomes true.
*/
我的两分钱:
严格模式的目标之一是允许更快地调试问题。 它有助于开发者, 当某些错误的事情发生时, 可能导致您网页的沉默和奇怪行为时, 将例外丢弃给开发者 。 我们使用的时间 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'
};
几乎没有更多的人,但我需要获得更多这方面的知识。