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

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

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

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

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


当前回答

“ 严格使用 ” ; 是程序员不会使用 JavaScript 的松散特性或坏特性的保险 。 它是一种指南, 就像标尺会帮助您做直线。 “ 严格使用” 有助于您做“ 交易编码 ” 。

那些不愿使用统治者直线行事的人 通常最终会出现在那些网页上 要求其他人调试他们的代码

相信我 与设计不当的代码相比 间接费用微不足道多年来一直担任高级JavaScript开发商的Doug Crockford,个人来说,我一直想回到他的网站 以确保我不会忘记我的好做法

现代 JavaScript 实践应该总是引用“严格使用”;ECMA集团之所以将“Scrit”模式作为任择模式的唯一原因允许经验较少的编码员进入JavaScript, 并给予时间适应新的和安全的编码做法。

其他回答

添加时添加"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() { } 
    

资料来源:

如果您使用在过去一年左右释放的浏览器, 那么它很可能支持 JavaScript 严格模式。 只有 ECMAScript 5 之前的旧浏览器才成为当前标准, 不支持它 。

命令周围的引号确保代码在旧浏览器中仍然有效(尽管那些在严格模式下产生语法错误的东西通常只会导致脚本在旧浏览器中发生一些难以探测的故障 ) 。

ECMAScript 5采用了JavaScript“严格”模式。

(function() {
  "use strict";
  your code...
})();

书写"use strict";在您的 JS 文件的顶端, 打开严格的语法检查 。 它为我们执行以下任务 :

  1. 如果您试图指定给一个未声明的变量,则显示错误。

  2. 停止您覆盖关键 JS 系统库

  3. 禁止某些不安全或容易出错的语言特征

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

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