什么是JavaScript的是“falsey”的值,这意味着它们评估为假像表情if(value),value ?和!value?
JavaScript中的假值
false
0
-0
0.0
0x0
document.all
typeof
undefined
if (document.all)
ToBoolean
!value,value ? ...
与==(宽松平等)的比较
值得一谈的是falsy值与的松散比较==,这会使用ToNumber()并可能由于潜在的差异而引起混淆。它们有效地分为三类:
==
ToNumber()
false, 0, -0, "", ''
false == ""
'' == 0
4/2 - 2 == 'some string'.slice(11)
null, undefined
ull == undefined
undefined != false
typeof null
'object',null
===
NaN != NaN
NaN !== NaN
NaN !
NaN != null
false === false
这就是为什么许多开发人员和许多样式指南(例如standardjs)偏爱===且几乎从不使用的原因之一==。
真正的价值观 == false “ Truthy”仅表示JavaScript的内部ToBoolean函数return true。Javascript的应用怪癖要知道的(和另一个很好的理由,更喜欢===了==):这是可能的值是truthy(ToBoolean回报true),而且还== false。
true
== false
你可能会认为这if (value && value == false) alert('Huh?')是不可能发生的逻辑上的可能性,但对于以下情况,它将是可能的:
if (value && value == false) alert('Huh?')
"0"
'0'
42 == "42"
0 == false
"0" == 0
"0" == false
new Number(0)
new Boolean(false)
which == false
0 .toExponential()
[]
[[]]
[0]
一些更真实的价值
这些只是一些人可能期望是虚假的价值观,但实际上是真实的。
-1
' '
" "
"false"
'null'
来自的任何内容typeof,总是返回非空字符串,例如:
typeof null('object' 由于长期存在的错误/怪癖而返回字符串)
'object'
typeof undefined
'undefined'
任何对象(document.all浏览器中的“恶意违反”除外;请记住,null尽管有typeof其他建议,但这实际上不是对象)。包含:
{}
function(){}
() => {}
Error
new
true,1,"1"
[1]