MST

星途 面试题库

面试题:JavaScript 求值表达式特殊情况之高级难度

请解释JavaScript中`null + undefined`、`'a' - 1`、`1 + true`这几个求值表达式的结果及其背后的类型转换规则。如果想要避免因这类类型转换造成的意外结果,在编程过程中有哪些建议?
33.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. null + undefined
    • 结果NaN
    • 类型转换规则:在JavaScript中,null在数值运算中会被转换为0undefined在数值运算中会被转换为NaN。所以null + undefined实际为0 + NaN,根据数学运算规则,任何数与NaN运算结果都为NaN
  2. 'a' - 1
    • 结果NaN
    • 类型转换规则:在减法运算中,JavaScript会尝试将操作数转换为数值类型。'a'无法被解析为有效的数字,会被转换为NaN,所以'a' - 1实际为NaN - 1,结果为NaN
  3. 1 + true
    • 结果2
    • 类型转换规则:在加法运算中,true会被转换为数值1,所以1 + true实际为1 + 1,结果为2

避免意外结果的编程建议

  • 显式类型转换:在进行运算前,使用parseInt()parseFloat()Number()等函数将变量显式转换为期望的类型。例如,如果要将字符串转换为数字进行运算,可以使用parseInt('123')
  • 使用严格相等运算符:在比较时使用===!==,它们不会进行类型转换,能更准确地判断两个值是否完全相等。例如,1 === '1'false,而1 == '1'true
  • 数据验证:在接受外部输入(如用户输入、API响应等)时,对数据进行验证,确保其类型符合预期。可以使用typeof操作符来检查数据类型。例如:
let input = '123';
if (typeof input ==='string' &&!isNaN(parseFloat(input)) && isFinite(input)) {
    let num = parseFloat(input);
    // 进行数值运算
}
  • 使用强类型语言特性的库:一些库(如TypeScript)为JavaScript添加了静态类型检查,能在编译时发现类型不匹配的问题,有助于避免因类型转换导致的运行时错误。