JavaScript && ==和===

59 阅读1分钟

==,等于操作符

  • 在比较中先进行类型转换(隐式转换),再确定操作数是否相等;
  • 隐式转换规则:
    • 两个都是简单类型,字符串和布尔值都会转换成数值;
    let result1 = (true == 1); // true
    
    let result1 = ("55" == 55); // true
    
    • 简单类型与引用类型比较,对象转化成其原始类型的值;
    let obj = {valueOf:function(){return 1}}
    let result1 = (obj == 1); // true
    
    • 两个都是引用类型,则比较它们是否指向同一个对象;
    let obj1 = {name:"xxx"}
    let obj2 = {name:"xxx"}
    let result1 = (obj1 == obj2 ); // false
    
    • null和undefined相等
    let result1 = (null == undefined ); // true
    
    • 存在NAN则返回false;
    let result1 = (NaN == NaN ); // false
    

===,全等操作符

  • 只有两个操作数在类型不转换的前提下相等才会返回true
  • 比较规则:
    • 类型相同,值也需相同
    let result1 = ("55" === 55); // false,不相等,因为数据类型不同
    let result2 = (55 === 55); // true,相等,因为数据
    
    • undefined和null与自身严格相等
    let result1 = (null === null) //true
    let result2 = (undefined === undefined) //true
    let result2 = (undefined === null) //false