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