【问题标题】: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。因此,为什么你会得到上述逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多