MST
星途 面试题库

面试题:JavaScript 类型转换的常见场景及实现方式

请列举至少三种 JavaScript 中会发生类型转换的常见场景,并描述在这些场景下,JavaScript 是如何进行类型转换的,例如将字符串转换为数字,以及将对象转换为布尔值等情况。
17.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 算术运算
    • 字符串与数字相加: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
  2. 比较运算
    • 字符串与数字比较:字符串会转换为数字进行比较。例如,"5" > 3"5"会被转换为数字5,然后比较,结果为true。若字符串无法转换为有效数字(如"abc"),与数字比较结果为false"abc" > 3结果为false)。
    • 对象与数字比较:对象先调用valueOf()方法获取原始值,如果valueOf()返回的不是原始值,则调用toString()方法获取字符串,再转换为数字进行比较。比如({toString: () => '5'}) > 3,先通过toString()得到"5",转换为数字5后比较,结果为true
    • 不同类型对象之间比较:通常先将对象转换为原始值(通过valueOf()toString()方法),再进行比较。
  3. 逻辑判断
    • 对象转换为布尔值:除了nullundefined0""NaNfalse这几个值会被转换为false,其他对象都会被转换为true。例如,Boolean({})trueBoolean(null)false
    • 数字转换为布尔值0NaN转换为false,其他数字转换为true。如Boolean(5)trueBoolean(0)false
    • 字符串转换为布尔值:空字符串""转换为false,非空字符串转换为true。例如,Boolean("abc")trueBoolean("")false
  4. 条件语句: 在ifwhile等条件语句中,条件表达式的值会被转换为布尔值。例如:
let num = 5;
if (num) {
    console.log('条件为真');
}

这里num是数字5,会被转换为true,所以条件成立。如果num0,则会被转换为false,条件不成立。同样,对象在条件语句中转换为布尔值的规则与逻辑判断中对象转换为布尔值规则一致。 5. 函数参数传递: 当函数期望某种类型的参数,而传递的参数类型不一致时会发生类型转换。例如:

function addNumbers(a, b) {
    return a + b;
}
addNumbers("5", 3);

这里addNumbers函数期望两个数字参数,但传入了一个字符串"5",在加法运算时,"5"会被转换为数字5进行运算。