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

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

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

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

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


当前回答

在ECMAScript委员会里 有一些人说得很好:对 JavaScript, 第一部分 1: ECMAScript 5 的修改”关于逐步增加使用《公约》和《京都议定书》"use strict"允许 JavaScript 执行者清理 JavaScript 的许多危险特性,

当然,它也谈到很多这些错误的特征是什么,以及ECMAScript 5是如何修补这些错误的。

其他回答

“ 严格使用 ” ; 是程序员不会使用 JavaScript 的松散特性或坏特性的保险 。 它是一种指南, 就像标尺会帮助您做直线。 “ 严格使用” 有助于您做“ 交易编码 ” 。

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

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

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

W3学校的引文:

“严格使用”指令

“严格使用”指令在JavaScript 1.8.5(ECMAScript 5版)中是新的指令。

它不是一种声明,而是一种字面表达,被以前版本的JavaScript所忽视。

“严格使用”的目的是表示代码应以“严格模式”执行。

在严格模式下,您不能使用未声明的变量。

为什么是严格模式?

严格模式使得写“security” JavaScript 更容易。

严格模式更改先前接受的“ 坏语法” 变为实际错误 。

例如,在普通 JavaScript 中,对变量名称进行错误描述会创建一个新的全局变量。在严格模式下,这将抛出一个错误,使意外创建全局变量成为不可能。

在普通 JavaScript 中,开发者不会收到任何错误反馈, 将值指定为不可写属性 。

严格地说,对非书面财产、唯有获得者财产、不存在的财产、不存在的变数或不存在的物体的任何转让,都会造成错误。

请参见http://www.w3schools.com/js/js_strict.asp了解更多

use strict这是一种让您的代码更安全的方法, 因为您不能使用危险特性, 这些特性不能像你预期的那样工作。 而且,正如以前所写的那样, 它使代码更加严格。

严格模式允许在 v8 引擎中设置严格的特性。 某些特性的短示例 :

您可通过写作方式在全球范围启用它 :

'use strict'; // strict mode enabled!

您只是在函数中包含的每个函数 :

let myfunc = () => {
  'use strict'; // strict mode enabled
  
   b = 0; // broke
}
  • 在使用该变量( sane imo) 之前, 您必须声明变量 :
  var x;
  x = '0'; // ok
  y = '';  // not ok
  • 已经启用 es6 功能( 取决于浏览器) , 因为节点 v4+ 很重要 。

  • 在某些情况下,业绩更好。

还有更多的特征,检查在这里更多! 更多! 更多! 更多! 更多!

我的两分钱:

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

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