2016-12-12 48 views
0

我需要使用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'部分並且將整個表達式評估爲假時,運營商不會「短路」?

我很感激任何關於爲什麼發生這種情況的幫助和建議,以及我如何最好地解決問題。謝謝!

+0

@Homa哪裏有一個if語句的問題嗎? – Timo

回答

3

由於

"false" != false 

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


卸下分配周圍的報價要解決這個問題:

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

感謝您的回覆。試圖刪除var分配的引號,但不幸的是,這並沒有解決問題。它仍然無視男性相關的陳述。它爲正在登錄的男性提供女性價值。嗯。 – codeinspired