JavaScript中真值假值(布尔值)和相等操作符(“==”和“===”)中易错误区

JS中的true和false判定

在JavaScript中,true和false有些复杂。在大多数编程语言中,布尔值true和flase仅仅表示true/false,然而,在JS中,如"Jeffery"这样的字符串值,也可以被看作为true。

下面的表格能够帮助我们更好的理解true和false在JS中是如何转换的。

数值类型转换成的布尔值
undefinedfalse
nullfalse
booleantrue/false,和其它语言一样
number+0、-0和NaN都是false,其他的都是true
String如果字符串的长度是0(即为空字符串)就为false,其他都是true
Objecttrue

相等操作符(== & ===)

当使用这两个相等操作符时,可能会引起一些困惑。

使用==时,不同类型的值也可以被看作相等。这样的结果可能会让很多小伙伴都感到相当困惑。下面我用一张表格给大家分析一下不同类型的值相等操作符比较后的结果

类型(x)类型(y)结果
nullundefinedtrue
undefiendnulltrue
numberStringx == toNumber(y)
StringnumbertoNumber(x) == y
boolean任何类型toNumber(x) == y
任何类型booleanx == toNumber(y)
String/numberObjectx == toPrimitive(y)
ObjectString/numbertoPrimitive(x) == y

如果x和y是相同类型的,JS会比较他们的值或者对象值。其他没有列在这个表格里的结果都会返回false。

toNumber和toPrimitive的方法都是内部的,并且根据以下表格对其进行估值。

toNumber方法对不同类型返回的结果如下:

值类型结果
undefinedNaN
null+0
boolean如果是true就返回1,false就返回+0
number返回对应的值
String将字符串解析为数字。如果字符串中含有字母,返回NaN;如果由数字字符组成,转化为数字
ObjectNumber(toPrimitive(value))

这里解释一下toPrimitive方法。

当toPrimitive方法解析对象时,如果对象的valueOf方法的结果是原始值,返回原始值。如果对象的toString方法返回原始值,就返回这个值;其他情况都会返回一个错误。

介绍完 “==”符,那么 “ === ” 操作符呢?

=== 就简单多了,如果比较的两个值数据类型不同,结果会直接返回false。如果比较两个值类型相同,则按照下表进行判断

类型(x)类型(y)结果
numberx和y数值相同且不为NaNtrue
Stringx和y是相同的字符串true
booleanx和y都为true或者都为falsetrue
Objectx和y引用了同一个对象true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值