首页 > 技术文章 > js中的[]==![]

websir 2015-03-31 15:26 原文

alert(![] == [])
alert([]==[])
alert([]==false)
alert([]==true)

  

昨天某童鞋问我这问题。。  经过百度 谷歌查资料折腾一番。 终于屡清楚了

 

一个一个来;首先第一个

 

alert(![] == [])//true

 

为什么自身和自身不想等呢?

 

首先抄一段==和===的说明:

 

相等操作符== and ===

         相等操作符会对操作值进行隐式转换后进行比较

         1、布尔值、字符串和数值进行比较,转换为数值之后在进行比较 

         2、null与undefined是相等的

         3、与NaN判等,返回false

         TIPS: == 和 === 区别

          1、对于Array,Object等高级类型,两者无区别:进行“地址”比较

          2、对于基础类型==判断值是否相等,===不仅判断值,而且判断类型是否相等。

          3、基础类型与高级类型有区别:==将高级类型转化为基础类型,进行“值”比较,===直接返回false

 

 

1、Boolean([]) //true  空数组转换为布尔值是true

2、优先级问题: !运算符的优先级 高于==运算符

3、==运算符会进行隐式转换数值(也就是在比较前会把==两边的值转换成number)

SO !

上面的可以这样理解

先进行!运算          Boolean(![]) //false

然后进行==运算    false==[]  //比较前会转换两边数值为Number([])//0 

最终公式

 

alert(  Number(Boolean(![]))==Number([])  ) //结果为true

 

------------------------切--------------------------------------------

 

第二个 []==[]

==操作符 

对于Array,Object等高级类型,两者无区别:进行“地址”比较

var a = [1,2,3];
var b = [1,2,3];
alert(a==b) //弹出false 因为地址不想等 和 []==[]同理

地址比较哪肯定就是不想等咯

 

后面2个参考:==将高级类型转化为基础类型

alert([]==false)
alert([]==true)

推荐阅读