逻辑与和逻辑或
逻辑或
逻辑或由(||)表示,有两个操作数
逻辑或的真值表示如下:
第一个操作数 | 第二个操作数 | 结果 |
---|---|---|
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,不会管第二个操作数