当条件语句为false&&时,Javascript代码的计算结果为true。真

时间:2016-12-12 18:36:28

标签: javascript ruby-on-rails

我需要帮助使用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评估为“假”&amp;&amp; body_fat_year_first&lt; = 24评估为true,为什么不是false&amp;&amp;真实的陈述评估为假?

我最初的想法是sex_female是一个字符串,这就是语句评估为true的原因。为了测试这一点,我尝试将字符串转换为布尔值,如下所示:

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

但是,这种改变并没有解决问题:'sex_male'语句从未被评估过。

我做错了什么?当男性登录时,为什么不是&amp;&amp;当遇到'sex_female'部分并将整个表达式评估为假时,运算符'短路'?

我很感激有关为什么会这样做的任何帮助和建议,以及我如何才能最好地解决问题。谢谢!

1 个答案:

答案 0 :(得分:3)

由于

"false"

换句话说,true是一个非空字符串,在JavaScript中为truthy,即评估为var sex_female = <%= @member.sex == 'Female' %>;

删除作业周围的引号应解决此问题:

var students = Map(
 "Neil" -> 87
 "Buzz" -> 71
 "Michael" -> 95
)