为什么这段代码没有按预期工作?

时间:2018-02-10 04:07:36

标签: javascript boolean ternary-operator

let x;
console.log("shubham" == true );  // gives false
"shubham" ? x=2 : x=3;
console.log(x); // gives 2, so "shubham" must be true?  

//我希望得到价值3

2 个答案:

答案 0 :(得分:2)

当你使用它时:

"shubham" == true

在比较之前,true转为1,所以实际比较是

"shubham" == 1

所以,它给出了错误;

这本书:

  

执行转换时,等于和不等于运算符会跟随   这些基本规则:

     

如果操作数是布尔值,则将其转换为a   检查相等性之前的数值。值为false的转换   为0,而值为true则转换为1.

     

如果一个操作数是一个字符串而另一个是一个数字,请在检查相等性之前尝试将该字符串转换为数字。

当你使用它时:

"shubham" ? x=2 : x=3;

的工作方式如下:

Boolean("shubham")?x=2:x=3

所以,它给你x = 2;

这本书:

variable = boolean_expression ? true_value : false_value;
  

这基本上允许对变量依赖的条件赋值   关于boolean_expression的评估。如果这是真的那么   true_value被赋值给变量;如果它是假的,那么   false_value被赋值给变量。

这本书:

  

适用于Web Developers的专业JavaScript。3rd.Edition.Jan.2012

答案 1 :(得分:2)

是的,这是由于' if'背后的基础代码。 Javascript中的语句。它依赖于一种方法' ToBoolean'它将if语句的条件转换为布尔值。任何非空的字符串都将转换为true。因此,为什么你得到上述逻辑。