MST

星途 面试题库

面试题:JavaScript 操作符优先级与短路逻辑

已知表达式 `a && b || c && d`,假设 `a`、`b`、`c`、`d` 都是布尔值变量,解释该表达式的运算顺序,同时说明如果 `a` 为 `false`,后续变量 `b`、`c`、`d` 是否还会被求值?为什么?并且举例说明如何利用这种短路逻辑实现一些简洁的代码。
47.0万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 运算顺序
    • 逻辑与(&&)的优先级高于逻辑或(||)。所以先计算 a && bc && d 这两个子表达式。
    • 对于 a && b,先判断 a,如果 atrue,再判断 b;对于 c && d,先判断 c,如果 ctrue,再判断 d
    • 然后将 a && bc && d 的结果进行逻辑或(||)运算。
  2. 短路逻辑分析
    • 如果 afalse,后续变量 b 不会被求值。因为对于逻辑与(&&)运算,只要第一个操作数为 false,整个 a && b 表达式必然为 false,无需再判断 b
    • 由于 a && bfalse,此时会继续计算 c && d。所以 cd 会被求值,因为对于逻辑或(||)运算,只有当 a && bfalse 时,才会去判断 c && d 的值。
  3. 利用短路逻辑实现简洁代码举例
    • 例如,在JavaScript中,有一个函数 fetchData 可能会抛出错误,并且只有在用户已登录(isLoggedIntrue)的情况下才调用:
let isLoggedIn = true;
function fetchData() {
    // 模拟获取数据的操作
    console.log('Fetching data...');
    return 'Data';
}
let result = isLoggedIn && fetchData();
console.log(result);
  • 在上述代码中,如果 isLoggedInfalsefetchData 函数不会被调用,利用了逻辑与(&&)的短路特性,避免了在用户未登录时调用可能产生错误的 fetchData 函数。