【前端面试题】a为何值时,if(a==1a==2)可进入判断
// a为何值 可以进入判断
let a = ?if (a == 1 && a == 2 && a == 3) {console.log("is true")
}

JS在比较时,会对变量进行隐式转换,即会将变量尝试转换为基本数据类型进行比较。

一旦进行转换的时候就会触发Symbol.toPrimitive方法,只需要重写此方法就能进入上述判断。

a = {i: 1,[Symbol.toPrimitive]() {return this.i++},
}

Symbol.toPrimitive

Symbol.toPrimitive属性(用作函数值)的帮助下,一个对象可被转换为原始值。该函数由字符串参数 hint 调用,目的是指定原始值转换结果的首选类型。 hint 参数可以是"number"、"string" "default" 中的一种。

const obj = {[Symbol.toPrimitive](hint) {if (hint === "number") {return 11111}},
}
console.log(+obj) // 11111