# 数据类型转换
# == 和 ===
== 仅检测值是否相等。类型不同时先转换类型再比较值。
=== 既要类型相同也要值相等。
# 如何让 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同时成立。