最近,我通过Crockford的jslint 输入了一些我的笔记本代码, 它犯了以下错误:
第1行字符1:缺少“严格使用”的语句。
某些搜索, 我意识到有些人在他们的 javascript 代码中添加了“ 严格使用 ” ; 。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并没有揭示此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读该语句有关, 但我不知道效果会是什么 。
那么,什么是“严格使用”;什么是“严格使用”;一切,它意味着什么,它是否仍然相关?
当前的任何浏览器是否响应“ 严格使用 ” ; 字符串, 或是否未来使用 ?
“严格使用”使javascript代码以严格的方式运行,这基本上意味着在使用前必须界定一切。 使用严格模式的主要原因是避免意外地在全球使用未定义的方法。
严格的方式,事情跑得更快, 一些警告或无声警告 扔出致命错误, 最好总是用它来做一个更干净的代码。
在ecma5中,广泛需要使用“严格使用”一词,在ecma6中,它默认是javascript的一部分,因此,如果使用es6,则不需要添加“严格使用”一词。
看看这些声明和Mdn的例子:
“ 使用严格” 指令在 javascript 1. 8. 5 (缩写文本 5 ) 中是新的“ 使用严格” 指令, 在 javascript 1. 8. 5 ( 缩写文本 5 ) 中, “ 使用严格” 指令不是一种声明, 而是一种字面表达, 先前版本的 javascript 忽略了它。 “ 使用严格” 的目的是表示代码应该在“ 严格模式” 中执行。 您不能使用未声明的变量。 例如, 使用“ 使用严格” 的例子: 功能的严格模式 : 同样, 要对函数使用严格模式, 请填写准确的 sta 。
(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 上阅读更多信息。
如果人们担心使用严格使用,
浏览器中的 5 个“ 限制模式” 支持 。 这是什么意思 ? novogeek. com - krishna 的 Webb 。
讨论浏览器支持, 但更重要的是如何安全处理:
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.
*/
我两分钱
严格模式的目标之一是允许更快地调试问题。 它会帮助开发者, 当某些错误的事情发生, 可能导致您网页的沉默和奇怪行为时, 它会提出例外, 从而帮助开发者。 当我们使用严格模式时, 代码会丢弃错误, 帮助开发者提前修正它 。
在严格使用后我学到的几件重要东西:
防止全球变量声明:
“ 严格” ; var tree1data = { name: 'banana tree', age: 100,leafcount: 100,leafcount: 100,000}; 函数树( 树类型) { var age; var lifcount; 年龄 = tree. age; 叶数 = kree.leafcount; 树名称 = tree. name; }; var tree1 = 新树( riet1data); 控制台. log( windowowow);
现在, 这个代码创建了全球范围的树名, 可以使用 window. nameoftree 访问 。 当我们严格使用这个代码时, 代码会丢弃错误 。
未标记的引用引用器: 未定义树名 。
以下列语句删除:
无法使用像丑化js这样的工具对语句进行简单化。 它们也会被折旧, 从未来的 Javarint 版本中删除 。
样本 :
“ 严格” ; var tree1data = { name: 'banana tree', 年龄: 100, 叶数: 100 000} ; 函数树( 树类型) { var 年龄; var 叶数; 年龄= 树类型. age; 叶数= 树类型.leafcount; // 树名称= 树类型. name; 对于 (var i = 0; i & lt; 2) { / let( leafcount = i) { { / * do something */} { (val i = 0; i & lt; 2; +u) { 和 (leafcount = i) { { {/ * do something} {; var tree1 = 新的树 (tree1data); { likefor.log( windo) 。
防止重复:
当我们有重复财产时,它是一种例外,
unacaute 语法解析器: 在严格模式下不允许以对象文字复制数据属性
“严格使用”; var 树1data = { 名称: “香蕉树 ” , 年龄: 100, 叶数: 100 000, 名称: “香蕉树 ” ;
很少有更多的人,但我需要获得更多这方面的知识。