面试题答案
一键面试- 算术运算:
- 字符串与数字相加:JavaScript 会将字符串转换为数字再进行运算。例如,
"5" + 3
,会先将"5"
转换为数字5
,然后进行加法运算,结果为8
。如果字符串不能被转换为有效的数字(如"abc"
),则会被转换为NaN
,此时"abc" + 3
结果为NaN
。 - 乘法、除法、减法运算:同样会将参与运算的非数字类型转换为数字。例如,
"5" * 3
,"5"
会被转换为数字5
,然后相乘得到15
。如果是对象参与运算,对象会先调用valueOf()
方法获取原始值,如果valueOf()
返回的不是原始值,则调用toString()
方法获取字符串,再转换为数字进行运算。比如({toString: () => '5'}) * 3
,先通过toString()
得到"5"
,再转换为数字5
,结果为15
。
- 字符串与数字相加:JavaScript 会将字符串转换为数字再进行运算。例如,
- 比较运算:
- 字符串与数字比较:字符串会转换为数字进行比较。例如,
"5" > 3
,"5"
会被转换为数字5
,然后比较,结果为true
。若字符串无法转换为有效数字(如"abc"
),与数字比较结果为false
("abc" > 3
结果为false
)。 - 对象与数字比较:对象先调用
valueOf()
方法获取原始值,如果valueOf()
返回的不是原始值,则调用toString()
方法获取字符串,再转换为数字进行比较。比如({toString: () => '5'}) > 3
,先通过toString()
得到"5"
,转换为数字5
后比较,结果为true
。 - 不同类型对象之间比较:通常先将对象转换为原始值(通过
valueOf()
或toString()
方法),再进行比较。
- 字符串与数字比较:字符串会转换为数字进行比较。例如,
- 逻辑判断:
- 对象转换为布尔值:除了
null
、undefined
、0
、""
、NaN
、false
这几个值会被转换为false
,其他对象都会被转换为true
。例如,Boolean({})
为true
,Boolean(null)
为false
。 - 数字转换为布尔值:
0
和NaN
转换为false
,其他数字转换为true
。如Boolean(5)
为true
,Boolean(0)
为false
。 - 字符串转换为布尔值:空字符串
""
转换为false
,非空字符串转换为true
。例如,Boolean("abc")
为true
,Boolean("")
为false
。
- 对象转换为布尔值:除了
- 条件语句:
在
if
、while
等条件语句中,条件表达式的值会被转换为布尔值。例如:
let num = 5;
if (num) {
console.log('条件为真');
}
这里num
是数字5
,会被转换为true
,所以条件成立。如果num
为0
,则会被转换为false
,条件不成立。同样,对象在条件语句中转换为布尔值的规则与逻辑判断中对象转换为布尔值规则一致。
5. 函数参数传递:
当函数期望某种类型的参数,而传递的参数类型不一致时会发生类型转换。例如:
function addNumbers(a, b) {
return a + b;
}
addNumbers("5", 3);
这里addNumbers
函数期望两个数字参数,但传入了一个字符串"5"
,在加法运算时,"5"
会被转换为数字5
进行运算。