javascript - 是否可以使用 "use strict";有条件的话,什么时候说你处于开发环境?

标签 javascript ecmascript-5

(所有示例均来自 chrome) 这不起作用:

if (InDevEnvironment) {
    "use strict";
    undeclaredVar = 1;
}
undeclaredVar2 = 1;

即,不适用严格模式,并且两个未声明的变量都不会设置为全局

但是这有效:

"use strict";
undeclaredVar = 1;
undeclaredVar2 = 1;

即,应用严格模式,两行都会生成错误

问题 - 有没有办法根据某些条件 JavaScript 语句应用严格模式?

最佳答案

is there a way to apply strict mode, depending on some conditional JavaScript statement

合理,不。有一些不合理的方法来做到这一点(我的想法是:使用ajax加载脚本并在顶部添加/不添加“use strict”;在将其放入 script 元素并将该元素添加到页面之前)。

但如果你能避免的话我不会。没有特别好的理由将其删除,只需将其留在那里即可。如果代码已经通过了开发和测试,那么在生产中使用它应该不是问题,并且如果错误错过了开发和测试,很可能会为您提供重要的、节省时间的信息。 (客户对客户支持:“它坏了” 对客户支持:“按 F12 并单击控制台,您看到红色的东西了吗?” 客户​​对支持:“它说 ReferenceError...”--结果!)


您的问题特别询问了如何使用 JavaScript 变量来执行此操作,但您可以使用 JavaScript 变量非常轻松地执行此操作。例如,您可以使用脚本压缩器/组合器来执行此操作:

“use strict” 在函数和代码编译单元级别工作,并且 “use strict” 必须是 first non-comment在单位。所以这是严格的代码:

"use strict";
doSomethingCool();

这是严格的代码:

doSomethingCool();
"use strict";
/* This would not be strict code here */

第二个示例中的“use strict”只是一个死表达式,没有任何效果。

因此,在您的模块中,当您将它们迁移到严格模式时,您可以将 "use strict"; 添加到模块的顶部,然后让您的脚本组合器添加一些内容组合和缩小时的前面。这具有禁用该语句的效果。由于您可能不使用脚本组合器/压缩器(而是直接加载模块),因此将在开发中启用严格模式,但在生产中不会启用。

关于javascript - 是否可以使用 "use strict";有条件的话,什么时候说你处于开发环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24740532/

相关文章:

javascript - 如何使用 ES6 模块使用变量/函数的动态名称导出?

javascript - 如何在 JavaScript 中以字符串形式返回参数?

javascript - Nodejs 4.x 上的 ES6 代码 : Is V8 4. 5 直接运行 ES6 的原生 JS 引擎?

javascript - 是否有任何直接方法可以返回对象数组中数组长度的总和?

javascript - Javascript 中的构造函数和另一个函数之间共享逻辑

javascript - 在 Rust web 程序集中访问 UInt8ClampedArray

javascript - 数据操作 : How can I append path from my data array?

javascript - 如何从javascript中的对象字面量中提取注释

javascript - var 关键字的用途是什么以及何时应该使用它(或省略它)?

javascript - Javascript 中的对象属性值行为