MST

星途 面试题库

面试题:JavaScript类型转换高级难度题

假设有一个函数`function add(a, b) { return a + b; }`,如果传入`add(1, '2')`和`add('1', 2)`,结果分别是什么?如何修改这个函数,使其能统一处理数字和字符串类型的参数并正确相加(考虑隐式类型转换的陷阱及优化)。
34.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 对于add(1, '2')

    • 在JavaScript中,+运算符遇到一个数字和一个字符串时,会将数字转换为字符串然后进行字符串拼接。所以add(1, '2')的结果是"12"
  2. 对于add('1', 2)

    • 同样,+运算符会将数字2转换为字符串"2",然后进行字符串拼接。所以add('1', 2)的结果是"12"
  3. 修改函数以正确相加(考虑隐式类型转换陷阱及优化):

function add(a, b) {
    // 先将参数都转换为数字类型
    const numA = typeof a ==='string'? parseFloat(a) : a;
    const numB = typeof b ==='string'? parseFloat(b) : b;
    // 判断是否转换成功(如果字符串无法转换为有效数字,parseFloat会返回NaN)
    if (isNaN(numA) || isNaN(numB)) {
        throw new Error('参数无法正确转换为数字进行相加');
    }
    return numA + numB;
}

这样修改后,函数会尝试将传入的参数转换为数字类型,如果转换成功则进行数字相加,若有参数无法转换为有效数字则抛出错误,避免了隐式类型转换带来的意外字符串拼接问题。