• == 和 === 的区别!!!


    [] == ![] // is true

    上面的判断为什么会是true?

    先看下 == 跟 ===

    == 是先转换类型再比较相等

    === 是只比较大小不转换类型

    对于 == 来说,如果对比双方的类型不一样的话,就会进行类型转换

    简单来说的顺序就是:

    1. 首先会判断两者类型是否相同。相同的话就是比大小了
    2. 类型不相同的话,那么就会进行类型转换
    3. 会先判断是否在对比 null 和 undefined,是的话就会返回 true
    4. 判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number
    5. 判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断
    6. 判断其中一方是否为 object 且另一方为 stringnumber 或者 symbol,是的话就会把 object 转为原始类型再进行判断

    综上所述,再去看上面的操作[] == ![] 

    1、首先根据运算符优先级 ,! 的优先级是大于 == 的,所以先会执行 ![]

    2、其次对于非布尔值的数据,取反运算符会自动将其转成布尔值。规则是,以下六个值取反后为true,其他值取反后都为false。

    undefined
    null
    false
    0(包括+0和-0)
    NaN
    空字符串('')

    3、现在变成了[] ==false; 也就是相当于[] == 0;
    4、现在看[],[]是object,则需要转换成原始类型。而空数组是没有valueof()的方法的。所以使用tostring();[].tostring()  ==> '' //空字符串

    5、然后如果遇到字符串则转化成Number类型。然后就出现了Number('')  ==> 0 //现在也就是说[] == 0 

    现在0 == 0 等式成立 则为true;

    这时候的全等(===)终于要出场了。
    你看相等那个啥傻帽。罗里吧嗦。在我这里,就必须左右两边类型跟数值全相等,不然我就给你false!!!

    哈哈哈  这么看来的确是全等要简单很多。在项目中,为了保证代码的严格性,推荐还是用全等(===)作比较,当然 == 也是可以的。但是要注意判断的时候需要判断类型吗?

    ok!打完收工。谢谢大家观看!有问题大家可以留言哦~

    资料网站:1、掘金小册

         2、https://blog.csdn.net/magic_xiang/article/details/83686224

  • 相关阅读:
    WrapPanel虚拟化
    关于Windows执行cmd命令的坑之一
    C# .Net 获取当前电脑上的可移动磁盘
    关于WPF中资源字典的内存优化
    WPF获取ListBox、ListView之类列表的ScrollViewer实例
    C#事件与委托 yangan
    系统自动登录设置(适用所有操作系统) yangan
    Oracel小知识记录 yangan
    使用avaScript获取Url中的指定参数值 yangan
    Win7下破解ArcGIS 9.3方法 yangan
  • 原文地址:https://www.cnblogs.com/-wch/p/10400898.html
Copyright © 2020-2023  润新知