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

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

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

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

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


当前回答

更新ES6模块的更新

ECMAScript 本地 ECMAScript 模块(与importexport和 报表)和ES6 类,严格模式总是被启用,不能被禁用。

原始答复原文

您可能感兴趣的关于 Javascript 严格模式的这篇文章 :John Resig - ECMAScript 5 严格模式, JSON 等

引用一些有趣的部分:

严格模式是 ECMAScript 5 中的新特征, 它允许您在“ 严格” 操作背景下设置程序或函数。 这种严格环境防止某些行动被采取, 并增加了一些例外 。

并且:

严格模式在几个方面有帮助:

  • 它捕捉到一些常见的编码布丁, 抛出例外。
  • 当采取相对的“不安全”行动(例如进入全球天体)时,它会防止错误或错误。
  • 它使那些令人困惑或考虑不周的特征无法发挥作用。

另请注意, 您可以将“ 限制模式” 应用到整个文件... , 或者只能用于特定函数(仍在引用John Resig的文章):

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code...

如果你必须混合新旧代码和旧代码,

所以,我想这有点像"use strict"可在 Perl 中使用(因此命名? )它可以帮助您减少错误, 通过检测更多可能导致破碎的东西。

严格模式为现在由所有主要浏览器支持.

其他回答

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

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

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

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

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

更新ES6模块的更新

ECMAScript 本地 ECMAScript 模块(与importexport和 报表)和ES6 类,严格模式总是被启用,不能被禁用。

原始答复原文

您可能感兴趣的关于 Javascript 严格模式的这篇文章 :John Resig - ECMAScript 5 严格模式, JSON 等

引用一些有趣的部分:

严格模式是 ECMAScript 5 中的新特征, 它允许您在“ 严格” 操作背景下设置程序或函数。 这种严格环境防止某些行动被采取, 并增加了一些例外 。

并且:

严格模式在几个方面有帮助:

  • 它捕捉到一些常见的编码布丁, 抛出例外。
  • 当采取相对的“不安全”行动(例如进入全球天体)时,它会防止错误或错误。
  • 它使那些令人困惑或考虑不周的特征无法发挥作用。

另请注意, 您可以将“ 限制模式” 应用到整个文件... , 或者只能用于特定函数(仍在引用John Resig的文章):

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code...

如果你必须混合新旧代码和旧代码,

所以,我想这有点像"use strict"可在 Perl 中使用(因此命名? )它可以帮助您减少错误, 通过检测更多可能导致破碎的东西。

严格模式为现在由所有主要浏览器支持.

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

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

可比较的小例子 :

无限制模式 :

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+ 很重要 。

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

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