MST

星途 面试题库

面试题:JavaScript复杂类型比较中的类型转换

考虑如下代码:`const obj1 = { valueOf: () => 1 }; const obj2 = { valueOf: () => 2 }; console.log(obj1 > obj2)`。解释该比较操作如何进行,以及涉及到哪些JavaScript类型转换规则。
46.2万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 比较操作过程
    • 在JavaScript中,当使用>运算符比较两个对象obj1obj2时,会尝试将对象转换为原始值进行比较。
    • 这里对象obj1obj2都定义了valueOf方法,所以会调用它们的valueOf方法来获取原始值。obj1.valueOf()返回1obj2.valueOf()返回2
    • 然后比较这两个原始值,即1 > 2,结果为false
  2. 涉及的JavaScript类型转换规则
    • 对象到原始值的转换
      • 当需要将对象转换为原始值进行比较等操作时,JavaScript首先尝试调用对象的valueOf方法。如果valueOf方法返回的不是原始值(例如还是一个对象),则会尝试调用toString方法。在本题中,obj1obj2valueOf方法都返回了原始值(数字),所以直接使用valueOf返回的值进行比较。
    • 数字比较规则
      • 一旦得到两个原始的数字值,就按照常规的数字比较规则进行比较。在本题中,1小于2,所以1 > 2返回false

所以console.log(obj1 > obj2)输出false