Skip to content
Skip to content

boolean 타입

boolean 타입에 해당하는 값은 true, false 두 가지 밖에 없습니다. 이 값들을 '진리값'이라고 부릅니다. 프로그래밍에서의 진리값은 어떤 조건이 참인지 거짓인지를 나타내기 위해 사용됩니다.

1 < 2 // true
1 > 2 // false
3 === 3 // true
3 !== 3 // false
Number.isFinite(Infinity) // false
Number.isNaN(NaN) // true
'hello'.includes('ll') // true

논리 연산자

JavaScript는 진리값에 대한 여러 연산을 지원합니다.

// 논리 부정 (logical NOT)
!true // false
!false // true
// 논리합 (logical OR)
true || true // true
true || false // true
false || true // true
false || false // false
// 논리곱 (logical AND)
true && true // true
true && false // false
false && true // false
false && false // false
// 할당 연산 (assignment operators), ES2021
// ||= 는 변수의 값이 true이면 아무 변화가 일어나지 않고 false이면 우항의 값이 변수에 할당됩니다.
let x = false
x ||= true // true
// &&= 는 변수의 값이 false이면 아무 변화가 일어나지 않고 true이면 우항의 값이 변수에 할당됩니다.
let y = true
y &&= false // false
// ||=와 &&=는 각각 아래 연산과 같은 동작을 합니다.
x = x || true
y = y && false
// 삼항 연산자 (ternary operator)
true ? 1 : 2 // 1
false ? 1 : 2 // 2

연산자 우선순위 (Operator Precedence)

한 구문에 여러 개의 연산자를 이어서 쓴 경우, 어떤 연산자는 먼저 계산되고 어떤 연산자는 나중에 계산됩니다. 이는 연산자 우선순위(operator precedence)에 의해 결정됩니다. 자세한 내용은 MDN 링크를 참고해주세요.

true || (true && false) // true
;(true || true) && false // false
true || (false && false) // true
;(true || false) && false // false

논리 연산의 여러 가지 법칙

논리 연산에는 여러 가지 법칙이 있습니다. 프로그래밍을 하며 논리 연산을 할 일이 많기 때문에, 이 법칙들을 알아두면 도움이 됩니다. 각 법칙이 성립하는 이유를 잘 생각해 보세요. 경우의 수를 모두 생각해보거나, 벤 다이어그램을 그려보세요.1

// a, b, c가 **모두 boolean 타입**이라고 할 때, 다음 식의 결과값은 a, b, c의 값과 관계 없이 모두 true 입니다.
// 이중 부정
!!a === a
// 교환 법칙
a || b === b || a
a && b === b && a
// 결합 법칙
a || b || c === a || b || c
a && b && c === a && b && c
// 분배 법칙
a || ((b && c) === (a || b) && (a || c))
;(a && (b || c) === (a && b)) || (a && c)
// 흡수 법칙
a && (a || b) === a
a || (a && b) === a
// 드 모르간의 법칙
!(a || b) === !a && !b
!(a && b) === !a || !b
// 그 밖에...
a || true === true
a || false === a
a && true === a
a && false === false
a || !a === true
a && !a === false
a || a === a
a && a === a

truthy & falsy

JavaScript에서는 boolean 타입이 와야 하는 자리에 다른 타입의 값이 와도 에러가 나지 않고 실행됩니다.

if (1) {
console.log('이 코드는 실행됩니다.')
}
if (0) {
console.log('이 코드는 실행되지 않습니다.')
}

이렇게 어떤 값들은 true로, 어떤 값들은 false로 취급되는데, 전자를 truthy, 후자를 falsy라고 부릅니다. JavaScript에서는 아래의 값들은 모두 falsy이고, 이를 제외한 모든 값들은 truthy입니다.

  • false
  • null
  • undefined
  • 0
  • NaN
  • ''

truthy와 falsy를 활용하면 짧은 코드를 작성할 수 있지만, 코드의 의미가 불분명해지거나 논리적으로 놓치는 부분이 생길 수 있기 때문에 주의해서 사용해야 합니다.

다른 타입의 값을 진리값으로 변환하기

어떤 값을 명시적으로 boolean 타입으로 변환해야 할 때가 있는데, 그 때에는 두 가지 방법을 사용할 수 있습니다.

!!'hello' // true
Boolean('hello') // true

부정 연산자(!) 뒤의 값이 truthy이면 false, falsy이면 true를 반환하는 성질을 이용해서 이중 부정을 통해 값을 boolean 타입으로 변환할 수 있습니다. 혹은 Boolean 함수를 사용해도 됩니다. 전자가 간편하기 때문에 많이 사용되는 편입니다.


  1. !은 여집합, ||는 합집합, &&는 교집합, true는 전체집합, false는 공집합으로 생각하면 됩니다.