MST

星途 面试题库

面试题:JavaScript 逻辑表达式性能测试基础

在 JavaScript 中,对于逻辑与(&&)和逻辑或(||)表达式,它们的求值策略是怎样的?这种策略对性能有什么影响?请举例说明。
28.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

逻辑与(&&)求值策略

  1. 短路求值:逻辑与(&&)表达式从左到右求值。如果第一个操作数转换为布尔值为 false,则返回第一个操作数,不会再对第二个操作数求值。只有当第一个操作数转换为布尔值为 true 时,才会继续对第二个操作数求值,并返回第二个操作数。
  2. 示例
let a = 0;
let b = 'hello';
let result1 = a && b; // 因为 0 转换为布尔值是 false,所以 result1 = 0,不会再计算 b
let c = 5;
let d = 'world';
let result2 = c && d; // 因为 5 转换为布尔值是 true,所以 result2 = 'world'

逻辑或(||)求值策略

  1. 短路求值:逻辑或(||)表达式同样从左到右求值。如果第一个操作数转换为布尔值为 true,则返回第一个操作数,不会再对第二个操作数求值。只有当第一个操作数转换为布尔值为 false 时,才会继续对第二个操作数求值,并返回第二个操作数。
  2. 示例
let e = 10;
let f = 'test';
let result3 = e || f; // 因为 10 转换为布尔值是 true,所以 result3 = 10,不会再计算 f
let g = '';
let h = 'default';
let result4 = g || h; // 因为 '' 转换为布尔值是 false,所以 result4 = 'default'

对性能的影响

  1. 减少不必要计算:这种短路求值策略可以避免不必要的计算,提高性能。例如在逻辑与(&&)表达式中,如果第一个操作数已经能决定整个表达式的结果(为 false),就不会去计算第二个操作数,从而节省了计算资源。同样,逻辑或(||)表达式中,如果第一个操作数能决定结果(为 true),也会停止后续计算。
  2. 函数调用场景:当操作数是函数调用时,短路求值的性能优化效果更为明显。例如:
function expensiveCalculation1() {
    console.log('Calculating 1...');
    return true;
}
function expensiveCalculation2() {
    console.log('Calculating 2...');
    return false;
}
let result5 = expensiveCalculation1() && expensiveCalculation2(); 
// 输出:Calculating 1... Calculating 2...,因为第一个函数返回 true,所以第二个函数仍会执行
let result6 = expensiveCalculation2() && expensiveCalculation1(); 
// 输出:Calculating 2...,因为第一个函数返回 false,第二个函数不会执行,节省了计算开销
let result7 = expensiveCalculation1() || expensiveCalculation2(); 
// 输出:Calculating 1...,因为第一个函数返回 true,第二个函数不会执行
let result8 = expensiveCalculation2() || expensiveCalculation1(); 
// 输出:Calculating 2... Calculating 1...,因为第一个函数返回 false,第二个函数会执行

在这些例子中,可以看到短路求值避免了不必要的函数调用,提升了性能。