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

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

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

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

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


当前回答

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

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

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

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

其他回答

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

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

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

部分1: 缩略语 5 说明使用“严格使用”开关的递增使用 如何让缩略语执行者 清理大量刺略语的危险特征 而不突然打破世界上每个网站

当然,它也谈到很多这些错误的特征是什么,5 是如何修补这些错误的。

使用“ 严格 ” , 是否是使刺绣更加坚固的“ 严格 ” 。 它带来js 试图使其至少略微“ 严格 ” ( 其他语言自90年代以来实施严格的规则 ) 。 它实际上是“ 强制” 刺绣开发者遵循某种最佳编码实践 。 但是, 刺绣非常脆弱 。 没有打印变量、 打字方法等东西。 我强烈建议刺绣开发者学习一种更强有力的语言, 如 java 或 actscript3 和 impl 。

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

为未来的缩略图版本铺路, 使用新保留的关键字之一( 为 缩略图 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的博客(存档版本)上使用该模式。

如果人们担心使用严格使用,

浏览器中的 5 个“ 限制模式” 支持 。 这是什么意思 ? novogeek. com - krishna 的 Webb 。

讨论浏览器支持, 但更重要的是如何安全处理:

function isStrictMode(){
    return !this;
} 
/*
   returns false, since 'this' refers to global object and 
   '!this' becomes false
*/

function isStrictMode(){   
    "use strict";
    return !this;
} 
/* 
   returns true, since in strict mode the keyword 'this'
   does not refer to global object, unlike traditional JS. 
   So here, 'this' is 'undefined' and '!this' becomes true.
*/