逻辑与和逻辑或

逻辑或

逻辑或由(||)表示,有两个操作数

逻辑或的真值表示如下:

第一个操作数 第二个操作数 结果
true true true
true false true
false true true
false false false

逻辑或操作符可以应用任何类型的操作数,而不仅仅是布尔值。如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值。遵循以下规则

  • 如果第一个操作数是对象,则返回第一个操作数
  • 如果第一个操作数的求值结果返回为false但第二个操作数是对象,则返回第二个操作数
  • 如果两个操作数都是对象,则返回第一个操作数
  • 如果两个操作数都是null,则返回null
  • 如果两个操作数都是NaN,则返回NaN
  • 如果两个操作数都是undefined,则返回undefined、

逻辑或操作符是短路操作符。

console.log(a || 2); //ReferenceError: a is not defined
console.log(2 || a); //2, 因为是短操作符,第一个操作符2为true,第二个操作符不会执行(这里的变量a是未定义的变量)
console.log(2 || 1); //2,第一个操作符2是true,直接返回2,不会管第二个操作数
console.log(0 || 2); //2,第一个操作符0时false,会计算第二个操作数
console.log(2 || 0); //2,第一个操作符2是true,直接返回2,不会管第二个操作数
console.log(2 || 3); //2,第一个操作符2是true,直接返回2,不会管第二个操作数
console.log(NaN || NaN); //NaN
console.log(null || null); //null
console.log(undefined || undefined); //undefined

逻辑与

逻辑与操作符由(&&)表示,有两个操作数

第一个操作数 第二个操作数 结果
true true true
true false false
false true false
false false false

逻辑与操作符可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作符不是布尔值的情况下,逻辑与操作就不一定返回布尔值。遵循以下规则

  • 如果第一个操作数是对象,则返回第二个操作数
  • 如果第二个操作数时对象,则只有第一个操作数的求值结果为true的情况下才会返回该对象
  • 如果两个操作数都是对象,则返回第二个操作数
  • 如果有一个操作数是null,则返回null
  • 如果有一个操作数是NaN,则返回NaN
  • 如果有一个操作数是undefined,则返回undefined

逻辑与是短路操作符

console.log(a && 0); // ReferenceError: a is not defined
console.log(0 && a); //0, 因为是短操作符,第一个操作符0为false,第二个操作符不会执行(这里的变量a未定义)
console.log(2 && 1); //1,第一个操作数2是true,会计算第二个操作数,返回第二个操作数1
console.log(0 && 2); //0,第一个操作数0是false,直接返回0,不会管第二个操作数
console.log(2 && 0); //0,第一个操作数2是true,会计算第二个操作数
console.log(2 && 3); //3,第一个操作数2是true,会计算第二个操作数,第二个操作数3是true,返回3
console.log(NaN && NaN); //NaN,第一个操作数是NaN,不会管第二个操作数
console.log(null && null); //null,第一个操作数时null,不会管第二个操作数
console.log(undefined && undefined); //undefined,第一个操作数时undefined,不会管第二个操作数