MST

星途 面试题库

面试题:JavaScript表达式优先级与逻辑陷阱剖析

考虑以下JavaScript代码:`let a = 1; let b = 2; let c = 3; let result = a++ + ++b * (c-- - a++) - --b;` 请精确解释整个表达式的运算过程,包括每一个变量值的变化以及最终`result`的值,深入阐述所涉及的JavaScript表达式优先级规则和自增自减运算符的特性。
49.8万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 表达式优先级规则
    • 首先,JavaScript 中运算符优先级顺序大致为:括号内表达式优先计算,然后是一元运算符(如 ++--),接着是乘法、除法、取模运算,最后是加法和减法运算。
  2. 自增自减运算符特性
    • 前置自增(++x)和前置自减(--x:先将变量的值增加或减少 1,然后再将改变后的值参与表达式运算。
    • 后置自增(x++)和后置自减(x--:先将变量当前的值参与表达式运算,然后再将变量的值增加或减少 1。
  3. 具体运算过程
    • 初始值:a = 1b = 2c = 3
    • 计算 c-- - a++
      • 先计算 c--c 当前值为 3,参与运算,然后 c 变为 2。
      • 再计算 a++a 当前值为 1,参与运算,然后 a 变为 2。
      • 所以 c-- - a++3 - 1 = 2
    • 计算 ++b * (c-- - a++)
      • 先计算 ++bb 先变为 3,然后参与运算。
      • 前面已算出 c-- - a++ 为 2,所以 ++b * (c-- - a++)3 * 2 = 6
    • 计算 a++ + ++b * (c-- - a++)
      • 前面已算出 ++b * (c-- - a++) 为 6。
      • 再计算 a++a 当前值为 2(上一步 a++ 后变为 2),参与运算,然后 a 变为 3。
      • 所以 a++ + ++b * (c-- - a++)2 + 6 = 8
    • 计算 a++ + ++b * (c-- - a++) - --b
      • 前面已算出 a++ + ++b * (c-- - a++) 为 8。
      • 计算 --bb 先变为 2,然后参与运算。
      • 所以 a++ + ++b * (c-- - a++) - --b8 - 2 = 6
    • 最终,result = 6,此时 a = 3b = 2c = 2

综上,result 的值为 6。在整个运算过程中,严格遵循了 JavaScript 的表达式优先级规则以及自增自减运算符的特性。