这是我参与更文挑战的第15天,活动详情查看: 更文挑战
在js中,布尔操作符是我们非常常见的操作符,它和相等操作符几乎相同重要。布尔操作符其实类似于数学中的逻辑运算符,在js中,布尔运算符共有三个——逻辑与、逻辑或和逻辑非,下面我们就一个一个的来介绍一下他们呢。
逻辑非
逻辑非运算符比较简单,仅由一个英文状态的感叹号(!)表示,运用的时候只需要把它放在目标值的前面即可,类似于这样 !data
,这样我们就可以渠道变量data对应的布尔类型的反值了,没错,逻辑非运算符总返回一个布尔值,它可以运用于任何类型的数据类型前面,但是运算的时候会将他们转换为布尔值(不影响原值)再进行取反值的操作。具体的转换规则如下:
- 如果操作数是对象,则返回false。
- 如果操作数是空字符串,则返回true。
- 如果操作数是非空字符串,则返回false。
- 如果操作数是数值0,则返回true。
- 如果操作数是非0数值(包括Infinity),则返回false。
- 如果操作数是null,则返回true。
- 如果操作数是NaN,则返回true。
- 如果操作数是undefined,则返回true。
示例如下:
console.log(!false); // true
console.log(!"blue"); // false
console.log(!0); // true
console.log(!NaN); // true
console.log(!"") // true
console.log(!12345) // false
复制代码
运用这个特性,我们也可以用两个逻辑非运算符将一个数据转换为布尔类型,其作用同Boolean()
相同
console.log(!!"") // false
复制代码
逻辑与操作符
逻辑与操作符由两个和号(&&)表示,应用到两个值中间,当两个值同时为true
时,逻辑与操作符最终返回的结果才为true
,否则就为false
和逻辑非操作符一样,逻辑与操作符可以用于任何数据类型,不仅限于布尔值,不同的是,他的返回值并不一定是布尔值,逻辑非操作符的返回值取决于它左右的两个值。如果第一个值转为布尔值为true
时,则返回第二个值,如果第一个值转为布尔值为false
时,则返回第二个值,返回的原值哦,并不会进行类型转换。
11 && 22 // 22
99 && true // true
'hello' && 'world' // 'world'
{} && 'hi' // {}
false && 123 // false
null && 'hello' // null
undefined && 'world' // undefined
NaN && 666 // NaN
复制代码
逻辑与操作符是一个短路操作符,意思就是如果第一个操作数决定了结果时(转换为布尔值为false),就永远不会对第二个操作数进行求值,我们可以利用这一特性代替简单的if操作。
let a
let b = 1
a && b++
等价于
if (a) {
b++
}
复制代码
逻辑或操作符
逻辑或操作符大多特性与逻辑与操作符相同,这里就不重复了,只说不同的地方。
相比于逻辑与操作符那么“严格”,逻辑或操作符要宽容的多,逻辑或操作符用法基本与逻辑与操作符一样,不同的时它的判断规则,只要两个操作数中有一个为true
就会返回true
,如果其中有一个操作数部位布尔值的话,则会判断第一个数转为布尔值是否为true
,如果是,则返回第一个值的原值,如果不是,则直接返回第二个值。
与逻辑与操作符相似,逻辑或操作符也有短路的特质,不过和逻辑与操作符刚好相反,逻辑或操作符是只要第一个操作数转换为布尔值为true
,就不再往下进行,利用这个特性,我们可以避免给变量赋值null或者undefined。例如
let a = b || '默认值'
复制代码
上面的代码,可以在b的值不存在时给我们一个默认值。
好了,美好的一天又结束了,祝大家有个好梦,晚安。