JavaScript有一道面试题是:写一个方法让a==1&&a==2&a==3返回值为真值。
很多小伙伴看到后都会感到蒙圈,这都是什么呀,变量值不是只能是一个么?为什么能同时等于三个值呀?
其实,这道面试题是在考察你对valueOf()获取原始值方法。
下面我来看两种方式
第一种:
var a={
i:1,
valueOf:function(){
return this.i++;
}
}
if (a==1&&a==2&&a==3) {
console.log("success");
}
这里的方法是将对象object的valueOf进行重写,每次返回值为a的i值,同时进行自增加,这样每进行一次对比都会获取a的原始值,其实就是调用valueOf方法获得值进行对比,每次调用都会让对应a的i值进行增加,这样就可以让a与1、2、3同时相等。
var aᅠ = 1;
var a = 2;
var ᅠa = 3;
if(aᅠ==1 && a== 2 &&ᅠa==3) {
console.log("Why hello there!");
}
第二种方法是利用特殊的空格来区分不同的变量,看上去都是a,但是是不同的三个变量,一个是aᅠ,一个是a,一个是ᅠa;这样就可以让三个看起来都是a的变量等于1、2、3
总结下来就是你只需要理解valueOf就能实现了