首先来看这道题
问var a等于什么值得时候
能打印出“打印成功”
if(a==1&&a==2&&a=3){
console.log('打印成功');
}
方法一:利用toString方法。
关于‘==’与‘===’的区别,‘===’是值相等,类型也相等,而‘==’只需要值相等就可以,在进行比较中,toString()方法的原理:
1.当对象==字符串,对象.toString()方法会先把对象转化成字符串,然后比较
2.null==undefined 相等,但是和其他值比起来都不相等了
3.NaN==NaN 不相等
4.剩下的都会转化为数值
所以可以重写toString方法:
var a={
i=0;
toString:(){
return ++this.i;
}
}
if(a==1&&a==2&&a=3){
console.log('打印成功');
}
在每次比较的时候都调用了toString方法,使值自增1,然后就刚好全部相等了。
另一种方法,利用数组的shift
var a=[1,2,3];
a.toString=a.shift();
if(a==1&&a==2&&a=3){
console.log('打印成功');
}
方法二,利用数据劫持
对于Object.defineProperty(),有get()方法和set()方法,监听值后,每次获取这个值调用get()方法,每次设置这个值得时候调用set()方法。因为每次判断a==1时需要先获取a的值,然后再判断是否相等,故可以使用obj.defineProperty()
var i=0;
var a;
Object.defineProperty(window,'a',{
get(){
return ++i;
}
})
if(a==1&&a==2&&a=3){
console.log('打印成功');
}