bug收集:专门解决与收集bug的网站
网址:www.bugshouji.com
01
问题
一个有趣的问题 ,也是很多大公司的面试题
var a = ?
if(a == 1 && a == 2 && a == 3) {
console.log('Hello World!');
}
如上代码:a 等于什么的时候?, 可以满足条件,输出hello world
02
答案 & 解析(请看到最后)
大部分解决方法都是使用toString或者valueOf实现的,主要利用:运算数两边的类型不同时,会进行隐式转换.
注:当对象没有valueOf方法时,将会使用toString方法,所以重写这两个方法都可以。
重写valueOf
const a = {
num:0,
valueOf: function(){
return this.num+=1
}
}
重写toString
const a = {
num:0,
toString:function(){
return this.num+=1
}
}
03
疑问
大家会发现,上面用的是两个等号==
如果是三个等号===呢?
如何让(a===1&&a===2&&a===3)的值为true
上面的方法,已经失效了
这需要使用Object.defineProperty来解决,使用它来劫持a变量
具体解析,请看明天的文章