簡體   English   中英

條件語句為false && true時,JavaScript代碼評估為true

[英]Javascript code evaluates true when conditional statement is false && true

我需要幫助,使用Chartjs對Rails(4.2.6)健身應用程序中的某些JavaScript進行故障排除。 嘗試使用三元(if)運算符設置某些變量時,出現異常行為。

// f = female, m = male; first = first measurement of year; last = last measurement of year
var sex_female = "<%= @member.sex == 'Female' %>";
var sex_male = "<%= @member.sex == 'Male' %>";
var normal_body_fat_first_f;
var normal_body_fat_last_f;
var normal_body_fat_first_m;
var normal_body_fat_last_m;

normal_body_fat_first_f = sex_female && body_fat_year_first <= 24.0 ? body_fat_year_first : 24.0;
normal_body_fat_last_f = sex_female && body_fat_year_last <= 24.0 ? body_fat_year_last : 24.0;

normal_body_fat_first_m = sex_male && body_fat_year_first <= 17.0 ? body_fat_year_first : 17.0;
normal_body_fat_last_m = sex_male && body_fat_year_last <= 17.0 ?  body_fat_year_last : 17.0;

為了進行測試,我使用以下身體脂肪數據登錄了MALE用戶:

body_fat_year_first = 15.2
body_fat_year_last = 21.9

以下是Firefox控制台的結果:

> sex_female
"false"
> sex_male
"true"

> normal_body_fat_first_f
"15.2"
> normal_body_fat_last_f
"21.9"

normal_body_fat_first_m
"15.2"
normal_body_fat_last_m
"17"

> body_fat_year_first <=24
true
> body_fat_year_first <= 17.0
true

> sex_female && body_fat_year_first <= 24.0
true
> sex_female && body_fat_year_last <= 24.0
true

> sex_male && body_fat_year_first <= 17.0
true
> sex_male && body_fat_year_last <= 17.0
false

如果sex_female的評估結果為“ false”,&& body_fat_year_first <= 24的評估結果為true,為什么false && true陳述式的評估結果為false?

我最初的想法是sex_female是一個字符串,這就是為什么該語句評估為true的原因。 為了測試這一點,我嘗試將字符串轉換為布爾值,如下所示:

var sex_female = "<%= @member.sex == 'Female'%>" == "true";
var sex_male = "<%= @member.sex == 'Male'%>" == "true";

但是,這種更改並不能解決問題:永遠不會評估'sex_male'語句。

我究竟做錯了什么? 當男性登錄時,當&&運算符遇到'sex_female'部分並將整個表達式評估為false時,為什么不“短路”?

感謝您提供任何有關為什么會發生這種情況以及如何最好地解決此問題的幫助和建議。 謝謝!

因為

"false" != false

換句話說, "false"是一個非空字符串,這是truthy在JavaScript中,即計算結果為true


刪除作業周圍的引號可以解決此問題:

var sex_female = <%= @member.sex == 'Female' %>;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM