首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么=false结果是true?

当有一个这样的表达式。

if(false){}

JS在解析这个表达式时,会先将布尔值false转换成数据类型0,然后在执行。明白这一点就好搞了,今天我们要聊的就是JS中隐式类型转换的问题。

先来一起看一下下面这些表达式,是否都能理解。

如果你对上面这些表达式的输出还有一些疑虑,那么今天看完篇文章也许你就会明白这其中的原由了。

讲解一个例子:

一、[]和false怎么比较相等与不相等?

这两个中,一个是对象,一个是布尔值,按原则,类型不同时,需要转换再比较。

然而,在JS中规定如果有布尔值时,只能转换成数字进行比较。(有同学可能会问,为什么不转成字符串来进行比较,转成字符串就是'false'/'true',比较就没什么意义了 )

所以上面比较表达式就变成了[]和0的比较。

二、[]和0怎么比较相等与不相等?

在原值和非原值进行比较的时候,需要把非原值转换成原值才可以进行比较。

而你可以认为在JS中每一个对象都有一个方法toString,用这个方法可以将对象转成可比较的原值。

先来做实验:

从上面的运行结果可以看出,数组的toString方法相当于就是join方法。

所以接下来的问题就是怎么比较‘’和0。

三、‘’和0怎么比较相等和不相等

然而,这是一个字符串和数字的比较,会先把字符串转换成数字再来进行下一步。

使用的方法是Number,来做个实验:

可能有同学会有疑问,为什么不把数字转换成字符串?这个可能是从多方面的来考虑的,数字更易处理,容错性会更高一点。

所以上面这个表达就变成0 == 0 ,自然就输出true。

总结一下转换思路:

1. [] == false

2. [] == 0

3. '' == 0

4. 0 == 0

现在我们来回忆一下某个比较表达式:NaN !== NaN这个表达式为什么成立?

上面转换第三步,字符串和数字比较的时候,会将字符串转换成数字来比较。NaN是一个数字类型。

如果NaN等于自身的话,那'abc' == NaN这个表达式就会是true,天下大乱。

文章最后,给大家展示另外两个关于null的表达式比较。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190427A0286P00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券