深度解析 []==[] 为false ![]==[] 为true

PS: 可以参考《你不知道的JavaScript》中卷 第一部分 第四章节

博客: https://blog.csdn.net/magic_xiang/article/details/83686224

 

============= 分割线 ================

[]==[]  false 
[]=={}  false

typeof [] =="object"
typeof {} =="object"

两者同一类型,但是 引用类型的存储时 是一个指针指向一个开辟的内存空间 第一个开辟一个单独的空间 第二个也开辟了单独的空间
就行两个一模一样的房子,装修什么都一样, 但是一个是张三家,一个是李四家。 你说两个家是一个家 那是不对 空间不一样


![]==[]


typeof ![]=='boolean'  布尔型
typeof []=="object"    引用类型


![]==[]  true;


javascript 中不同类型比较时候 会强制转换成相同类型


两个类型不一样 那么都有转换为值类型   ![]==false    number[false]==0     number([])==0;   ![] 是一个整体,
如果要扯淡 比较的时候,  !优先级最高 ,隐式转换 其次 ,== 最后。


所以  ![]==[]  的计算顺序是  ![] =》  fasle     不同类型要比较 就是 number(false)=0      
number([])=0    0==0  就是true

 

 


疑问:

  if([]){

    console.log(121)

  }

他执行了 输出121 false==[]   结果 不是 true 吗   

 

问题来了

既然是[]==false为true 不应该执行啊


解析一下。

 传递单个参数 比较时  


if(单个对象){ 
只要不等于  
 null(引用类型值得比较) undefined(其它) 0 值类型   false (布尔类型)
此处都执行
}
  而 if 单个参数比较 只做同类型比较,不会有隐试 转换的问题。所以 

 


if(false){  因为等于false不执行}


if([]){
   []不等于 null 所以执行
}

 

参考一些情况----------

"0" == null;      // false
"0" == undefined;    // false
"0" == false;      // true  -- 晕! // false
"0" == NaN;       // false
"0" == 0;        // true
"0" == "";       // false
false == null;      // false
false == undefined;  // false
false == NaN;      // false
false == 0;        // true  -- 晕! // false
false == "";       // true  -- 晕! // false
false == [];       // true  -- 晕! // false
false == {};       // false
"" == null;        // false
"" == undefined;      // false
"" == NaN;         // false
"" == 0;          // true  -- 晕! // false
"" == [];         // true  -- 晕! // false
"" == {};         // false
0 == null;         // false
0 == undefined;      // false
0 == NaN;         // false
0 == [];          // true  -- 晕! // false
0 == {};          // false

 

posted @ 2020-02-14 19:54  林中有风  阅读(530)  评论(0编辑  收藏  举报