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

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

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

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

当前浏览器中的任意浏览器响应"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() { } 
    

资料来源:

其他回答

请注意use strictEcmaScript 5从那时起,一直被扣留着。

以下是触发严格模式的条件欧 6欧 7:

  • 全球守则是严格的模式代码,如果它从含有使用严格指令的指令前言开始(见14.1.1)。
  • 模块代码总是严格的模式代码。
  • A. 所有部分类 声明或 a/类压是严格的模式代码。
  • Eval 代码是严格的模式代码,如果它从含有“使用严格指令”的指令前言开始,或者如果对 Eval 的号召是包含在严格模式代码中的直接电子逆向拍卖(见12.3.4.1)的话。
  • 函数代码是严格模式代码,如果相关功能声明、功能显示、发电机声明、发电机声明、方法定义或箭头功能包含在严格模式代码中,或者如果生成函数 [[ECMAScriptCode]] 内部空格值的代码以包含使用严格指令的指令前导开始。
  • 作为内置函数和发电机构造器的参数而提供给内置函数和发电机构造器的函数代码是严格模式代码,如果最后一个参数是字符串,当处理时是函数Body首先是包含使用严格指令的指令前言。

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

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

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

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

用于获取更多信息严格模式 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"现有的代码可能危险! 这东西不是某种感觉良好、 快乐的贴纸, 你可以用它来“ 更好 ” 。"use strict"pragma, 浏览器会突然在它以前从未丢弃的随机地点出现Thalrow例外, 仅仅因为在那个地点你正在做一些 默认的/失败的 JavaScript 乐于允许但严格的 JavaScript 憎恶的东西! 您可能会在代码中很少使用的电话中隐藏严格违反规则的情况, 这些电话只有在他们最终逃跑时才会扔出例外 - 比如, 在您的付费客户所使用的生产环境中!

如果你要跳下去, 申请是一个很好的主意"use strict"与综合单元测试和严格配置的 JSHint 构建任务同时进行综合单元测试和严格配置的 JSHint 构建任务, 这将使你有信心你的模块没有黑暗的角落, 仅仅因为你打开了严格模式, 就会可怕地爆炸。 或者, 嘿, 这里还有一个选项: 不要添加"use strict"对你的任何遗产代码, 它可能更安全 这样,诚实地说。绝对不做添加 添加"use strict"用于您没有拥有或维持的模块,如第三方模块。

我想,即使它是一个致命的笼子动物,"use strict"可以是好东西, 但你必须做对。 最好严格的时候是您的项目是绿地, 而您是从零开始的。 配置JSHint/JSLint和所有警告和选择 调出所有的所有警告和选择 调得越紧,你的团队可以 胃,得到一个良好的建设/测试/资产系统Grunt+Karma+Chai,并且只有当时N才会开始将您所有的新模块标记为"use strict"准备纠正大量乳臭错误和警告。确保每个人都了解重力,将建筑配置为FAIL,如果JSHint/JSLint产生任何违反行为。

当我通过我的项目时,我的项目不是一个绿地项目"use strict"结果,我的IDE 满是红标记 因为我没有"use strict"我一半的模块,JSHint抱怨这一点。这提醒我,我将来应该做什么。我的目标是,因为我失踪了,所以没有红色标记。"use strict"声明,但这已经是多年之后的事了。

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

  • 预防意外全球事故

  • 无重复

  • 消除用

  • 消除这种胁迫

  • 更安全电子( )

  • 不可更改的错误

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