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

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

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

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

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


当前回答

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

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

"use strict";

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

其他回答

使用“ 严格 ” ; 是 ECMA 试图让 JavaScript 稍微强一点 。 它使JavaScript 尝试让 JavaScript 稍微强一点 。 它使JavaScript 尝试让 JavaScript 至少 略微“ 严格 ” ( 其他语言自90 年代以来实施严格的规则 ) 。 实际上, JavaScript 开发者“ 强制” 遵循某种最佳的编码 。 尽管如此, JavaScript 仍然非常脆弱 。 没有打印变量、 类型方法等东西。 我强烈建议 JavaScript 开发者学习一种更强健的语言, 如 Java 或 ActionScript 3 , 并在您的 JavaScript 代码中实施同样的最佳做法, 它会更好, 更容易调试。

严格模式允许在 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"它们是:

  1. 防止意外宣布全球变量。"use strict()"将会确保变量被声明为var在使用之前使用。 如 :

    function useStrictDemo(){
     'use strict';
     //works fine
     var a = 'No Problem';
    
     //does not work fine and throws error
     k = "problem"
    
     //even this will throw error
     someObject = {'problem': 'lot of problem'};
    }
    
  2. 注:N.B:"use strict"指令仅在脚本或函数的开头确认。
  3. 字符串"arguments"无法用作变量 :

    "use strict";
    var arguments = 3.14;    // This will cause an error
    
  4. 将限制关键字作为变量的使用。 试图使用关键字将会丢弃错误 。

简言之,你的代码将减少容易出错的程度,反过来又将使得你写好代码。

更多信息,请查看在这里.

通常JavaScript通常不遵循严格的规则,从而增加出错的可能性。"use strict", JavaScript 代码应该像使用终止语、在启动前宣布等其它编程语言一样,遵循一套严格的规则。

如果(如果)"use strict"使用该代码时,代码的编写应遵循一套严格的规则,从而减少出错和模棱两可的可能性。

添加时添加"use strict";中,下列情况将投语法错误在脚本执行之前:

  • 为未来的ECMAScript版本铺路,使用一个新保留的关键关键关键关键词(在ECMAScript 6): implements, interface, let, package, private, protected, public, static, 和yield.

  • 在区块中声明函数

    if(a<b){ function f(){} }
    
  • 八进语法

    var n = 023;
    
  • this点对全局对象。

     function f() {
          "use strict";
          this.a = 1;
     };
     f(); 
    
  • 在对象字典中为属性名称声明相同名称的两倍

     {a: 1, b: 3, a: 7} 
    

    ECMACcript 6 (ECMAScript 6)已不再属于这种情况(ECOMACcript 6) (EECMAScript 6) (EECMACcript 6) (EECMACcript 6) (EECMACcript 6)) 。昆虫 1041128).

  • 以相同名称函数宣告两个函数参数

    f(a, b, b){}
    
  • 设定未声明变量的值

    function f(x){
       "use strict";
       var a = 12;
       b = a + x*35; // error!
    }
    f();
    
  • 使用delete在变量名称上delete myVariable;

  • 使用evalarguments作为变量或函数参数名称

    "use strict";
    arguments++;
    var obj = { set p(arguments) { } };
    try { } catch (arguments) { }
    function arguments() { } 
    

资料来源: