美文网首页
JavaScript非严格相等==(相等操作符)

JavaScript非严格相等==(相等操作符)

作者: ChrisFang | 来源:发表于2019-03-22 23:10 被阅读0次

    相等操作符是比较两个值是否相等,在比较前会将两个值转换为相同的类型,‘==’的两边都有可能被转换,最终的比较方式跟全等操作符(===)一致,相等操作符满足交换律

    类型 Undefined Null Number String boolean Object
    Undefined true true false false false Isfalsy(B)
    Null true true false false false Isfalsy(B)
    Number true true A===B A===ToNumber(B) A===ToNumber(B) A=== ToPrimitive(B)
    String true true ToNumber(A) === B A===B ToNumber(A)===ToNumber(B) ToPrimitive(B)===A
    Boolean false false ToNumber(A) === B ToNumber(A)===ToNumber(B) A===B ToPrimitive(B)===ToPrimitive(A)
    Object false false ToPrimitive(A) === B ToPrimitive(A)===B ToPrimitive(B)===ToPrimitive(A) A===B

    上面的表格的意思就是两两互相比较:
    ToNumber(A)的意思就是将A转换为数字,这与+A运算符(单目运算符+)的效果相同。
    ToPrimitive(A)通过尝试调用 A 的A.toString()A.valueOf()方法,将参数 A 转换为原始值(Primitive)。

    一般而言,根据 ECMAScript 规范,所有的对象都与 undefinednull 不相等。但是大部分浏览器允许非常窄的一类对象(即,所有页面中的 document.all 对象),在某些情况下,充当效仿 undefined 的角色。相等操作符就是在这样的一个背景下。因此,IsFalsy(A) 方法的值为 true ,当且仅当 A 效仿 undefined。在其他所有情况下,一个对象都不会等于 undefinednull

    var num = 0;
    var obj = new String("0");
    var str = "0";
    var b = false;
    
    console.log(num == num); // true
    console.log(obj == obj); // true
    console.log(str == str); // true
    
    console.log(num == obj); // true
    console.log(num == str); // true
    console.log(obj == str); // true
    console.log(null == undefined); // true
    
    // 两者都是false  除了极少数的情况
    console.log(obj == null); 
    console.log(obj == undefined);
    

    除了一个类型,每个值也有一个固有的布尔值,通常称为truthy或falsy。
    关于falsy ,truthy 可以这样理解:

    if (value) {
      // value is truthy
    }
    else {
      // value is falsy
      // it could be false, 0, '', null, undefined or NaN
    }
    

    有些开发者认为,最好永远都不要使用相等操作符。全等操作符的结果更容易预测,并且因为没有隐式转换,全等比较的操作会更快。

    相关文章

      网友评论

          本文标题:JavaScript非严格相等==(相等操作符)

          本文链接:https://www.haomeiwen.com/subject/yrqdvqtx.html