# 数据类型转换

# == 和 ===

== 仅检测值是否相等。类型不同时先转换类型再比较值。

=== 既要类型相同也要值相等。

# 如何让 a == 1 && a == 2 同时成立

var a = {
    value: 0,
    valueOf: function() {
        this.value++;
        return this.value;
    }
}

a;
// {value: 0, valueOf: ƒ}value: 0valueOf: ƒ ()__proto__: Object
a == 1;
// true
a;
// {value: 1, valueOf: ƒ}value: 1valueOf: ƒ ()__proto__: Object
a == 2;
// true
a;
// {value: 2, valueOf: ƒ}
a == 3;
// true
a;
// {value: 3, valueOf: ƒ}

== 先判断类型是否相同,如果不同先转换类型再判断值是否相等。

对象类型转换,调用 valueOf,每次调用 valueOf, 对象 a 的值自增 1,因此 a == 1 和 a == 2同时成立。

# 参考资料

神三元的博客

Last Updated: 6/5/2020, 9:50:33 PM