MST
星途 面试题库

面试题:JavaScript 隐式转换与复杂运算符场景

在 JavaScript 中,考虑以下代码:`const a = { valueOf: () => 2, toString: () => 'three' }; const result1 = a + 1; const result2 = 1 + a; 请分别解释 `result1` 和 `result2` 的值是如何得到的,详细说明其中涉及的隐式转换步骤和运算符优先级问题。
14.1万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. result1 的计算过程
    • 首先,a + 1 是加法运算。在 JavaScript 中,当对象与数字进行加法运算时,会进行隐式类型转换。
    • 按照隐式转换规则,会先调用对象的 valueOf 方法获取原始值。这里 avalueOf 方法返回 2
    • 然后进行 2 + 1 的运算,最终 result1 的值为 3
  2. result2 的计算过程
    • 1 + a 同样是加法运算。
    • 由于加法运算符左右两边类型不一致(左边是数字,右边是对象),会对对象 a 进行隐式类型转换。
    • 还是先调用 avalueOf 方法,这里 avalueOf 方法返回 2
    • 接着进行 1 + 2 的运算,所以 result2 的值也为 3
  3. 运算符优先级
    • 在这两个表达式中,加法运算符是左结合的,不存在其他优先级更高的运算符干扰。主要是对象 a 在与数字相加时,会按照 JavaScript 的隐式类型转换规则先调用 valueOf 方法获取原始值,再进行加法运算。

所以,result1result2 的值都为 3