Javascript 为什么要使用;0“;使用三元运算符返回第一个值?
我在玩JSconsole时发现了一些奇怪的东西。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
“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
的所有值)-这可能是更明确/可读/明显的方式。提及==
会使答案更有力。