zoukankan      html  css  js  c++  java
  • js相等(==)与全等(===)的区别

    相等是“==”,而全等是“===”,相等和全等的区别,总结就是:

    • 相等 ==: 先转换类型再比较
    • 全等 ===:直接比较,不转换类型,只要是类型不同就不相等,类型相同的看值是否相等
    • Object.is(value1,value2):ES6 提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

    Object.is与“===”不同之处只有两个:一是+0不等于-0,二是NaN等于自身。

    例如:

    1.  
      55 == "55" // true
    2.  
      55 === "55" // false

    分析代码,对于相等来说”55”会被转换成number类型的55,所有比较后相等,但是对于全等来说,”55”不会被转换,由于类型不同(一个number一个String)所有比较之后为false,所以对于全等来说,必须保证数据类型也相同

    相等转换规则:

    • 对于boolean值,false转换为0,true转换为1

          代码为:

    1.  
      true == 1 // true
    2.  
      true == 2 // false
    • 如果一个操作数是字符串,另一个是数值,比较之前将字符转换为数值

          代码为:

    "5" == 5  // true
    • null 与 undefined比较是相等的,而且对比之前不能将null与undefined转换成其他值

          代码为:

    1.  
      null == undefined // true
    2.  
      null == 0 // false
    3.  
      undefined == 0 // false
    • 如果两个操作数是对象,那么比较他们是不是指向同一个对象。

           代码为:

    1.  
      var a = {}
    2.  
      var b =a
    3.  
      a == b // true
    4.  
      c = {}
    5.  
      a == c // false
    • 有一个操作符为NaN就返回false

           代码为:

    1.  
      NaN == NaN // false
    2.  
      5 = NaN // false
    3.  
      NaN === NaN //false
    • 如果其中一方是否为 object 且另一方为 string、number 或者 symbol , 将 object 转为原始类型再进行判断
    1.  
      let person1 = {
    2.  
      age: 25
    3.  
      }
    4.  
      let person2 = person1;
    5.  
      person2.gae = 20;
    6.  
      console.log(person1 === person2); //true,注意复杂数据类型,比较的是引用地址
    7.  
       
    • new Number()是一个内置的函数构造函数。 虽然它看起来像一个数字,但它并不是一个真正的数字:它有一堆额外的功能,是一个对象。当我们使用==运算符时,它只检查它是否具有相同的值,所以a和b是相等的;然而,当我们使用===操作符时,类型和值都需要相等,b和a与c的类型不一样,所以不等。

    ==会引发隐式类型转换,右侧的对象类型会自动拆箱为Number类型。

    1.  
      let a = 3;
    2.  
      let b = new Number(3);
    3.  
      let c = 3;
    4.  
       
    5.  
      console.log(a == b); //true
    6.  
      console.log(a === b); //false
    7.  
      console.log(b === c); //false

    思考:[] == ![]

    我们来分析一下: [] == ![] 是true还是false?

    1. 首先,我们需要知道 ! 优先级是高于 == (更多运算符优先级可查看: 运算符优先级)
    2. ![] 引用类型转换成布尔值都是true,因此![]的是false
    3. 根据上面的比较方法,其中一方是 boolean,将 boolean 转为 number 再进行判断,false转换成 number,对应的值是 0.
    4. 根据上面比较方法,有一方是 number,那么将object也转换成Number,空数组转换成数字,对应的值是0.(空数组转换成数字,对应的值是0,如果数组中只有一个数字,那么转成number就是这个数字,其它情况,均为NaN)
    5. 0 == 0; 为true

    原文:https://blog.csdn.net/m0_37686205/article/details/88554346?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160965774416780277046963%252522%25252C%252522scm%252522%25253A%25252220140713.130102334.pc%25255Fall.%252522%25257D&request_id=160965774416780277046963&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-19-88554346.pc_search_result_cache&utm_term=JS%20%E4%B8%AD%20==%20%E5%92%8C%20===%20%E5%8C%BA%E5%88%AB%E6%98%AF%E4%BB%80%E4%B9%88

  • 相关阅读:
    SpringCache使用
    SpringDataRedis使用
    Spring data jpa使用
    webpack的安装
    Vue基本使用
    Swagger使用
    gulp常用插件之gulp-notify使用
    gulp常用插件之gulp-beautify使用
    gulp常用插件之gulp-uglify使用
    gulp常用插件之gulp-size使用
  • 原文地址:https://www.cnblogs.com/coder-ahao/p/14225595.html
Copyright © 2011-2022 走看看