12-非布尔值的逻辑运算符
5.8.2 非布尔值的逻辑运算符
如果使用布尔值做逻辑运算,结果只能为布尔值。如果使用非布尔值,能够确定结果的那个值就是逻辑运算的结果,如下表5-5和表5-6。
| x | y | x && y | | :----- | :----- | :----- | :----- | :----- | | falsy | falsy | x(falsy) | | falsy | truthy | x(falsy) | | truthy | falsy | y (falsy) | | truthy | truthy | y(truthy) |
| x | y | x || y | | :----- | :----- | :----- | :----- | :----- | | falsy | falsy | y (falsy) | | falsy | truthy | y(truthy) | | truthy | falsy | x(truthy) | | truthy | truthy | x(truthy) |
注意,如果将结果转换成布尔值,转换后的结果与在布尔值上使用与和或的结果一致。逻辑运算符的操作中可以用一些“快捷方式”。下面就是一个很常见的例子:
const options = suppliedOptions || { name: "Default" }
记住,对象(即便是空对象)的值永远为真。所以如果 suppliedOptions 是一个对象, options 将引用 suppliedOptions 。如果没有任何类型,在这种情况下, suppliedOptions 值将为 null 或 undefined , options 也会有一个默认值。
在使用非的时候,没有理由不返回一个布尔值,所以非运算符(!)永远返回布尔值,不管操作数是什么。如果操作数是真,则返回false,反之返回true。