js -- 逻辑运算符

240 阅读2分钟

js -- 逻辑运算符

js有三种逻辑运算符:||(或),&&(与),!(非)。

他们可以用于任何数据类型,结果也可以是任意类型。

三种运算符会将操作数转化为boolean值再参与运算。

返回的值是操作数的初始形式,不会做布尔转换。

||(或)运算符

语法: let result = value1 || value2 || value13

返回第一个真值,真值之后的操作数不再执行。

例如:

let a = true||false
let b = false || true
let res = 0 
function sum() {  res = 3+4 }
 (1 + 2) || sum()
a // true
b //true
res  // 0

如果操作数都不是真值,返回最后一个操作数。

例如:

let a = 0 || false || null
a // null

&& (与)运算符

语法: let result = value && value1 && value2

总是返回第一个假值。假值之后的操作数不再执行。

例如:

let a = 1 && 0 && 1
let b = 0 && 1 && 1
let res = 0 
function sum() {  res = 3+4 }
 1-1 && sum()
a // 0
b // 0
res // 0

如果都为真值,返回最后一个操作数。

例如:

let a = 1 && 6 && 9
a // 9

&& 可以简化if (不建议这样使用,可读性不好)

例如:

let x = 1
 x>0 && console.log(x)
 // 1

!(非)运算符

语法:let result = ! value

运算符会任意值转化为布尔值并取反。

例如:

let a = !1
let b = !false
a // false
b // true

可以使用!!将一个任意值转化为布尔值。 (类似于Boolean())

例如:

let a = !!null
let b = !!true
a // false
b // true

优先级

非运算符 ! 的优先级在所有逻辑运算符里面最高,所以它总是在 &&|| 之前执行。

&& 优先级比||优先级高。

例如:

 1 && 2 || 3 && 4 等同于  (1&&2) || (3 && 4)

??空值合并运算符

语法: let result = value ?? value1

如果value不为nullundefined则返回value,否则返回value1。

例如:

let a = null 
let b = undefined
let c = 0
a ?? 'a'   // 'a'
b ?? 'b' // 'b'
c ?? 'c'   // 0

??|| 可以以相同的方式使用,但||无法区分false0空字符串null/undefined

例如:

let a = fasle
let b = 12
a || '||'  // '||'
a ?? '??' // fasle
b || '||'  // 12
b ?? '??' // 12

?? 运算符的优先级相当低 。 在=?: 之前计算,但在+*等之后计算。

例如:

    0??2 ?'111':'222' 
    // '222'
    1-1 ?? '0000'
    // 0

js禁止将&&|| 运算符一起使用,除非使用括号明确指定了优先级。

例如:

let x = 1 && 2 ?? 3  // Uncaught SyntaxError: Unexpected token '??'
let y = (1 && 2) ?? 3   
y  //2