几乎在所有语言中,都会有用于表示真假的布尔(Boolean)类型,并有真( true
)假( false
)两种值,JavaScript 也是如此。另外,当一些非布尔类型的值用在 if
判断, ? :
条件(三元)运算符,逻辑运算( &&
, ||
, !
)等语句中时,也会被转换为真(true)或是假(false)。如果该值被会转换为真,我们就认为该值是真值( truthy
值),反之,则认为该值为非真值或假值( falsy
值)。
JavaScript 中所有的 Falsy 值
在 JavaScript 有以下值为假值 (falsy):
值 |
类型
( |
类型
( |
注 |
---|---|---|---|
false
|
boolean | [object Boolean] | |
0
|
number | [object Number] |
或写做 +0
|
-0
|
number | [object Number] |
-0
与 0
不同,见 1
, 2
, 3
|
NaN
|
number | [object Number] | Not a Number |
""
|
string | [object String] |
或写做 ''
|
null
|
object | [object Null] | |
undefined
|
undefined | [object Undefined] | |
document.all
|
undefined | [object HTMLAllCollection] | 见 4 , 5 , 6 , 7 |
除了在上表中列出的值外,其余的所有值都被视做真值 (truthy)。如:
值 |
类型
( |
类型
( |
注 |
---|---|---|---|
"0"
|
string | [object String] | 字符串 0 |
"false"
|
string | [object String] | 字符串 false |
{}
|
object | [object Object] | 空对象 |
[]
|
object | [object Array] | 空数组 |
new Boolean(false)
|
object | [object Boolean] | Boolean 对象 |
new String("")
|
object | [object String] | String 对象 |
Infinity
|
number | [object Number] | |
function(){}
|
function | [object Function] |
Boolean 的显式转换
有时候我们需要将非布尔类型的值转换为布尔类型,那么可以用以下两种方法:
var foo; // 方法 1: // 使用 Boolean 函数来对变量进行类型转换。 // 使用此法将变量转换为布尔类型非常直观。 Boolean(foo) // 方法 2: // 使用 ! 运算符得到变量的布尔值的反,再次应用 ! 运算符可以得到变量对应的布尔值。 // 使用此法书写简洁,不过不如方法 1 来得直观。 !!foo
Truthy 值的相互比较 ( ==
, !=
)
不同 truthy 值之间的相互比较一般都是不相等的,如
true != 'true'
但 true
, 1
, "1"
, [1]
, [[1]]
之间是相等( ==
)的。
另有如下比较是相等的:
-1 == "-1" [true] == "true" [false] == "false" [true, false] == "true,false"
Falsy 值的相互比较 ( ==
, !=
)
在 Falsy 值中,我们有
-
false
,0
,-0
,""
是相互相等(==
)的,但与其他 falsy 值是不等(!=
,!==
)的。 -
null
和undefined
是相等(==
)的,与其他 falsy 值是不等(!=
,!==
)的。 -
NaN
与所有值,包括NaN
本身,都是不等(!=
,!==
)的。
false == 0 false == "" 0 == "" null == undefined
false != null false != undefined NaN != NaN NaN != false NaN != null NaN != undefined
Truthy 和 Falsy 值之间的相互比较 ( ==
, !=
)
只凭想象,似乎 truthy 值和 falsy 值相互比较的结果一定是 false,但是需要注意的是,此处是有例外的:
-
[]
是 Truthy 值,但与false
,0
,-0
及""
这些 Falsy 值相比时却是相等(==
)的。 -
[0]
是 Truthy 值,但与false
,0
,-0
这些 Falsy 值以及"0"
这一 Truthy 值相比时却是相等(==
)的。
!![] === true [] == false [] == 0 [] == -0 [] == ""
上文介绍列举了所有的 falsy 值和一些容易搞错的 truthy 值,也给出了将一个变量显式转换为布尔类型的方法,这些在日常开发中都属于基础知识。
除此之外,也给出了一些 truthy 值,falsy 值之间的相互比较的结果,这些内容在日常开发中用到的可能稍少一些,但是有了这些相应的了解之后,在处理一些奇怪特别的 bug 时,可能会带来一些帮助。
扩展阅读
参考文档
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。