为什么在三元运算符中使用"0"会返回第一个值?

Ric*_*ton 16 javascript types ternary-operator

我正在玩JSconsole并发现一些奇怪的东西.值为"0"false

"0" == false
=> true
Run Code Online (Sandbox Code Playgroud)

false在三元组中使用的值返回第二个值

false ? 71 : 16
=> 16
Run Code Online (Sandbox Code Playgroud)

但是,在三元组中使用的值"0"等于false返回第一个值.

"0" ? 8 : 10
=> 8
Run Code Online (Sandbox Code Playgroud)

但是,如果您将其0用作值,则返回第二个值

0 ? 4 : 5
=> 5

0 == "0"
=> true
Run Code Online (Sandbox Code Playgroud)

我担心这对我没有意义.

xda*_*azz 18

非空字符串在条件语句,条件表达式和条件结构中被视为真值.

但是,当您将字符串与数字进行比较时,将进行==一些转换.

比较数字和字符串时,字符串将转换为 数字值.JavaScript尝试将字符串数字文字转换为数字类型值.首先,从字符串数字文字中导出数学值.接下来,将此值四舍五入为最接近的Number类型值.

并且==没有平等传递性质:

你不能说if a == b, b == c, then a == c.

一个例子是:

"0" == false // true
false == "\n" //true
Run Code Online (Sandbox Code Playgroud)

并猜测结果"0" == "\n"?是的,结果是false.

  • 这应该是投票和接受最多的答案. (2认同)

Zee*_*Zee 16

"0"是一个字符串长度的>0true.尝试

0 ? 8 : 10
Run Code Online (Sandbox Code Playgroud)

并看到.它会回来10.

==类型转换,因此当你这样做

"0" == false
Run Code Online (Sandbox Code Playgroud)

它返回true.当你这样做

0 == "0" //true
Run Code Online (Sandbox Code Playgroud)

当再次进行类型转换时,它也返回true.即使一个是a number而另一个是a,string它返回true.但是如果您使用===,则不会进行类型转换并0 === "0"返回false.

的一个很好的解释=====给出了这里.

来自文档:

==如果操作数不是同一类型,则相等运算符()转换操作数,然后应用严格比较.

如果操作数严格相等而没有类型转换,则identity运算符(===)返回true.

  • @ user4703663` ==`将在内部执行`type conversion`,所以使用`===`. (4认同)

Eva*_*les 6

我担心这是你应该使用的一个例子===- 普通旧的==执行类型转换.尝试

"0"===false
Run Code Online (Sandbox Code Playgroud)

  • @ TaoP.R.如果要以尊重三元运算符的方式将值转换为布尔值,请使用"!! value".如在`!!"0"=== true`. (3认同)
  • 但等等,"0"=== true`也会产生错误.我猜这可能不会直接回答这个问题. (2认同)