题目如下:
var a = ?;
if(a == 1 && a == 2 && a == 3){
conso.log(1);
}
1、利用toString
let a = {
i: 1,
toString () {
return a.i++
}
}
if(a == 1 && a == 2 && a == 3) {
console.log('1');
}
2、利用valueOf
let a = {
i: 1,
valueOf () {
return a.i++
}
}
if(a == 1 && a == 2 && a == 3) {
console.log('1');
}
3、利用数组方法
var a = [1,2,3];
a.join = a.shift;
if(a == 1 && a == 2 && a == 3) {
console.log('1');
}
4、ES6的symbol
let a = {[Symbol.toPrimitive]: ((i) => () => ++i) (0)};
if(a == 1 && a == 2 && a == 3) {
console.log('1');
}
5、Generator函数
let a = {
gn: (function* () {
yield 1;
yield 2;
yield 3;
})(),
valueOf() {
return this.gn.next().value;
}
};
6、使用Object.defineProperty方法
Object.defineProperty(window, 'a', {
get: function() {
return this.value = this.value ? (this.value += 1) : 1;
}
});
7、Object原型上修改toString方法
Object.prototype.toString = (function () {
var t = 1;
return function () {
return t++;
}
})()
var a = {}
a == 1 && a == 2 && a == 3 // true