JS面试题:实现a1&&a2&&a==3 返回true
思路:
重写valueOf()
方法
利用隐式转换时,会调用valueOf()
方法,来实现对其值的++操作
valueOf的意思是返回最适合该对象类型的原始值,而toString则是将在该对象类型的原始值以字符串形式返回。
var colors = ["red", "blue", "green"]; // 创建一个包含3 个字符串的数组
alert(colors.toString()); // red,blue,green
alert(colors.valueOf()); // red,blue,green
alert(colors); // red,blue,green
var arr = [1, 2, 3];
alert(Array.isArray(arr.valueOf())); //true
alert(Array.isArray(arr.toString())); //false
// 其实valueOf()调用完以后还是返回一个数组。这个数组被alert的时候会调用toString()函数,
// 所以不是valueOf()和toString()函数相同,而是间接的调用了toString()函数!
// 重写valueOf()方法
//利用隐式转换时,会调用valueOf()方法,来实现对其值的++操作
// valueOf的意思是返回最适合该对象类型的原始值,而toString则是将在该对象类型的原始值以字符串形式返回。
let obj = {
i: 1,
valueOf: () => {
return obj.i++
}
}
console.log(obj == 1 && obj == 2 && obj == 3);//true