==和=== 相关题目

199 阅读1分钟

==允许在相等比较中进行强制类型转换

===不允许

== 运算符的比较方式

比较x==y

  1. 若type(x)和type(y)相同

    a. 若type(x)为Undefined,返回true

    b. 若type(x)为Null, 返回true

    c. 若type(x)为Number,则:

    • 若x为NaN, 返回false
    • 若y为NaN,返回false
    • 若x和y数值相等,返回true
    • 若x=-0,y=+0,返回true
    • 若x=+0,y=-0,返回true
    • 其他返回false

    d. 若type(x) 为String,则当且仅当x和y为完全相等的字符序列时返回true,否则返回false

    e. 若type(x)为 Boolean,则x和y同为true或同为false时返回true,其他返回false

    f. 若type(x)为Object时,则引用同一个对象时返回true,否则返回false

  2. 若x为undefined,y为null,返回true,反之亦成立。

  3. 若type(x)为Number,type(y)为String,则比较 x==Number(y)

  4. 若type(x)为String,type(y)为Number,则比较Number(x)==y

  5. 若type(x)为Boolean,则比较Number(x)==y

  6. 若type(y)为Boolean,则比较x==Number(y)

  7. 若type(x)为String,type(y)为Object,则比较x==y.toPrimitive()

  8. 若type(x)为Number,type(y)为Object,则比较x==y.toPrimitive()

  9. 若type(x)为Object,type(y)为String,则比较x.toPrimitive()==y

  10. 若type(x)为Object,type(y)为Number,则比较x则比较x.toPrimitive()==y

  11. 返回false

toPrimitive,就是对象转成基本类型的方式,遇到隐式转换 会先找valueOf(),valueOf没有则找toString();

String('11') == new String('11');
String('11') === new String('11');

这个题的答案是 true 和 false。因为new String()返回的是一个对象,而==的时候会相等是因为,运行的是 String('11') == new String('11').toString()