2016-12-12 8 views
0

Chartjsを使用したRails(4.2.6)フィットネスアプリケーションでJavaScriptのトラブルシューティングが必要です。私は、三項演算子(if)演算子を使っていくつかの変数を設定しようとすると、予期しない動作をしています。テスト目的のために条件文が偽である場合、Javascriptコードはtrueと評価されます。&& 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が文字列なので、その文が真と評価される理由です。これをテストするために、私はこのようなブール値に文字列を変換してみました:

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"trueにJavaScriptでtruthy、すなわち評価している非空の文字列です。

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

varの割り当てに関する引用符を削除しようとしましたが、残念ながら、それは問題を解決しませんでした。男性関連のステートメントはまだ無視されています。それは、ログインした男性の女性の価値を生み出しています。うーん。 – codeinspired

関連する問題