【问题标题】:why this code is not working as expected?为什么这段代码没有按预期工作?
【发布时间】:2018-07-20 21:22:10
【问题描述】:
let x;
console.log("shubham" == true ); // gives false
"shubham" ? x=2 : x=3;
console.log(x); // gives 2, so "shubham" must be true?
//我希望得到value 3
【问题讨论】:
标签:
javascript
boolean
ternary-operator
【解决方案1】:
当你使用这个时:
"shubham" == true
比较前,true变为1,所以实际比较的是
"shubham" == 1
所以,它给出了错误;
书:
执行转换时,等于和不等于运算符遵循
这些基本规则:
如果操作数是布尔值,则将其转换为
检查相等性之前的数值。值 false 转换
为 0,而 true 的值转换为 1。
如果一个操作数是字符串而另一个是数字,请在检查相等性之前尝试将字符串转换为数字。
当你使用这个时:
"shubham" ? x=2 : x=3;
像这样工作:
Boolean("shubham")?x=2:x=3
所以,它给你 x=2;
书:
variable = boolean_expression ? true_value : false_value;
这基本上允许对变量进行条件赋值,具体取决于
关于布尔表达式的评估。如果是真的,那么
true_value 分配给变量;如果是假的,那么
false_value 被赋值给变量。
书:
面向 Web 开发人员的专业 JavaScript.3rd.Edition.Jan.2012
【解决方案2】:
是的,这是由于 Javascript 中的“if”语句背后的底层代码。它依赖于将 if 语句的条件转换为布尔值的方法“ToBoolean”。任何非空字符串都将转换为 true。因此,为什么你会得到上述逻辑。