【青山学js】布尔操作符,! && ||

这是我参与更文挑战的第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的值不存在时给我们一个默认值。

好了,美好的一天又结束了,祝大家有个好梦,晚安。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享