js中的[]==![]
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)