这个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>
&#13;
答案 0 :(得分:0)
在 if 条件下,考虑将“ == ”更改为“ === ”。在javascript中,比较在类型强制之后发生。