Javascript IF循环使用false并使用jquery执行true循环

时间:2012-01-26 18:06:59

标签: javascript jquery

这是rails app中的jquery代码。代码的目的是评估#rfq_need_report的值,如果need_report为true则显示#rfq_report_language,如果为false则显示隐藏:

$(document).ready(function() {
  var rpt = $('#rfq_need_report').val();
  alert(rpt);
  if (rpt) {
     alert(rpt);
    $('#rfq_report_language').show();
    alert('show');      
  } else {
    $('#rfq_report_language').hide();
    alert(rpt);
    alert('hide');
  }
}); // end ready

此处的警报仅用于调试。 rpt是假的,但是警报('show')被执行。似乎if循环处于假状态并决定执行循环为true。有时如果循环正在工作,有时则没有。什么可能导致这种奇怪的行为?感谢。

3 个答案:

答案 0 :(得分:2)

在HTML中,任何输入(如value="something")的值字段始终被评估为字符串。我的猜测是,在javascript中你要么将该值设置为true或false,但事实上它被设置为“true”或“false”作为字符串。您可以尝试对此主题的回答:How can I convert a string to boolean in JavaScript?

答案 1 :(得分:1)

rpt可以是一个字符串,因此将其转换为布尔值将有助于:

if(rpt === "false") { rpt = false; } else { rpt = true; }

答案 2 :(得分:1)

我必须假设$('#rfq_need_report').val()没有传回实际的布尔值,而是JavaScript认为'truthy'的东西,这就是你的if语句执行真值子句的原因。

有两种快速方法(我使用)将'truthy'值转换为实际布尔值:

1:var bool = !!truthy;

2:var bool = truthy === 'true'

我在期待字符串值时使用第二个,而在不期待字符串时使用第一个。

第一个例子可能需要解释,所以......

第一个! “不是”真实布尔值的真实价值,尽管与我想要的相反,第二个“不是”它回到应该的位置。

有关truthy vs falsy的更多示例,只需将javascript truthy falsy弹出到您最喜爱的搜索引擎中即可开始阅读。我个人的快速参考是:Truthy and falsy in JavaScript