逻辑操作符一共三个,!(逻辑非)、&&(逻辑与)、||(逻辑或)。
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 || {}); //{}