【问题标题】:Boolean in IF Condition causing Errors in JavaScriptIF 条件中的布尔值导致 JavaScript 错误
【发布时间】:2016-02-10 18:41:11
【问题描述】:

我正在使用相当简单的 JavaScript 开发网页。我的整个 JavaScript 代码是:

function showUnlockPopup(isViolated,instId,unlock_done,unlock_total,period,endDate){
        alert(isViolated);
        if(isViolated){
            if(unlock_done < unlock_total){
                showInfoPopup(instId,unlock_done,unlock_total,period);
            } else {
                showNoUnlocksPopup(instId,unlock_done,unlock_total,period,endDate);
            }
        } else {
            showNotViolatedModal();
        }
    }

但是,无论“isViolated”变量的值如何,都会调用我的“showInfoPopup”函数。

我也检查了方法调用的代码:

<button onClick="showUnlockPopup(isViolated)">Unlock</button>

警报正确显示“真”或“假”值,但逻辑仅针对“真”运行,而与值无关。

我想我在这里遗漏了一些相当基本的东西。我尝试了很多,但没有用。请帮助我。

【问题讨论】:

  • 作为isViolated 变量传递的类型/值是什么?如果是 "true" 和 "false" 的字符串,javascript 会将两者都视为 true。
  • PROTIP:使用console.log 进行调试,而不是alert
  • 调试你的程序。在if (isViolated) 行上放置一个断点,并检查isViolated 的值。
  • 我假设在你没有显示的地方有一个}
  • @AdhishThite: “它肯定是一个布尔值,因为它已经在代码中以这种方式声明了。” JavaScript 变量声明是无类型​​的。 “如果我写 !isViolated,那么 else 条件就会被执行。” 这并不意味着它是布尔值。

标签: javascript if-statement boolean


【解决方案1】:

这是因为isViolated 作为字符串返回。因此,除非字符串为空,否则如果它有一些内容,它将为真。您应该将您的检查更改为isViolated == 'true',创建一个新的布尔变量,并根据isViolated 或第三个东西分配它。

【讨论】:

  • 当然,但你怎么知道的?
  • @torazaburo:大概从警报的描述来看。 OP 声称警报显示真/假。
  • @T.J.Crowder 我在 chrome 控制台上快速尝试过,alert(boolvar) bool 和 alert(stringval) 产生相同的消息(真/假)
  • @DPac:你的意思是说 torazaburo 的评论吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2016-02-25
相关资源
最近更新 更多