最近,我通过克罗福德 查了一些JavaScript代码JSLint JSLint,并给出了以下错误:

第1行第1字符1:缺少“严格使用”声明的问题。

在做一些搜索时,我意识到有些人加了"use strict";输入 JavaScript 代码。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并未披露此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读 JavaScript 有关, 但我不知道效果会是什么 。

那么,什么是"use strict";关于它的意义是什么,它是否仍然相关?

当前浏览器中的任意浏览器响应"use strict";字符串, 还是用于未来用途 ?


当前回答

我强烈建议每个开发商现在就开始使用严格模式。 有足够的浏览器支持严格模式,严格模式将合法帮助我们避免我们甚至不知道的代码中的错误。

显然,在最初的阶段,我们从未遇到过错误。 为了获得全部好处,我们需要在转换到严格模式后进行适当的测试,以确保我们抓住了一切。 当然,我们不只是抛掷而已。use strict在我们的代码中,假设没有错误。 因此,语句是,是时候开始使用这个非常有用的语言功能来写更好的代码了。

例如,

var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};

JSLint JSLint由 Douglas Crockford 撰写的调试器。 只需在您的脚本中粘贴,它就能快速扫描代码中任何明显的问题和错误。

其他回答

我的两分钱:

严格模式的目标之一是允许更快地调试问题。 它有助于开发者, 当某些错误的事情发生时, 可能导致您网页的沉默和奇怪行为时, 将例外丢弃给开发者 。 我们使用的时间 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'
};

几乎没有更多的人,但我需要获得更多这方面的知识。

包括use strict在您所有敏感 JavaScript 文件的起始处, 从此点起, 是一个小小方法, 可以成为一个更好的 JavaScript 程序员, 避免随机变数变成全球变数, 并且静静地变化 。

"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 的松散特性或坏特性的保险 。 它是一种指南, 就像标尺会帮助您做直线。 “ 严格使用” 有助于您做“ 交易编码 ” 。

那些不愿使用统治者直线行事的人 通常最终会出现在那些网页上 要求其他人调试他们的代码

相信我 与设计不当的代码相比 间接费用微不足道多年来一直担任高级JavaScript开发商的Doug Crockford,个人来说,我一直想回到他的网站 以确保我不会忘记我的好做法

现代 JavaScript 实践应该总是引用“严格使用”;ECMA集团之所以将“Scrit”模式作为任择模式的唯一原因允许经验较少的编码员进入JavaScript, 并给予时间适应新的和安全的编码做法。

如果您使用在过去一年左右释放的浏览器, 那么它很可能支持 JavaScript 严格模式。 只有 ECMAScript 5 之前的旧浏览器才成为当前标准, 不支持它 。

命令周围的引号确保代码在旧浏览器中仍然有效(尽管那些在严格模式下产生语法错误的东西通常只会导致脚本在旧浏览器中发生一些难以探测的故障 ) 。