逻辑运算符

Js中提供了三种逻辑运算符

  • !非
  • &&与
  • || 或

!非

  • !可以用来对一个值进行非运算
  • 所谓非运算就是对一个布尔值进行取反操作
    true变false false变true
    例如:
    var a=true;
    a=!a;
    console.log(a); 结果是false
  • 如果对一个值进行两次取反,它不会变化
    例如:
    var a=true;
    a=!!a;
    console.log(a); 结果还是true
  • 如果对非布尔值进行运算,则会先将其转化为布尔值然后再取反

例如:
var a=123;
a=!a;
console.log(a); 结果是false
原因:
先将123转化为布尔值是true,再取反就是false

可以利用这一特点来将任意数据类型转换为布尔值,
对任意数据类型取两次反,来将其转换为布尔值

例如:
var b=“hello”;
b=!!b;
console.log(b); 结果是true
原因:
先将字符串hello转换为布尔值是true,取第一次反为false,再取第二次反就是true

&& 与
布尔值的与运算

  • &&可以对符号两侧的值进行与运算并将结果返回
  • 运算规则:
  • 两个值中只要有一个值为false,就返回false
    例如:
    var result=true && false;
    console.log(result); 结果是false
  • 只有两个值都为true,才返回true
    例如:
    var result=true && true;
    console.log(result); 结果是true
  • js中的“与”是短路的与,如果第一个值是false,则不会再 看第二个值

例如:
var result=false && alert(“出不出来”);
console.log(“result=”+result); 结果是false
浏览器不会执行第二条语句会直接输出false

非布尔值的与运算
会先将其转换成布尔值,然后在运算并返回原值
运算规则:

  • 如果两个值都为true,则会返回后面的
    var result=1 && 2;
    console.log(result); 结果是2
  • 有一个为false则返回false
result=0 && 2;
 console.log(result);      结果是0
  • 两个值都为false则返回前一个false
    result=NaN && 0;
    console.log(result); 结果是false

总结

  • 如果第一个值为true,则必然返回第二个值
  • 如果第一个值为false,则直接返回第一个值

|| 或

  • ||可以对符号两侧的值进行或运算并将结果返回
  • 布尔值的或运算
  • 运算规则:
    两个值都为false,则返回false
    result=false || false;
    console.log(result); 结果是false
    只要有一个值为true,就返回true
    result=true || false;
    console.log(result); 结果是true
  • js中的“或”是短路的或,如果第一个值是true,则不会再看第二个值

var result=true&& alert(“出不出来”);
console.log(“result=”+result); 结果是true
原因:
第一个值是true,浏览器不会执行第二条语句,直接输出true

非布尔值的或运算
会先将其转换成布尔值,然后在运算并返回原值
运算规则:

  • 如果第一个值为true,则直接返回第一个值
    result=1 || 2;
    console.log(“result=”+result); 结果是1
  • 如果第一个值为false,则必然返回第二个值
    result=0 || 2;
    console.log(“result=”+result); 结果是2