javascript - []==![]等于true,能解释下吗?

查看:93
本文介绍了javascript - []==![]等于true,能解释下吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

[]==![]
true
[]==false
true
对象的布尔值不是true吗?为何这里==flase还是true?
数组是对象类型,对象不等于对象,即使两个都是空的,这样去理解第一个正确吗?

解决方案

之前写得比较简单,再补充点,如果有错误请指正。


说说我的理解吧

首先要明白=====的区别
==是判断值是否相等,===判断值及类型是否完全相等。
前者会自动转换类型,后者不会。所以在判断[]==![]会转换两者的类型。

typeof []  //Object
typeof ![] //Boolean

两者类型不同,比较的时候会尝试将Boolean转换为Number,而Object转换成Number或String,取决于另外一个对比量的类型。这里因为比较的对象是Boolean,所以也会转化为Number。

console.log(![]) //false 因为任何对象Boolean值都为true,所以![]就为false

Boolean与Number的转换,true为1,false为0,所以![]在比较的时候转换为Number值为0。

[]是很明显的空对象了。
对于对象,当将其转换成Number时,会先调用对象的valueOf()方法及toString(),返回对象的原始值,再进行转换。最终[]会返回""空字符串,""会转化Number值为0。
最后0==0所以两者以比较就为true了

这篇关于javascript - []==![]等于true,能解释下吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆