【问题标题】:Javascript if statement evaluates false, but still runs (Safari only)Javascript if 语句评估为假,但仍运行(仅限 Safari)
【发布时间】: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 表达式评估中的基本错误相比,它更多更可能是观察错误。请参阅:select is not broken
  • @T.J.Crowder 是的,它确实运行,不仅在调试器中,而且在页面本身上。我悬停整个表达式以获得错误,基本上是if( true && (false || false))

标签: javascript debugging safari logic


【解决方案1】:

考虑在 if 条件下将“==”更改为“===”。在 javascript 中,比较发生在类型强制之后。

【讨论】:

  • 我认为OP理解抽象相等比较算法。
  • 除此之外我没有看到任何问题,div.innerText = 'Works as expected'; 周围有花括号,所以。
猜你喜欢
  • 2014-10-21
  • 1970-01-01
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
相关资源
最近更新 更多