JS中的true和false判定
在JavaScript中,true和false有些复杂。在大多数编程语言中,布尔值true和flase仅仅表示true/false,然而,在JS中,如"Jeffery"这样的字符串值,也可以被看作为true。
下面的表格能够帮助我们更好的理解true和false在JS中是如何转换的。
数值类型 | 转换成的布尔值 |
---|---|
undefined | false |
null | false |
boolean | true/false,和其它语言一样 |
number | +0、-0和NaN都是false,其他的都是true |
String | 如果字符串的长度是0(即为空字符串)就为false,其他都是true |
Object | true |
相等操作符(== & ===)
当使用这两个相等操作符时,可能会引起一些困惑。
使用==时,不同类型的值也可以被看作相等。这样的结果可能会让很多小伙伴都感到相当困惑。下面我用一张表格给大家分析一下不同类型的值相等操作符比较后的结果
类型(x) | 类型(y) | 结果 |
---|---|---|
null | undefined | true |
undefiend | null | true |
number | String | x == toNumber(y) |
String | number | toNumber(x) == y |
boolean | 任何类型 | toNumber(x) == y |
任何类型 | boolean | x == toNumber(y) |
String/number | Object | x == toPrimitive(y) |
Object | String/number | toPrimitive(x) == y |
如果x和y是相同类型的,JS会比较他们的值或者对象值。其他没有列在这个表格里的结果都会返回false。
toNumber和toPrimitive的方法都是内部的,并且根据以下表格对其进行估值。
toNumber方法对不同类型返回的结果如下:
值类型 | 结果 |
---|---|
undefined | NaN |
null | +0 |
boolean | 如果是true就返回1,false就返回+0 |
number | 返回对应的值 |
String | 将字符串解析为数字。如果字符串中含有字母,返回NaN;如果由数字字符组成,转化为数字 |
Object | Number(toPrimitive(value)) |
这里解释一下toPrimitive方法。
当toPrimitive方法解析对象时,如果对象的valueOf方法的结果是原始值,返回原始值。如果对象的toString方法返回原始值,就返回这个值;其他情况都会返回一个错误。
介绍完 “==”符,那么 “ === ” 操作符呢?
=== 就简单多了,如果比较的两个值数据类型不同,结果会直接返回false。如果比较两个值类型相同,则按照下表进行判断
类型(x) | 类型(y) | 结果 |
---|---|---|
number | x和y数值相同且不为NaN | true |
String | x和y是相同的字符串 | true |
boolean | x和y都为true或者都为false | true |
Object | x和y引用了同一个对象 | true |