MST

星途 面试题库

面试题:JavaScript 数据类型转换与隐式类型转换 - 高级难度

考虑以下代码:`function add(a, b) { return a + b; } console.log(add(1, '2')); console.log(add('1', 2));` 解释这两个 `console.log` 输出结果的原因,以及在 JavaScript 引擎内部发生了怎样的数据类型转换。如果要实现无论参数顺序如何都能正确执行数字加法,应如何修改该函数?
32.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 输出结果及原因
    • console.log(add(1, '2')); 输出 12。原因是在 JavaScript 中,当 + 运算符两边操作数类型不同且其中一个是字符串时,会将另一个操作数转换为字符串然后进行字符串拼接。这里数字 1 被转换为字符串 '1',然后与字符串 '2' 拼接得到 '12'
    • console.log(add('1', 2)); 输出 12。同样,因为 + 运算符有字符串参与,数字 2 被转换为字符串 '2',然后与字符串 '1' 拼接得到 '12'
  2. JavaScript 引擎内部的数据类型转换
    • 当遇到 + 运算符且有一个操作数为字符串时,JavaScript 引擎会将另一个操作数转换为字符串类型。对于数字转换为字符串,是通过数字的 toString() 方法实现的。例如 1.toString() 会返回 '1'2.toString() 会返回 '2'
  3. 修改函数实现正确数字加法
function add(a, b) {
    return Number(a) + Number(b);
}

在这个修改后的函数中,通过 Number() 函数将参数 ab 都强制转换为数字类型,这样无论参数顺序如何,都能正确执行数字加法。如果参数无法转换为有效的数字,Number() 会返回 NaN,加法运算结果也会是 NaN