JavaScript中&&與&區別


0.簡介

昨晚看到一篇關於邏輯與和按位與的區別, 引起疑問后今天查完資料發現一些之前遺漏的細節。

邏輯與
按位與
在基礎語言中都有學習, 一個用於邏輯判斷,一個用於按位取與操作。日常業務中常用Boolean && expression來代替

if (Boolean) {
    expression
}

疑問: 除了標准用法, 當操作符兩邊為其他數據類型時, 又會返回什么值呢?

1. 預備知識-假值

即可以轉換為false(Boolean(expr) => false

  • null
  • NaN
  • 0
  • ''(空字符串)
  • undefined

2. 邏輯與

印象中的解釋是, 同時為才為真。真值表:

左邊 右邊 a && b 返回值
true true true
true false false
false true false
false false false

如果, 操作符兩邊不都是Boolean時, 又該如何返回呢?

console.log(7 && 8)   // 8
console.log(7 && 0)   // 0
console.log(0 && 8)   // 0

Number && Number 返回后者

console.log('a' && 'b')  // b
console.log(true && 'b')  // b
console.log('a' && true)  // true
console.log(false && 'b')  // false
console.log('a' && false)  // false

當字符串與布爾進行邏輯與時, 存在false則返回false, 否則, 返回后者

console.log('b' && null) // null
console.log('b' && NaN) // NaN
console.log('b' && 0) // 0
console.log('b' && '') // 空
console.log('b' && undefined) // undefined

console.log(null && 'b') // null
console.log(NaN && 'b') // NaN
console.log(0 && 'b') // 0
console.log('' && 'b') // 空
console.log(undefined && 'b') // undefined

邏輯與遇到假值時,另一個是真值, 返回假值

console.log(null && false) // null
console.log(false && null) // false

左右都為假值, 返回左邊

Logical AND (&&)

expr1 && expr2, 如果expr1可以轉化為真, 返回expr2; 否者, 返回 expr1。

等價於

if (expr1) {
    return expr2
} else {
    return expr1
}

3. 按位與

console.log(0b0011 & 0b0010)  // 2
console.log(3 & 2)   // 2

顯而易見, 分別把左右兩側轉為二進制后進行位運算

console.log(true & true)     // 1
console.log(true & false)    // 0
console.log(false & true)    // 0
console.log(false & false)   // 0

按位處理布爾值, 僅返回0后者1。等價於Boolean && Boolean ? 1 : 0

console.log(1 & true)     // 1
console.log(1 & false)     // 0
console.log(1 & null)     // 0
console.log(1 & NaN)     // 0
console.log(1 & '')     // 0
console.log(1 & undefined)     // 0

假值處理與Boolean類似

console.log(1 & [])     // 0
console.log(1 & [0])     // 0
console.log(1 & [1])     // 1
console.log(1 & [0,1])     // 0
console.log(1 & [1,0])     // 0
console.log(1 & {})     // 0
console.log(1 & '1')     // 1

1 & 非假值, 依然會返回1。 似乎被轉成數字進行運算。

console.log(Number([]))  // 0
console.log(Number([0])) // 0 
console.log(Number([1])) // 1
console.log(Number([0,1])) //0
console.log(Number([1,0])) // NaN
console.log(Number({})) // NaN
console.log('1') // 1

驗證發現, 與猜想基本一致。

Bitwise AND

按位操作符對這種二進制表示形式執行操作,但是它們返回標准的JavaScript數值。
a & b , 操作符兩邊同時為1時, 返回1

左邊 右邊 a & b 返回值
1 1 1
1 0 0
0 1 0
0 0 0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM