MST

星途 面试题库

面试题:JavaScript 关系操作符在复杂对象比较时的边界条件

假设有两个对象 obj1 = { valueOf: function() { return 5; } } 和 obj2 = { valueOf: function() { return 10; } }。使用关系操作符 '>' 比较 obj1 和 obj2 会得到什么结果?如果再创建一个对象 obj3 = { toString: function() { return '8'; } },比较 obj1 和 obj3 时又会怎样?请详细说明JavaScript在这些比较过程中的类型转换和判断逻辑。
34.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 比较 obj1obj2
    • 在JavaScript中,当使用>关系操作符比较两个对象时,会先调用对象的valueOf方法获取原始值。
    • 对于obj1obj1.valueOf()返回5,对于obj2obj2.valueOf()返回10
    • 然后比较这两个原始值,即5 > 10,结果为false
  2. 比较 obj1obj3
    • 当比较obj1obj3时,obj1valueOf方法,调用obj1.valueOf()返回5
    • obj3没有valueOf方法,此时JavaScript会调用obj3toString方法,obj3.toString()返回'8'
    • 由于一个操作数是数字(5),另一个是字符串('8'),JavaScript会将字符串'8'转换为数字8
    • 最后比较58,即5 > 8,结果为false

总结:在关系操作符>比较对象时,优先调用valueOf方法获取原始值进行比较,如果没有valueOf方法,则调用toString方法获取原始值进行比较,并且会在必要时进行类型转换,将字符串转换为数字等合适类型后再进行比较。