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

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

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

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

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


当前回答

提醒大家小心, 所有你们这些硬收费程序员: 对现有代码应用“ 严格使用” 可能很危险, 这样做不是一件令人感觉良好、 快乐的贴纸, 你可以拍下代码来“ 更好” 。 使用“ 严格使用” 的套件, 浏览器会突然在它以前从未丢过的随机地方 丢出例外, 仅仅因为在那个地方, 你正在做一些 默认/ 粗略的刺绣手法 乐于允许的事情, 但严格的刺绣手法的恶作剧, 你可能隐藏着严格违反规则的恶作剧。

如果您要跳跳跳, 将“ 严格使用” 应用在全面的单位测试和严格配置的 jshint 构建任务上是一个好主意, 这将给你一些信心, 因为您打开了严格模式, 您的模块没有黑暗的角落, 并且会因为您打开了严格模式而可怕的爆炸。 或者, 嘿, 这里还有一个选项: 不要在您的遗留代码中添加“ 严格使用 ” , 这样可能更安全, 说实话。 绝对不要在您不拥有的模块中添加“ 严格使用 ” 。

我认为即使这是致命的笼笼动物, “ 严格使用” 也可以是好东西, 但你必须做对。 最好的严格时间是您的项目是绿地, 并且从零开始。 配置 jshint/ Jslint , 配置所有警告和选项, 并尽可能紧紧地按您的团队的胃口调调动, 获得良好的建筑/ 测试/ 资产系统, 并像 grunt+karma+chai 那样操作, 并且只有这样, 才能开始将您所有的新模块标记为“ 严格使用 ” 。 准备治愈很多错误和www。

我的项目在采用“严格使用”时不是一个绿地项目。 结果,我的假肢充满了红色标记, 因为我对一半的模块没有“严格使用”, Jshint 抱怨这一点。 这提醒了我未来应该做什么。 我的目标是因为我所有缺失的“严格使用”的语句而没有红色标记,

其他回答

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

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

John Revig写了个好摘要 写了个好摘要

这只是一个字符串,你放 在你的 javacript 文件( 在文件顶部或函数内部) 中, 看起来像这个 :

"use strict";

输入您的代码不应该对当前浏览器造成任何问题, 因为它只是一条字符串。 它可能会在未来对您的代码造成问题, 如果您的代码违反了 pragma 。 例如, 如果您目前拥有 Foo = “ bar ” 而不先定义 Foo , 您的代码将会开始失效... 在我看来这是件好事。

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

消除一些标注的沉默错误, 将其修改为丢弃错误 。 修补错误, 使标标注的引擎难以进行优化 。 禁止某些可能在未来版本的标注中定义的语法 。

用于获取更多信息的 严格模式- javamart

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

“使用严格”指令在5版缩写文本中是新的“使用严格”指令。它不是一个声明,而是一个字面表达式,被先前版本的 Javascript 忽略。“使用严格”的目的是表示代码应该以“严格模式”执行。例如,不能使用未声明的变量。

所有现代浏览器都支持“严格使用”,

不利情况

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

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

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

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

https://www.tutoricsteacher.com/javascript/javascript-strict

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