“使用严格”;看起来很棒,我们真的很想在我们的商店使用它。但是,我们只是想要它,以便我们(开发人员)可以找到严格性问题;我们非常想在以前工作正常的情况下为我们的实际客户制作网站。
现在,我们可以使用一些服务器端逻辑来实现这一目标:
{% if debug %}<script>"use strict";</script>{% endif %}
...除了“use strict”在逐个文件的基础上运行,因此实际上不会工作(好吧,除非我们启动服务器端处理所有JS文件)。
所以,我的问题是:在页面加载时执行所有“使用严格”检查以获取检查,或者在页面加载后“use strict”是否可以找到错误?如果是前者,我们可以使用“严格使用”并停止担心,因为我们会在将其加载到实时之前加载我们的网站。但是,如果是后者,我们似乎运气不好,因为我们无法测试每个可能的运行时条件(同样,我们不希望在之前没有错误时为我们的用户制造错误)。
答案 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'
是一个更好的解决方案。)