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

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

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

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

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


当前回答

在使用“严格使用”之后,“严格使用”代码应该像使用终止语、启动前声明等其他节目语言一样,遵循一套严格的规则。

如果使用“严格使用”,守则的编写应遵循一套严格的规则,从而减少错误和模棱两可的可能性。

其他回答

由于浏览器的战争和不良的管理,手稿的设计和实施过于仓促。 结果导致许多设计决定不善,不直观的语法和混淆不清的语义进入了语言。 严格的方式旨在修正其中的一些错误。

“使用严格”指令在向程序员传达代码的同时, 也设定了对代码的替代解释。

例如,此关键字指方法定义中的对象,如此,或指其他语言的自定义。

let o = {
  name: 'John Doe',
  sayName: function(){
    console.log(this.name);
  }
};

o.sayName(); // 'John Doe'

这在方法上下文之外没有任何目的,但所有javascript函数都有这个关键词,无论它们是否为方法:

function run() {
  console.log(this);
}

run(); // Window

在这里,这是对一个全球目标的确定,它没有意义,也没有意义,因为全球目标已经在范围中存在。

在一个全球功能中,严格地以这种方式,决心作出不确定的决定,这正是我们所期望的。

"use strict"

function run() {
  console.log(this);
}

run(); // undefined

有些错误即使严格的方式也无法固定, 因为语法应该对旧浏览器有效, 因为它们忽略了“ 限制模式” 指令。 这是故意的 。

我两分钱

严格模式的目标之一是允许更快地调试问题。 它会帮助开发者, 当某些错误的事情发生, 可能导致您网页的沉默和奇怪行为时, 它会提出例外, 从而帮助开发者。 当我们使用严格模式时, 代码会丢弃错误, 帮助开发者提前修正它 。

在严格使用后我学到的几件重要东西:

防止全球变量声明:

“ 严格” ; var tree1data = { name: 'banana tree', age: 100,leafcount: 100,leafcount: 100,000}; 函数树( 树类型) { var age; var lifcount; 年龄 = tree. age; 叶数 = kree.leafcount; 树名称 = tree. name; }; var tree1 = 新树( riet1data); 控制台. log( windowowow);

现在, 这个代码创建了全球范围的树名, 可以使用 window. nameoftree 访问 。 当我们严格使用这个代码时, 代码会丢弃错误 。

未标记的引用引用器: 未定义树名 。

以下列语句删除:

无法使用像丑化js这样的工具对语句进行简单化。 它们也会被折旧, 从未来的 Javarint 版本中删除 。

样本 :

“ 严格” ; var tree1data = { name: 'banana tree', 年龄: 100, 叶数: 100 000} ; 函数树( 树类型) { var 年龄; var 叶数; 年龄= 树类型. age; 叶数= 树类型.leafcount; // 树名称= 树类型. name; 对于 (var i = 0; i & lt; 2) { / let( leafcount = i) { { / * do something */} { (val i = 0; i & lt; 2; +u) { 和 (leafcount = i) { { {/ * do something} {; var tree1 = 新的树 (tree1data); { likefor.log( windo) 。

防止重复:

当我们有重复财产时,它是一种例外,

unacaute 语法解析器: 在严格模式下不允许以对象文字复制数据属性

“严格使用”; var 树1data = { 名称: “香蕉树 ” , 年龄: 100, 叶数: 100 000, 名称: “香蕉树 ” ;

很少有更多的人,但我需要获得更多这方面的知识。

严格模式使 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+ 很重要 。 在某些情况中, 性能更好 。

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

严格模式消除了在非限制模式下会忽略的错误,从而使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。

添加“ 严格使用 ” 时, 下列情况将在脚本执行前丢弃语法器 :

为未来的缩略图版本铺路, 使用新保留的关键字之一( 为 缩略图 6 预览) : 执行、 接口、 let、 包包、 私有、 受保护、 公用、 静态和 产出。 如果 (a< b) { 函数 f ()\\\\\\\\\\\\\\\\\\\ n \ \ \ \\ \\\\\ n\\\ = 023; 此点指向全球对象 。 f () { "使用严格" { "使用" ; this. a = 1;} f () ; f () ; 在对象字典 {a: 1, b: 3, a: 7} 中声明一个属性名称的两倍相同名称 {a: 1, b: 3 a: 7}

资料来源:

Mdn javascript的严格模式以及为什么你应该在colin j. ihrg的博客(存档版本)上使用该模式。