Ich benötige Hilfe bei der Fehlersuche bei JavaScript in einer Rails (4.2.6) -Anwendung mit Chartjs. Ich bekomme unerwartetes Verhalten, wenn ich versuche, einige Variablen mithilfe des ternären (if) -Operators festzulegen.JavaScript-Code wird als wahr ausgewertet, wenn die bedingte Anweisung falsch ist && 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;
Zu Testzwecken angemeldet ich in einem männlichen Benutzer mit den Fettdaten folgenden Körper:
body_fat_year_first = 15.2
body_fat_year_last = 21.9
Hier sind Ergebnisse aus der Firefox-Konsole:
> 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
Wenn sex_female ausgewertet werden "false" & & body_fat_year_first < = 24 wird als wahr ausgewertet, warum ist das nicht falsch & & wahre Aussage, die zu falsch auswertet?
Mein erster Gedanke war, dass sex_female eine Zeichenkette ist, weshalb die Aussage wahr ist. Um dies zu testen, habe ich versucht, die Saiten zu Boolesche Werten wie diese Umwandlung:
var sex_female = "<%= @member.sex == 'Female'%>" == "true";
var sex_male = "<%= @member.sex == 'Male'%>" == "true";
Allerdings hat diese Änderung nicht das Problem lösen: die ‚sex_male‘ Aussagen nie ausgewertet.
Was mache ich falsch? Wenn ein Mann eingeloggt ist, warum ist der & & Operator nicht "kurzgeschlossen", wenn er den "sex_female" -Teil trifft und den gesamten Ausdruck als falsch bewertet?
Ich würde mich über jede Hilfe und Ratschläge darüber freuen, warum dies geschieht und wie ich das Problem am besten beheben kann. Vielen Dank!
@Homa Wo gibt es eine if-Anweisung in der Frage? – Timo