标题a为何值是下面代码输出"成立"
if (a == 1 && a == 2 && a == 3) {
console.log('成立')
}
如果a是一个引用数据类型,比如说对象,在执行的时候执行到a==1时,由于采用的是双等号,会进行隐式类型转换
对于引用数据类型的隐式类型转换目的是将其转为基本数据类型
步骤是
- 它如果有Symbol.toPrimitive属性,该属性的值一般是个函数,会首先调用这个函数,尝试将其转为基本数据类型,如果不能转为基本数据类型或者没有该属性,执行下一步
- 执行valueOf函数,目的也是一样的,如果不能转为基本数据类型或者没有该属性,执行下一步
- 执行toString函数,目的也是一样的,如果不能转为基本数据类型或者没有该属性,执行下一步
- 如果上面三部都为完成目的,那就报错
该题涉及到三次隐式转换,且三次a返回的值分别是1,2,3我们只需要让a的初始值为1,下次++就好了
答案如下 三种方法均可以
let a ={
value:1,
[Symbol.toPrimitive]:function(){
return this.value++
},
// valueOf(){
// return this.value++
// },
// toString(){
// return this.value++
// }
}
if (a == 1 && a == 2 && a == 3) {
console.log('成立')
}