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

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

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

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

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


当前回答

严格模式消除了在非限制模式下会忽略的错误,从而使javascript " 更安全 " 。

是否认为它是最佳做法之一?

是 是,它被认为是最佳做法的一部分, 与 Javascript 合作,包括严格模式。这样做的方式是在你的联署材料档案中添加以下代码行。

'use strict';

在你的代码。

这对用户代理意味着什么?

说明代码应该严格解释 向浏览器这样的用户代理指定 他们应该把代码 完全像书面的一样对待 如果代码不合理的话 就会出错

例如:考虑在.js您的文件有以下代码:

设想情景1:[无严格模

var city = "Chicago"
console.log(city) // Prints the city name, i.e. Chicago

设想情况2:[无严格模

city = "Chicago"
console.log(city) // Prints the city name, i.e. Chicago

为何在两种情况下都打印变量名称?

不打开严格模式,用户代理商经常对问题代码进行一系列修改,以试图使问题代码变得合理。在表面上,这看似是一件好事,事实上,在严格模式之外工作使得人们有可能在不把所有细节都固定下来的情况下,用JavaScript代码湿透脚部。然而,作为一个开发者,我不想在我的代码中留下一个错误,因为我知道它可能会在晚些时候回来咬我,我还只是想写好代码。这就是严格模式有助于解决问题的地方。

设想方案3:[严格示范

'use strict';

city = "Chicago"
console.log(city) // Reference Error: asignment is undeclared variable city.

附加提示 :要使用严格模式保持代码质量, 您不需要一次又一遍地写入, 特别是如果您有多个.js您可以在eslint规则如下:

文件名 : .eslintrc.js

module.exports = {
    env: {
        es6: true
    },
    rules : {
        strict: ['error', 'global'],
        },
    };
    

那么,什么是严格防止的呢?

  • 使用变量而不声明这将以严格的方式丢弃一个错误。 这是为了防止您在应用程序中无意中创建全局变量。 打印芝加哥的例子特别覆盖了这一点 。

  • 删除变量或函数或参数严格情况下是无的。

    "use strict";
     function x(p1, p2) {}; 
     delete x; // This will cause an error
    
  • 复制参数名称严格允许。

     "use strict";
     function x(p1, p1) {};   // This will cause an error
    
  • 不允许以 Javascript 语言保留单词字词是工具界面,让,包,包,私人,受保护,公开,静态和产出

若要列出更全面的清单, 请在此检查 MDN 文件 :https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode

其他回答

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

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

"use strict";

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

声明声明"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" );

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

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

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

“ 严格使用 ” ; 定义 JavaScript 代码应以“ 限制模式” 执行 。

  • ECMAScript 5版的新指令是“严格使用”指令。
  • 它不是一种声明,而是一种字面表达,被以前版本的JavaScript所忽视。
  • “严格使用”的目的是表示代码应以“严格模式”执行。
  • 在严格模式下,您不能使用未声明的变量。

所有现代浏览器支持“ 严格使用 ” , 除非因特网探索者 9 及以下.

缺点

如果开发商使用一个严格模式的图书馆, 但开发商通常使用正常模式,

更糟糕的是,由于开发商处于正常模式,他们没有被抛出额外错误的好处,因此错误可能会无声无息地失败。

此外,如上所列,严格模式阻止你做某些事情。

但有些开发商不喜欢这种限制, 并想使用语言的所有特征。

严格模式允许在 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+ 很重要 。

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

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