javascript基础从小白到高手系列十一:布尔操作符

本文详细解释了编程语言中布尔操作符,如逻辑非(!),逻辑与(&&)和逻辑或(||)的工作原理,包括它们的真值表、转换规则以及短路特性。通过实例演示了如何在实际编程中运用这些操作符进行条件判断和值赋值。
摘要由CSDN通过智能技术生成

对于编程语言来说,布尔操作符跟相等操作符几乎同样重要。如果没有能力测试两个值的关系,那
么像if-else 和循环这样的语句也没什么用了。布尔操作符一共有3 个:逻辑非、逻辑与和逻辑或。

  1. 逻辑非
    逻辑非操作符由一个叹号(!)表示,可应用给ECMAScript 中的任何值。这个操作符始终返回布
    尔值,无论应用到的是什么数据类型。逻辑非操作符首先将操作数转换为布尔值,然后再对其取反。换
    句话说,逻辑非操作符会遵循如下规则。
     如果操作数是对象,则返回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()。无论操作数是什么类型,第一个叹号总会返回布尔值。第二个叹号对该布尔值取反,
    从而给出变量真正对应的布尔值。结果与对同一个值使用Boolean()函数是一样的:
    console.log(!!“blue”); // true
    console.log(!!0); // false
    console.log(!!NaN); // false
    console.log(!!“”); // false
    console.log(!!12345); // true
  2. 逻辑与
    逻辑与操作符由两个和号(&&)表示,应用到两个值,如下所示:
    let result = true && false;
    3.5 操作符 65
    8
    1
    2
    3
    4
    5
    14
    6
    7
    9
    10
    11
    13
    12
    逻辑与操作符遵循如下真值表:
    第一个操作数 第二个操作数 结 果
    true true true
    true false false
    false true false
    false false false
    逻辑与操作符可用于任何类型的操作数,不限于布尔值。如果有操作数不是布尔值,则逻辑与并不
    一定会返回布尔值,而是遵循如下规则。
     如果第一个操作数是对象,则返回第二个操作数。
     如果第二个操作数是对象,则只有第一个操作数求值为true 才会返回该对象。
     如果两个操作数都是对象,则返回第二个操作数。
     如果有一个操作数是null,则返回null。
     如果有一个操作数是NaN,则返回NaN。
     如果有一个操作数是undefined,则返回undefined。
    逻辑与操作符是一种短路操作符,意思就是如果第一个操作数决定了结果,那么永远不会对第二个
    操作数求值。对逻辑与操作符来说,如果第一个操作数是false,那么无论第二个操作数是什么值,结
    果也不可能等于true。看下面的例子:
    let found = true;
    let result = (found && someUndeclaredVariable); // 这里会出错
    console.log(result); // 不会执行这一行
    上面的代码之所以会出错,是因为someUndeclaredVariable 没有事先声明,所以当逻辑与操作符
    对它求值时就会报错。变量found 的值是true,逻辑与操作符会继续求值变量someUndeclaredVariable。
    但是由于someUndeclaredVariable 没有定义,不能对它应用逻辑与操作符,因此就报错了。假如变
    量found 的值是false,那么就不会报错了:
    let found = false;
    let result = (found && someUndeclaredVariable); // 不会出错
    console.log(result); // 会执行
    这里,console.log 会成功执行。即使变量someUndeclaredVariable 没有定义,由于第一个
    操作数是false,逻辑与操作符也不会对它求值,因为此时对&&右边的操作数求值是没有意义的。在使
    用逻辑与操作符时,一定别忘了它的这个短路的特性。
  3. 逻辑或
    逻辑或操作符由两个管道符(||)表示,比如:
    let result = true || false;
    逻辑或操作符遵循如下真值表:
    第一个操作数 第二个操作数 结 果
    true true true
    true false true
    false true true
    false false false
    66 第3 章 语言基础
    与逻辑与类似,如果有一个操作数不是布尔值,那么逻辑或操作符也不一定返回布尔值。它遵循如
    下规则。
     如果第一个操作数是对象,则返回第一个操作数。
     如果第一个操作数求值为false,则返回第二个操作数。
     如果两个操作数都是对象,则返回第一个操作数。
     如果两个操作数都是null,则返回null。
     如果两个操作数都是NaN,则返回NaN。
     如果两个操作数都是undefined,则返回undefined。
    同样与逻辑与类似,逻辑或操作符也具有短路的特性。只不过对逻辑或而言,第一个操作数求值为
    true,第二个操作数就不会再被求值了。看下面的例子:
    let found = true;
    let result = (found || someUndeclaredVariable); // 不会出错
    console.log(result); // 会执行
    跟前面的例子一样,变量someUndeclaredVariable 也没有定义。但是,因为变量found 的值
    为true,所以逻辑或操作符不会对变量someUndeclaredVariable 求值,而直接返回true。假如把
    found 的值改为false,那就会报错了:
    let found = false;
    let result = (found || someUndeclaredVariable); // 这里会出错
    console.log(result); // 不会执行这一行
    利用这个行为,可以避免给变量赋值null 或undefined。比如:
    let myObject = preferredObject || backupObject;
    在这个例子中,变量myObject 会被赋予两个值中的一个。其中,preferredObject 变量包含首
    选的值,backupObject 变量包含备用的值。如果preferredObject 不是null,则它的值就会赋给
    myObject;如果preferredObject 是null,则backupObject 的值就会赋给myObject。这种模
    式在ECMAScript 代码中经常用于变量赋值,本书后面的代码示例中也会经常用到。
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值