Javascript 为什么要使用;0“;使用三元运算符返回第一个值?

Javascript 为什么要使用;0“;使用三元运算符返回第一个值?,javascript,types,ternary-operator,Javascript,Types,Ternary Operator,我在玩JSconsole时发现了一些奇怪的东西。“0”的值为false "0" == false => true false的值在三元中使用时返回第二个值 false ? 71 : 16 => 16 0 ? 4 : 5 => 5 0 == "0" => true 但是,当在三值中使用时,值“0”等于false,返回第一个值 "0" ? 8 : 10 => 8 但是,如果使用0作为值,它将返回第二个值 false ? 71 : 16 => 16 0

我在玩JSconsole时发现了一些奇怪的东西。
“0”
的值为false

"0" == false
=> true
false
的值在三元中使用时返回第二个值

false ? 71 : 16
=> 16
0 ? 4 : 5
=> 5

0 == "0"
=> true
但是,当在三值中使用时,值
“0”
等于
false
,返回第一个值

"0" ? 8 : 10
=> 8
但是,如果使用
0
作为值,它将返回第二个值

false ? 71 : 16
=> 16
0 ? 4 : 5
=> 5

0 == "0"
=> true
恐怕这对我来说没有意义

“0”
是一个长度为
>0
的字符串,它是
true
。试一试

0 ? 8 : 10
看看。它将返回
10

=
进行类型转换,因此在进行转换时

"0" == false
0 == "0" //true
它返回
true
。当你这样做的时候

"0" == false
0 == "0" //true
当类型转换再次发生时,它也返回true。即使一个是
数字
,另一个是
字符串
,它也会返回true。但是如果使用
==
则不会执行类型转换,
0===“0”
将返回
false

==
&
===
的一个很好的解释是

相等运算符(
==
)转换不同类型的操作数,然后应用严格比较

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


恐怕这就是为什么您应该使用
==
的一个示例-普通的旧
==
执行类型转换。试一试

"0"===false

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

但是,当您将字符串与具有
==
的数字进行比较时,会发生一些转换

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

=
不具有相等的传递属性:

你不能说
如果a==b,b==c,那么a==c

例如:

"0" == false // true
false == "\n" //true

并猜测
“0”=“\n”
的结果?是的,结果是
false

JavaScript导致大量WTF

查看YouTube上的“Javascript WTF”

本质上,您正在请求从字符串到布尔值的转换

这被定义为“字符串不为空”

而您假设javascript在字符串中碰巧包含一个数字时执行string->int->boolean

这是明智的。但是这些自动转换会导致编程错误,这就是为什么我更喜欢大型项目的类型安全语言(带有编译时类型检查)

为了好玩,请尝试以下方法:

("0" * 1) ? 71 : 16
("0" + false) ? 71 : 16

“0”
是一个非空字符串,即不是假值。那么,在Javascript中使用比较时,为什么“0”等于假值是没有意义的<代码>'==0,
0==0'
,但是
'''0'
。不要假设因为
x==y
x
y
的行为在远程是相同的。这是Javascript最容易混淆的特性之一。至少有四种(!)情况下,值可以
==false
但不能是“false”。我一直在为这个问题准备一份参考指南。我想我已经记录了所有与虚假相关的怪癖和怪癖。。。如果我有遗漏,请评论@代码混乱,你错了:
!!“0”
的计算结果为
true
。同意了
=
,但是。一个非零长度的字符串。当我键入
时,“0”==false
我得到了true@user4703663
=
将在内部执行
类型转换
,因此使用
==
@user4703663对这两种方法都给出了很好的解释。但是请稍候,
“0”==true
也会产生false。我想这可能不能直接回答这个问题。如果您想将一个值转换为一个布尔值,并考虑它在三元运算符中的作用,请使用
!!值
。如
!!“0”==true
@Random832将
Boolean()
完全等效吗?(即,
Boolean(x)==!!x
对于
x
的所有值)-这可能是更明确/可读/明显的方式。提及
==
会使答案更有力。