zoukankan      html  css  js  c++  java
  • 深度解析 []==[] 为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
    
  • 相关阅读:
    Mdate时间插件
    JS数组映射保存数据-场景
    基于微信的图片放大预览
    移动前端自适应布局适配解决方案
    JS数组映射详解
    回复与发表切换
    this应用详解-js原生
    淘宝虚拟产品自动发货软件
    搭建个人博客
    2019免杀大马
  • 原文地址:https://www.cnblogs.com/PasserByOne/p/12309251.html
Copyright © 2011-2022 走看看