MST

星途 面试题库

面试题:JavaScript算术操作符在复杂边界场景下的行为分析

在JavaScript中,当对 `Infinity`、`NaN`、`undefined` 等特殊值以及数组、对象(假设对象有`valueOf`方法返回数值)使用算术操作符时,会遵循怎样的规则?请详细描述每种情况,并给出代码示例说明不同操作符(加、减、乘、除)在这些复杂边界场景下的具体行为。
20.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

Infinity 的算术操作

  1. 加法(+
    • Infinity + any_number 结果为 Infinity
    • Infinity + Infinity 结果为 Infinity
    console.log(Infinity + 5); // Infinity
    console.log(Infinity + Infinity); // Infinity
    
  2. 减法(-
    • Infinity - any_number 结果为 Infinity
    • Infinity - Infinity 结果为 NaN
    console.log(Infinity - 5); // Infinity
    console.log(Infinity - Infinity); // NaN
    
  3. 乘法(*
    • Infinity * any_non - zero_number
      • 如果 any_non - zero_number 为正数,结果为 Infinity
      • 如果 any_non - zero_number 为负数,结果为 -Infinity
    • Infinity * Infinity 结果为 Infinity
    • Infinity * 0 结果为 NaN
    console.log(Infinity * 5); // Infinity
    console.log(Infinity * -5); // -Infinity
    console.log(Infinity * Infinity); // Infinity
    console.log(Infinity * 0); // NaN
    
  4. 除法(/
    • any_number / Infinity 结果为 0
    • Infinity / any_non - zero_number
      • 如果 any_non - zero_number 为正数,结果为 Infinity
      • 如果 any_non - zero_number 为负数,结果为 -Infinity
    • Infinity / Infinity 结果为 NaN
    console.log(5 / Infinity); // 0
    console.log(Infinity / 5); // Infinity
    console.log(Infinity / -5); // -Infinity
    console.log(Infinity / Infinity); // NaN
    

NaN 的算术操作

任何包含 NaN 的算术操作结果都为 NaN

console.log(NaN + 5); // NaN
console.log(NaN - 5); // NaN
console.log(NaN * 5); // NaN
console.log(NaN / 5); // NaN

undefined 的算术操作

任何包含 undefined 的算术操作结果都为 NaN,因为 undefined 不能直接参与算术运算。

console.log(undefined + 5); // NaN
console.log(undefined - 5); // NaN
console.log(undefined * 5); // NaN
console.log(undefined / 5); // NaN

数组的算术操作

数组不能直接参与算术操作,除非通过 valueOftoString 方法进行类型转换。如果数组没有重写 valueOf 方法,默认 valueOf 返回数组本身,不能直接用于算术运算。

let arr = [1, 2, 3];
// 以下操作会尝试类型转换
console.log(arr + 5); // "1,2,35",数组先转换为字符串再拼接

对象(有 valueOf 返回数值)的算术操作

  1. 加法(+
    • 对象会先调用 valueOf 方法获取数值,然后进行加法运算。
    let obj1 = {
      valueOf: function () {
        return 5;
      }
    };
    console.log(obj1 + 3); // 8
    
  2. 减法(-
    • 同样先调用 valueOf 方法获取数值,再进行减法运算。
    let obj2 = {
      valueOf: function () {
        return 5;
      }
    };
    console.log(obj2 - 3); // 2
    
  3. 乘法(*
    • 先调用 valueOf 方法获取数值,然后进行乘法运算。
    let obj3 = {
      valueOf: function () {
        return 5;
      }
    };
    console.log(obj3 * 3); // 15
    
  4. 除法(/
    • 先调用 valueOf 方法获取数值,再进行除法运算。
    let obj4 = {
      valueOf: function () {
        return 6;
      }
    };
    console.log(obj4 / 3); // 2