JavaScript-布尔操作符

布尔操作符一共有三个:非(NOT)与(AND)或(OR)

1.逻辑非

  • 简言之,将任何值转换为一个布尔值,并对其取反,返回结果始终为布尔值。
  • 符号表示:感叹号(!)
  • 遵守规则:
1.如果操作数为对象,返回 false
2.如果操作数为字符串,空字符串返回 true;非空返回 false;
3.如果操作数为数值,0 返回 true;任意非 0 数值返回 false;
4.如果操作数是 null,返回 true;
5.如果操作数是 NaN,返回 true;
6.如果操作数是 undefined,返回 true。

💡之前刚了解这些规则时,没有做统一的总结,总会对部分操作数感到疑惑。例如:!'true'!'false'!'0',等等。归根结底还是,自己没有掌握逻辑非的规则。现在看来,这些没什么好疑问的。

2.逻辑与

  • 可以应用于任何类型的操作数,而不仅仅是布尔值。如果其中一个操作数不是布尔值的情况,则不一定返回布尔值。
  • 符号表示:两个和号(&&)
  • 真值表:
第一个操作数 第二个操作数 结果
true true true
true false false
false true false
false false false
  • 遵守规则:
逻辑与属于短路操作,这就意味着:
1.如果第一个操作数求值结果为false,就不会对第二个操作数求值,直接返回第一个操作数的值;
2.如果第二个操作数求值结果为true,则返回第二个操作数的值。
  • e.g.
/*(对a值求值结果为false,不会继续对b求值,直接返回a的值)*/
var a = null, b =  '第二个操作数';
console.log(a && b); // null

a = null; b = undefined;
console.log(a && b); // null

a = 0; b = '第二个操作数';
console.log(a && b); // 0

/*(对a值求值结果为true,继续对b求值,无论求值结果,都直接返回b值)*/
a = []; b = '第二个操作数';
console.log(a && b); // 第二个操作数

a = {}; b = '第二个操作数';
console.log(a && b); // 第二个操作数

a = '第一个操作符'; b = null;
console.log(a && b); // null

3.逻辑或

  • 可以应用于任何类型的操作数,而不仅仅是布尔值。如果其中一个操作数不是布尔值的情况,则不一定返回布尔值。
  • 符号表示:两个竖线符号(||)
  • 真值表:
第一个操作数 第二个操作数 结果
true true true
true false true
false true true
false false false
  • 遵守规则:
逻辑或属于短路操作,这就意味着:
1.如果第一个操作数求值结果为true,则不会对第二个操作数去求值,直接返回第一个操作数值。
2.如果第一个操作数求值结果返回false,直接返回第二个操作数。
  • e.g.
/*(对a求值结果为true,则不对第二个操作数求值,直接返回a值)*/
var a =[], b =  '第二个操作数';
console.log(a || b); // []

a ={}; b = undefined;
console.log(a || b); // []

a = '第一个操作数'; b = '第二个操作数';
console.log(a || b); // 第一个操作数

/*(对a求值结果为false,继续对b进行求值,无论求值结果如何,直接返回b值)*/
a = null; b = '第二个操作数';
console.log(a || b); // 第二个操作数

a = undefined; b = null;
console.log(a || b); // null

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容