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

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

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

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

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


当前回答

如果人们担心使用use strict也许值得看看这篇文章:

在浏览器中支持 ECMAScript 5 “ 立体模式” 。 这是什么意思 ?
NovoGeeek.com - 克里希纳的博客

讨论浏览器支持, 但更重要的是如何安全处理:

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.
*/

其他回答

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

  • 预防意外全球事故

  • 无重复

  • 消除用

  • 消除这种胁迫

  • 更安全电子( )

  • 不可更改的错误

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

声明声明"use strict"; 指示浏览器使用严格模式,该模式是JavaScript的简化和安全功能集。

特征清单(并非详尽无遗)

  1. 丢弃全局变量 。var以变量名称填报声明和打字)

  2. 静音失灵任务会以严格的方式丢出错误( 指派)NaN = 5;)

  3. 试图删除不可迁移属性的尝试将会丢弃( ) 。delete Object.prototype)

  4. 要求对象字典中的所有属性名称都具有独一性( W)var x = {x1: "1", x1: "2"})

  5. 函数参数名称必须是独有的( V)function sum (x, x) {...})

  6. 禁止辛醇- 辛醇- 辛醇- 辛醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙醇- 乙酯var x = 023;有些德意志人错误地认为,前零位数没有改变数字。 )

  7. 禁止with关键字

  8. eval在严格模式下不引入新变量

  9. 禁止删除普通名称(delete x;)

  10. 强制禁止或指定姓名evalarguments以任何形式

  11. 严格模式不使用arguments对象的正格式参数。 (例如,在function sum (a,b) { return arguments[0] + b;}之所以有效,是因为arguments[0]a等) (......) (见见examples下一节,以了解差异)

  12. arguments.callee不支持不支持

[参考:严格模式, Mozilla 开发者网络]


实例:

  1. 严格模式代码不使用在其中创建的参数对象的别名属性
function show( msg ){
    msg = 42;
    console.log( msg );          // msg === 42
    console.log( arguments[0] ); // arguments === 42
}
show( "Hey" );

// In strict mode arguments[i] does not track the value of 
// the corresponding named argument, nor does a named argument track the value in the corresponding arguments[i]
function showStrict( msg ){
    "use strict";
    msg = 42;
    console.log( msg );          // msg === 42
    console.log( arguments[0] ); // arguments === "Hey"
}
showStrict( "Hey" );

更新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 中使用(因此命名? )它可以帮助您减少错误, 通过检测更多可能导致破碎的东西。

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

如果人们担心使用use strict也许值得看看这篇文章:

在浏览器中支持 ECMAScript 5 “ 立体模式” 。 这是什么意思 ?
NovoGeeek.com - 克里希纳的博客

讨论浏览器支持, 但更重要的是如何安全处理:

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.
*/

可比较的小例子 :

无限制模式 :

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