• js在进行比较时进行的隐式转换


    js中不同的数据类型之间的比较转换规则

    1.对象和布尔值比较

      对象和布尔值进行比较时,对象先转换为字符串,然后在转换为数字,布尔值直接转换为数字

      [] == true; // false [] 转换为'',然后转换为数字0,true转换为数字1,所以为false
    

    2.对象和字符串比较

    对象转换为字符串,然后两者在进行比较

    [1, 2, 3] == '1,2,3' ; // true  
    
    // [1, 2, 3] 转化为 '1,2,3' ,然后再和 '1,2,3' 比较,结果true
    

      

    3.对象和数字比较

    对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字比较

    [1] == 1;    // true
    
    // 对象先转换为字符串在转换为数字,二者在比较 [1] => '1' => 1
    

      

    4.字符串和数字比较

    字符串和数字进行比较时,字符串转换成数字在比较

    '1' == 1;         // true
    

      

    5.字符串和布尔值比较

    字符串和布尔值进行比较时,二者全部转换成数值再比较

    '1' == true;            // true
    
    '2' == true;            // false
    

      

    6.布尔值和数字比较

    布尔值和数字进行比较时,布尔转换为数字,二者比较。

    true == 1;        // true
    

      

    来个简单的图

     如图,任意两种类型比较的时候,如果不是同一个类型比较的话,则按如图方式进行相应类型转换,

      如对象和布尔比较的话:对象=>字符串=>数值     布尔值=>数值

    看一个有趣的题

    [] == false;
    
    ![] == false;


    // 这两个结果都是true,第一个是:对象=>字符串=>数值0 false 转换为数字0
    // 第二个前边多一个!,则直接转换为布尔值再取反,转换为布尔值时,空字符串 '', NaN, 0, null, undefined 这几个外返回的都是true,
    // 所以 ![] 这个 []=> true 取反 false,所以 ![]== false 为true

      

    undefined == null // true undefined和null比较返回true,二者和其他值比较返回false
    
    Number(null) // 0
    

      

     

  • 相关阅读:
    委托学习小记(1)
    C# 对XML的 创建、查询
    C#多线程学习(六) 互斥对象
    C#多线程学习(二) 如何操纵一个线程
    C#多线程学习(四) 多线程的自动管理(线程池)
    16/11/22_plsql
    写日志
    内存检测
    开源
    vs2005 远程调试。
  • 原文地址:https://www.cnblogs.com/zhangning187/p/yszhzn187211130.html
Copyright © 2020-2023  润新知