【发布时间】:2017-08-30 12:33:05
【问题描述】:
这个 if 语句是虚假的,正如您从 Safari 调试器的屏幕截图中看到的那样。但正如你也可以从绿线看到的那样,它仍然像语句为真一样执行。
这只发生在 Safari 中,而 Chrome 和 Firefox 都按预期工作。
为什么会这样?可能是我们遇到了某种错误?
简化了,if语句基本上是if( true && (false || false))
var div = document.querySelector('div');
var type = "first";
var subtype = "second";
if (div.dataset.type == "first" && (!div.dataset.subtype || div.dataset.subtype == subtype)) {
div.innerText = 'Should never run'
} else div.innerText = 'Works as expected';
<div data-type="first" data-subtype="none"></div>
【问题讨论】:
-
啊,Safari,新的 Internet Explorer。
-
黑客的东西... ^^
-
你确定这条线运行了吗?我的猜测是这只是调试器突出显示的一个小故障。另外:你在悬停什么来获得
false? -
请使用 Stack Snippets(
[<>]工具栏按钮)通过 runnable minimal reproducible example 演示问题来更新您的问题,以便我们自己查看。除此之外,与 Safari 的 JavaScript 表达式评估中的基本错误相比,它更多更可能是观察错误。请参阅:selectis not broken。 -
@T.J.Crowder 是的,它确实运行,不仅在调试器中,而且在页面本身上。我悬停整个表达式以获得错误,基本上是
if( true && (false || false))
标签: javascript debugging safari logic