MST
星途 面试题库

面试题:JavaScript隐式类型转换与原型链结合考查

假设我们有一个自定义对象`function MyObject() {}; MyObject.prototype = { valueOf: function() { return '42'; } }; let obj = new MyObject();`,在表达式`obj + 2`中,JavaScript是如何进行隐式类型转换的,涉及到原型链的哪些环节,最终结果是什么,详细说明过程。
37.2万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 隐式类型转换过程
    • 在JavaScript中,当执行obj + 2这样的加法运算时,其中一个操作数是对象(obj),另一个是数字(2)。对象在进行加法运算时,会先尝试将其转换为原始值。
    • JavaScript会首先调用对象的valueOf方法来获取原始值。如果valueOf方法返回的不是原始值,再调用toString方法。
  2. 涉及原型链的环节
    • 对于obj这个MyObject的实例,它本身没有valueOf方法。所以JavaScript会沿着原型链查找valueOf方法。
    • MyObject.prototype定义了valueOf方法,所以会调用MyObject.prototype.valueOf方法。这个方法返回字符串'42'
  3. 最终结果
    • 因为valueOf方法返回了字符串'42',此时表达式变为'42' + 2
    • 在JavaScript中,当一个字符串和一个数字进行加法运算时,数字会被转换为字符串,然后进行字符串拼接。所以'42' + 2的结果是'422'

综上所述,obj + 2最终结果是'422'