Live use是否“使用严格”安全?

时间:2012-04-11 23:27:09

标签: javascript use-strict

“使用严格”;看起来很棒,我们真的很想在我们的商店使用它。但是,我们只是想要它,以便我们(开发人员)可以找到严格性问题;我们非常想在以前工作正常的情况下为我们的实际客户制作网站。

现在,我们可以使用一些服务器端逻辑来实现这一目标:

{% if debug %}<script>"use strict";</script>{% endif %}

...除了“use strict”在逐个文件的基础上运行,因此实际上不会工作(好吧,除非我们启动服务器端处理所有JS文件)。

所以,我的问题是:在页面加载时执行所有“使用严格”检查以获取检查,或者在页面加载后“use strict”是否可以找到错误?如果是前者,我们可以使用“严格使用”并停止担心,因为我们会在将其加载到实时之前加载我们的网站。但是,如果是后者,我们似乎运气不好,因为我们无法测试每个可能的运行时条件(同样,我们不希望在之前没有错误时为我们的用户制造错误)。

2 个答案:

答案 0 :(得分:13)

这是后者。在strict mode中,Javascript解释器可能会在运行时抛出错误消息,这些消息不会在非严格模式下抛出。

另一方面,大多数错误都是“错误”,这意味着它们实际上有助于不破坏您的代码。

例如

function foo() {
    "use strict";
    bar = true;
}

foo();

这将抛出

"ReferenceError: assignment to undeclared variable bar"

在严格模式下,这是的事情。在非严格模式下,我们只会创建一个名为bar的全局变量,这可能不是我们想要的。还有很多其他情况strict mode阻止程序员做一些愚蠢/坏/不需要的事情并抛出错误消息。但同样,你希望有这些错误而不是一些奇怪的错误。

请进一步阅读MDN

答案 1 :(得分:6)

如果我理解正确,是的,严格模式肯定可以在页面加载后捕获错误。例如:

'use strict';

setTimeout(function() {
    undefined = 42; // Causes a TypeError
}, 1000);

// Click here for a demo.

您可以做的非常简单:无论如何,当您转向生产时,您应该缩小JavaScript。只需确保在缩小过程中'use strict'被移除。

如果做不到这一点,请尽量确保您的代码严格无错误。严格模式通常在语义方面发挥作用,而不是因为用户输入的奇怪之处或者甚至是因为语法。赶上所有案件都不应该太难。 (但缩小和删除'use strict'是一个更好的解决方案。)