我需要使用Chartjs幫助解決Rails(4.2.6)健身應用程序中的某些JavaScript問題。嘗試使用三元(if)運算符設置某些變量時,我遇到意外的行爲。當條件語句錯誤時,Javascript代碼評估爲真&& true
// 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;
出於測試目的,我登錄時使用的下列體脂數據的男性用戶:
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評估爲真,爲什麼不是假& &真實的陳述評估爲假?
我最初的想法是,sex_female是一個字符串,這就是爲什麼該語句評估爲true。爲了驗證這一點,我試圖轉換字符串布爾值是這樣的:
var sex_female = "<%= @member.sex == 'Female'%>" == "true";
var sex_male = "<%= @member.sex == 'Male'%>" == "true";
但是,這種變化並沒有解決的問題:「sex_male」語句不會求。
我在做什麼錯?當一名男性登錄時,爲什麼當它遇到'sex_female'部分並且將整個表達式評估爲假時,運營商不會「短路」?
我很感激任何關於爲什麼發生這種情況的幫助和建議,以及我如何最好地解決問題。謝謝!
@Homa哪裏有一個if語句的問題嗎? – Timo