对于编程语言来说,逻辑操作符跟相等操作符几乎同样重要。
逻辑操作符一共三个,!(逻辑非)、&&(逻辑与)、||(逻辑或)。
1 !(逻辑非)
这个操作符始终返回布尔值,无论什么数据类型,逻辑非操作符始终先将操作数据转换为布尔值,之后在进行取反。
console.log(!false); // true
console.log(!0); // true
遵循:
- 如果操作数是对象,则返回 false。
- 如果操作数是空字符串,则返回 true。
- 如果操作数是非空字符串,则返回 false。
- 如果操作数是数值 0,则返回 true。
- 如果操作数是非 0 数值(包括 Infinity),则返回 false。
- 如果操作数是 null,则返回 true。
- 如果操作数是 NaN,则返回 true。
- 如果操作数是 undefined,则返回 true。
2 &&(逻辑与)
逻辑与操作符可用于任何类型的操作数,不限于布尔值。规则同真则真,有假则假
let result = true && false;
针对都是布尔值,遵循两个都是true,则为true,有一个为false,则为false,如果两个都是false,则为false。
如果不止布尔值,则遵循:
- 如果第一个操作数是对象,则返回第二个操作数。
- 如果第二个操作数是对象,则只有第一个操作数求值为 true 才会返回该对象。
- 如果两个操作数都是对象,则返回第二个操作数。
- 如果有一个操作数是 null,则返回 null。
- 如果有一个操作数是 NaN,则返回 NaN。
- 如果有一个操作数是 undefined,则返回 undefined。
console.log({} && null); //null
console.log(null && {}); //null
console.log({} && undefined) //undefined
console.log(undefined && {}); //undefined
console.log({} && NaN); //NaN
console.log(NaN && {}); //NaN
3 ||(逻辑或)
与逻辑与一样,可用于任何类型的操作数,不限于布尔值。同假则假,有真则真
let result = true || false;
针对都是布尔值,遵循两个都是true,则为true,有一个为true,则为ture,如果两个都是false,则为false。
如果不止布尔值,则遵循:
- 如果第一个操作数是对象,则返回第一个操作数。
- 如果第一个操作数求值为 false,则返回第二个操作数。
- 如果两个操作数都是对象,则返回第一个操作数。
- 如果两个操作数都是 null,则返回 null。
- 如果两个操作数都是 NaN,则返回 NaN。
- 如果两个操作数都是 undefined,则返回 undefined。
console.log({} || null); //{}
console.log(null || {}); //{}
console.log({} || undefined) //{}
console.log(undefined || {}); //{}
console.log({} || NaN); //{}
console.log(NaN || {}); //{}
正文完