最近,我通过Crockford的jslint 输入了一些我的笔记本代码, 它犯了以下错误:

第1行字符1:缺少“严格使用”的语句。

某些搜索, 我意识到有些人在他们的 javascript 代码中添加了“ 严格使用 ” ; 。 一旦我添加了该语句, 错误就不再出现。 不幸的是, Google 并没有揭示此字符串语句背后的大部分历史。 当然, 它肯定与浏览器如何解读该语句有关, 但我不知道效果会是什么 。

那么,什么是“严格使用”;什么是“严格使用”;一切,它意味着什么,它是否仍然相关?

当前的任何浏览器是否响应“ 严格使用 ” ; 字符串, 或是否未来使用 ?


当前回答

语句“ 严格使用 ” ; 指示浏览器使用严格模式, 即一个缩写和安全的 Javastrict 特征集 。

特征列表列表(并非详尽无遗)

不允许的全变量 。 (在变量名称中缺少 var 声明和打字符) 静态失效分配将会在严格模式下丢出错误( 指派 nan = 5 ;) 试图删除非可删除属性将会丢弃( 删除对象 . prototype) , 要求对象字典中的所有属性名称都是独特的( var x = {x1: 1, x1: 1, x1: 2}) 函数参数名称必须是独一无二的( 函数和( x, x) {...}) 禁止八语法( var x = 023; 一些 deds 错误地假定前的零 doe

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


实例:

严格模式代码不能用别名来描述在其中创建的参数对象的属性

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

其他回答

从 w3 学校中引用:

使用“ 严格” 指令“ 使用严格” 指令在 javascript 1. 8. 5 ( 简写文本 5 ) 中是新的 。 它不是一个声明, 而是字面表达, 先前版本的 javascript 忽略了它。 “ 使用严格” 的目的是表示代码应该以“ 严格模式” 执行 。 您不能使用未声明的变量。 例如, 为何使用严格模式? 严格模式使得写“ 安全” javascript 更容易。 严格模式更改以前接受的“ 坏语法 ” 。

详情请查阅http://www.w3schools.com/js/js_stric.asp。

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

是否将它视为最佳做法之一?

是的,它被视为最佳做法的一部分,同时与 Javascript 合作, 包括严格的方式。 这是通过在您的 js 文件中添加下面的代码行来完成的 。

“严格使用”;

在你的代码。

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

表示代码应严格解释,向浏览器等用户代理器指定代码应如实处理代码,如果代码不合理,则会出错。

例如:在您的 .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

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

用户代理商经常对问题代码进行一系列的修改, 试图让问题代码变得合理。在表面上,这看起来就像一件好事, 事实上,在严格模式之外工作, 使得人们有可能在不把所有细节都固定下来的情况下, 将脚部浸湿在刺写代码中。 但是,作为一个开发者,我不想在我的代码中留下一个错误, 因为我知道它可能会回来咬我,

情景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'],
        },
    };
    

好吧,那么什么是被阻止 严格的方式?

使用变量而不声明会以严格模式丢弃错误 。 这是为了防止您在应用程序中无意中生成一个错误 。 打印 Chicago 的例子特别包含此内容 。 删除一个变量或函数或参数或参数是严格模式的不拒绝 。 “ 严格使用 ” ; 函数 x( p1, p2) {} {} {} ; 删除 x ; / / 这将导致错误, 严格模式不允许重复参数名称 。 “ 严格使用 ” ; 函数 x (p1, p1) {} {} {} / 这将造成错误, 严格模式不允许重复参数名称 。 “ 严格使用 ” ; 函数 x (p1, p1) {} {} / 这将 cau 。

此处的 mdn 文件请查阅更全面的清单: https:// developmenter.mozilla.org/en-us/docs/web/javascript/reference/strict_mode。

严格模式使 v8 引擎具有严格的特性。 某些特性的简短示例 :

您可通过写作方式实现全球化 :

'use strict'; // strict mode enabled!

函数中包含 :

let myfunc = () => {
  'use strict'; // strict mode enabled
  
   b = 0; // broke
}

在使用变量之前必须声明变量(正常 imo):

  var x;
  x = '0'; // ok
  y = '';  // not ok

已经启用 es6 功能( 取决于浏览器) , 因为节点 v4+ 很重要 。 在某些情况中, 性能更好 。

还有更多功能,请在这里检查更多功能

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

避免意外发生全球事故, 任何重复都不得消除, 消除这种胁迫性, 更安全的不可改变的电算错误() 。

您也可以阅读此文章的细节

“严格”模式引入了5号标本中。

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

刻写“ 严格使用 ” ; 在您 js 文件的顶部打开严格的语法检查 。 它为我们执行以下任务 :

如果您试图指定给一个未声明变量, 则显示错误 。 如果您试图指定给一个未声明的变量, 则会阻止您覆盖密钥 js 系统库禁止某些不安全或易出错的语言功能。

个人功能内部的工程也严格使用。在代码中加入严格使用总是更好的做法。

浏览器兼容性问题 : “ 使用” 指令意在向后兼容。 不支持这些指令的浏览器将只看到一个字符串字典, 没有进一步引用。 因此, 它们会通过它继续前进 。