// 阿里、百度、腾讯面试题
?位置怎么写才能输入true
var a = ?
console.log(a == 1 && a == 2 && a == 3)
遇到这种问题首先要了解赋值运算的隐式规则。
这道题中,原始如果a为原始类型,则会直接比较值,所以不能从原始类型的切入点去做,可以使用引用类型去写。
引用类型会调用valueOf去转化他,我们可以在对象中写一个valueOf去改变他的转化。
a = {
num = 1,
valueOf(){
return this.num++
}
}
这样的话,系统想转为原始类型,则会调用a对象中的valueOf方法,每一次调用都会先返回a的值,在让a++。这样就形成的第一调用返回值为1,第二次调用返回值为2……
如果让比较的数字不是这样连续的,可以在a对象中声明一个数组,数组里面写入这几个不规则数字,每次调用让数组的索引进行++操作