最近发现一个有趣的比较表达式:

[] == ![]   //结果是true

为什么会是true呢?好吧,先来看看下面这个:

[] == []    //结果是false

这个比较好理解,[]相当于一个数组实例,那么两个实例使用==来比较是不相等的.

现在回到上面的表达式,先看表达式右边的操作数:逻辑非运算![]的结果一定是布尔值,而[]是一个数组对象实例,经过逻辑非运算之后结果是false.那么就能知道其实上面的表达式可以写成

[] == false

当时就想,那么表达式就是将[]转换成布尔值做比较了,发现Boolean([])的值是true,true == false的结果当然就是false了,所以这个解释是不对的.

继续查资料,在javascript高级程序设计中关于==运算符的比较有这么一个规则:

如果比较运算符的操作数是布尔值的话,那么Javascript会将其转换成数字做比较,那么就能得出[] == false可以写成

[] == 0

此时可以知道,在进行比较时左边的操作数会被转成数字类型的数据,Number([])的结果是0,0==0的结果是true.于是乎就能得出结论,[] == ![]表达式比较的实质是进行数字的比较.

分享到: 微信 更多