zoukankan      html  css  js  c++  java
  • == 和 === 的区别!!!

    [] == ![] // 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

  • 相关阅读:
    P1182 数列分段`Section II` 二分
    洛谷 P1025 数的划分
    深浅拷贝
    数据的内置方法
    控制流程-if/while/for
    python的基本运算符
    花式赋值
    python的注释
    Python的垃圾回收机制
    变量与常量
  • 原文地址:https://www.cnblogs.com/-wch/p/10400898.html
Copyright © 2011-2022 走看看