这是一道经典的题目,考察的主要是js的类型隐式转换。
分析
一拿到这道题,我们先考虑到的应该是a应该是什么类型,在a==**的时候发生了什么?再去考虑a应该等于什么。
首先,如果a是一个对象,那在执行a==的时候首先会去先执行valueOf方法,如果没有value方法,就会去执行toString方法。因此我们可以改写a对象的toString方法:
let a = {
i : 1,
toString: function(){
return a.i++
}
}
if(a==1&&a==2&&a==3){
console.log('success')
} else {
console.log('fail')
}
然后,我们还可以联想到,如果a是一个数组,在数组转换成字符串的时候,会去实行数组的join方法,那我们改写一下join方法不就行了,看实现:
let a = [1,2,3];
a.join = a.shift;
if(a==1&&a==2&&a==3){
console.log('success')
} else {
console.log('fail')
}
如果各位大牛还有其他的好方法,欢迎评论里留言,一起学习,一起进步