经典面试题a == 1 && a== 2 && a== 3

简介: 经典面试题a == 1 && a== 2 && a== 3

一般要重写 valueOf 和 toString


        //toString  valueOf
        const a = {
            current: 1,
            toString() {
                return this.current++
            }
        }
        if (a == 1 && a == 2 && a == 3) {
            console.log('a')
        }


应为 == 有隐试转换


  alert( a )    //50       执行了toString() 执行了valueOf()
    alert( +a )    //30       执行了toString()
    alert( a>40 )    //false       执行了toString()
    alert( a==30 )    //true       执行了toString()
    alert( a===30 )    //false
 //最后这个未输出任何字符串,个人猜想是这样的:全等比较时,js解析器直接先判断类型是否一样,明显一个是Object,一个是Number,所以直接不相等,根本不需要再去求值了。


目录
相关文章
|
12天前
break,continue,return的区别深度剖析
break,continue,return的区别深度剖析
|
19天前
|
JavaScript 前端开发 安全
== 和 ===什么区别呀?
== 和 ===什么区别呀?
|
11月前
equals 和 == 的区别?
equals 和 == 的区别?
50 0
|
19天前
! [ ] == ! [ ] 和 ! [ ] == [ ] 结果是什么? 为什么?
! [ ] == ! [ ] 和 ! [ ] == [ ] 结果是什么? 为什么?
19 0
|
10月前
|
JavaScript 前端开发
== 和 ===区别,分别在什么情况使用
== 和 ===区别,分别在什么情况使用
53 1
![] == ![],![] == [],结果是什么?为什么?
![] == ![],![] == [],结果是什么?为什么?
|
11月前
|
Java
== 和 equals 的区别是什么
== 运算符用于比较两个对象的引用是否相等。它对于基本类型比较值的相等性,对于引用类型比较引用的相等性。当使用 == 比较两个对象时,它会检查它们是否指向相同的内存地址。如果两个对象具有相同的内存地址,则它们被认为是相等的。
52 1
|
12月前
equals和 == 的区别
equals和 == 的区别
51 0
|
存储
什么时候 a == 1 && a == 2 && a == 3 为 true?
什么时候 a == 1 && a == 2 && a == 3 为 true?
105 0
什么时候 a == 1 && a == 2 && a == 3 为 true?