MST

星途 面试题库

面试题:JavaScript操作符优先级与结合性专家题

在JavaScript中,设计一个复杂表达式,综合运用至少5种不同优先级的操作符(包括逻辑操作符、算术操作符、赋值操作符、比较操作符、位操作符等),使得结果为`true`,并且要求解释每个操作符的执行顺序以及优先级和结合性对最终结果的影响。
26.2万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

以下是一个满足要求的JavaScript复杂表达式:

let a = 5;
let b = 3;
let c = 2;
let result = ((a + b) * c) > (a & b) && (a << 1) === (b * c + a) && (a -= 2) === 3;

操作符及执行顺序、优先级和结合性分析

  1. 算术操作符 +:优先级较高,先计算 a + b,即 5 + 3 = 8。算术操作符遵循从左到右的结合性。
  2. 算术操作符 *:优先级高于 > 等比较操作符,接着计算 (a + b) * c,即 8 * 2 = 16
  3. 位操作符 &:优先级低于算术操作符,计算 a & b,即 5 & 3,按位与后结果为 1
  4. 比较操作符 >:优先级低于算术和位操作符,比较 ((a + b) * c) > (a & b),即 16 > 1,结果为 true
  5. 位操作符 <<:优先级低于算术操作符,计算 a << 1,即 5 << 1,左移1位结果为 10
  6. 算术操作符 *+:先计算 b * c3 * 2 = 6,再计算 b * c + a6 + 5 = 11
  7. 比较操作符 ===:比较 (a << 1) === (b * c + a),即 10 === 11,结果为 false
  8. 逻辑与操作符 &&:具有短路特性,因为前一个 && 左边为 true,右边为 false,所以整体 true && falsefalse。但为了完整分析,继续看后面。
  9. 赋值操作符 -=:优先级较低,计算 a -= 2,即 a = a - 2,此时 a 变为 3
  10. 比较操作符 ===:比较 (a -= 2) === 3,即 3 === 3,结果为 true

由于整体表达式为 true && false && true,最终结果为 false。若要使结果为 true,可以修改为:

let a = 5;
let b = 3;
let c = 2;
let result = ((a + b) * c) > (a & b) && (a << 1) === (b * c + a) || (a -= 2) === 3;

这里将第二个 && 改为 ||,此时表达式为 true && false || true,根据逻辑或的短路特性,最终结果为 true

总结

  1. 优先级:算术操作符(如 +*) > 位操作符(如 &<<) > 比较操作符(如 >===) > 逻辑操作符(如 &&||) > 赋值操作符(如 -=)。
  2. 结合性:算术操作符从左到右结合,赋值操作符从右到左结合,逻辑操作符从左到右结合。通过合理安排操作符及其优先级和结合性,可以构建出满足特定条件的复杂表达式。