js逻辑操作符(!,&&,||)与运算符优先级

时间:2023-01-28 21:34:18

js中的逻辑操作符包括!(逻辑非),&&(逻辑与),||(逻辑或),
!逻辑非:对一个操作数的布尔值取反,可通过!!取得操作数的布尔值类型,如下代码(空数组的布尔值为true,空字符的布尔值为false)

console.log(!0);//true
console.log(!!0);//false
console.log(![]);//false
console.log(!![]);//true
console.log(!"");//true
console.log(!!"");//false

&&逻辑与:二元操作符,第一个操作数的布尔值为true,则值为第二个操作数,第一个操作符的布尔值为false则值为第一个操作数。

var result=true&&3;//3
var result=1&&3;//3
var result=[]&&'';//''
var result=''&&3;//''
var result=false&&3;//false
var result=null&&true;//null

    要注意的是逻辑或是短路操作,如果第一个操作数的布尔值是false,则第二个操作数不被执行,如下代码:

var num=0;
var result=false&&num++;
console.log(num);//0;

||逻辑或:与逻辑与的操作很相似,但取值刚好相反,当第一个操作数的布尔值为true时,则值为第一个操作数,第一个操作数的布尔值为false时,则值为第二个操作数。同样逻辑或的操作是短路操作,当第一个操作数的布尔值为true时,第二个操作数不会被执行。示例代码:

var result=true||3;//true
var result=1||3;//1
var result=[]||'';//[]
var result=''||3;//3
var result=false||3;//3
var result=null||true;//true

var num=0;
var result=true||num++;
console.log(num);//0

运算符优先级详细参考链接:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence