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

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

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

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

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


当前回答

可比较的小例子 :

无限制模式 :

for (i of [1,2,3]) console.log(i)
    
// output:
// 1
// 2
// 3

严格模式 :

'use strict';
for (i of [1,2,3]) console.log(i)

// output:
// Uncaught ReferenceError: i is not defined

无限制模式 :

String.prototype.test = function () {
  console.log(typeof this === 'string');
};

'a'.test();

// output
// false

String.prototype.test = function () {
  'use strict';
  
  console.log(typeof this === 'string');
};

'a'.test();

// output
// true

其他回答

严格模式允许在 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+ 很重要 。

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

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

严格使用用于显示常见和重复错误, 以便以不同的方式处理, 并改变 Java 脚本的运行方式,

  • 预防意外全球事故

  • 无重复

  • 消除用

  • 消除这种胁迫

  • 更安全电子( )

  • 不可更改的错误

您也可以阅读此文件第1条详细信息

这是ECMAScript 5. 约翰·瑞西格写的新特写精美的摘要来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来,来

您在 JavaScript 文件( 文件顶部或函数内部) 中插入的字符串, 看起来像 :

"use strict";

在您的代码中输入它不会对当前浏览器造成任何问题, 因为它只是一条字符串。 如果您的代码违反 pragma , 它可能会在未来对您的代码造成问题 。 例如, 如果您有foo = "bar"未定义foo首先,你的代码将开始失败... 这在我看来是件好事

严格模式对普通 JavaScript 语义进行若干修改 :

  • 将一些 JavaScript 沉默错误修改为丢弃错误,从而消除这些错误 。

  • 修正错误, 使 JavaScript 引擎难以执行优化 。

  • ECMAScript禁止今后版本的ECMAScript可能界定的某种语法。

用于获取更多信息严格模式 Javascript

W3学校的引文:

“严格使用”指令

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

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

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

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

为什么是严格模式?

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

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

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

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

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

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