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

Javascript IF loop takes false and execute the true loop with jquery

本文关键字:循环 jquery 执行 true false IF Javascript      更新时间:2023-09-26

以下是rails应用程序中的jquery代码。该代码的目的是评估#rfq_need_report的值,如果need_report为true则显示#rfq_report_language:

$(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为false,但是alert("ow")被执行。if循环似乎为false,并决定执行true循环。有时如果循环工作,有时则不工作。是什么导致了这种奇怪的行为?谢谢

在HTML中,任何输入(如value="something")的值字段总是作为字符串计算。我的猜测是,在javascript中,您可以将该值设置为true或false,但实际上它被设置为字符串形式的"true"或"false"。您可以试试这个主题的答案:如何在JavaScript中将字符串转换为布尔值?

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

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

我必须假设$('#rfq_need_report').val()不是在传递实际的布尔值,而是JavaScript认为的"truthy",这就是为什么if语句执行truth子句的原因。

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

1:var bool = !!truthy;

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

当需要字符串值时使用第二个,当不需要字符串时使用第一个。

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

第一个!"not"将truthy值转换为实际布尔值,尽管与我想要的相反,第二个"not"则将其返回到应有的位置。

要了解更多truthy vs falsy的例子,只需将javascript truthy falsy放入你最喜欢的搜索引擎并开始阅读。我个人的快速参考是:JavaScript 中的Truthy和falsy