a为何值是下面代码输出“成立“

标题a为何值是下面代码输出"成立"

if (a == 1 && a == 2 && a == 3) {
    console.log('成立')
  }

如果a是一个引用数据类型,比如说对象,在执行的时候执行到a==1时,由于采用的是双等号,会进行隐式类型转换

对于引用数据类型的隐式类型转换目的是将其转为基本数据类型
步骤是

  1. 它如果有Symbol.toPrimitive属性,该属性的值一般是个函数,会首先调用这个函数,尝试将其转为基本数据类型,如果不能转为基本数据类型或者没有该属性,执行下一步
  2. 执行valueOf函数,目的也是一样的,如果不能转为基本数据类型或者没有该属性,执行下一步
  3. 执行toString函数,目的也是一样的,如果不能转为基本数据类型或者没有该属性,执行下一步
  4. 如果上面三部都为完成目的,那就报错

该题涉及到三次隐式转换,且三次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('成立')
  }

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 00:00:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 00:00:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 00:00:03       87 阅读
  4. Python语言-面向对象

    2024-03-25 00:00:03       96 阅读

热门阅读

  1. 01-Pandas的方法介绍

    2024-03-25 00:00:03       39 阅读
  2. 定义了服务器的端口号和Servlet的上下文路径

    2024-03-25 00:00:03       47 阅读
  3. OpenCV支持哪些类型的文件格式读写?

    2024-03-25 00:00:03       41 阅读
  4. 周报_第四十六周

    2024-03-25 00:00:03       39 阅读
  5. Spring Cloud微服务功能及其组件详细讲解

    2024-03-25 00:00:03       34 阅读
  6. ES6—运算符的扩展

    2024-03-25 00:00:03       34 阅读
  7. python 模块与包

    2024-03-25 00:00:03       39 阅读
  8. 日期时间api

    2024-03-25 00:00:03       38 阅读
  9. 100个shell常用命令

    2024-03-25 00:00:03       44 阅读
  10. 突破编程_C++_面试(STL 编程 stack)

    2024-03-25 00:00:03       42 阅读