面试题答案
一键面试- 代码输出结果及原因:
- 代码
console.log(1 + '2' + 3);
的输出结果是123
。 - 原因是在JavaScript中,当使用
+
运算符进行运算时,如果其中一个操作数是字符串,+
运算符会被当作字符串连接运算符。在1 + '2'
中,数字1
会被转换为字符串'1'
,然后与字符串'2'
进行连接,得到'12'
。接着,'12' + 3
,数字3
又会被转换为字符串'3'
,与'12'
连接,最终得到'123'
。
- 代码
- 字符串与数字相加时的类型转换规则:
- 当
+
运算符的其中一个操作数是字符串时,另一个操作数会被转换为字符串,然后进行字符串连接操作。例如:console.log(5 + 'abc'); // 输出 '5abc' console.log('xyz' + 10); // 输出 'xyz10'
- 如果
+
运算符两边都是数字,则进行常规的数字加法运算。例如:console.log(5 + 10); // 输出 15
- 当数字与布尔值相加时,布尔值会先被转换为数字(
true
转换为1
,false
转换为0
),然后进行数字加法运算。例如:console.log(5 + true); // 输出 6 console.log(5 + false); // 输出 5
- 当对象与数字或字符串相加时,对象会先调用
valueOf()
方法,如果返回的不是原始值,再调用toString()
方法,然后根据得到的结果按照上述规则进行运算。例如:const obj = { valueOf: function () { return 10; } }; console.log(5 + obj); // 输出 15
const obj2 = { toString: function () { return '20'; } }; console.log(5 + obj2); // 输出 '520'
- 当