본문 바로가기

Backend/Javascript

[Javascript] - Boolean

Boolean Type (불 타입)

 

- 불 타입은 true, false 만 가질 수 있다.

 

- true, false 에 대해 typeof 연산자는 "boolean" 을 반환합니다.

 

관계 연산자
=== 같음
!== 같지 않음
< 보다 작음
<= 보다 작거나 같음
> 보다 큼
>= 보다 크거나 같음

 

- 관계 연산자에서 몇가지 특이 케이스

 

  • undefined < null // false
  • undefined > null // false
  • undefined === null // false
  • NaN === NaN // false
  • NaN !== NaN // true
  • "11" < "2" // true
  • "2" < 5 // true
  • 5 < "11" // true

- 값이 NaN 인지를 확인하려면 반드시 Number.isNaN(x) 을 사용해야 한다.

 

- 반복문의 종료 조건으로 === 을 사용하려면, 종료 조건을 나타내는 변수 값이 안전한 정수 범위 안에 있을 때만 사용해야 합니다.

 

안전한 범위 안이라 해도, === 보다 >= 연산자가 더 안전합니다.

 

- 자바스크립트에서 == 와 != 는 절대 사용하지 않아야 합니다.

 

이 연산자들은 비교 연산을 하기 전에 강제로 형변환을 하기에, false positives 와 false negatives 가 발생할 수 있습니다.

꼭 === 와 !== 를 사용해야 합니다.

 

- 불이 제대로 쓰이는 위치

 

  • if 문의 조건문 위치
  • while 문의 조건문 위치
  • for 문의 조건문 위치
  • do 문의 조건문 위치
  • ! 연산자의 피연산자 위치
  • && 연산자의 양쪽 피연산자
  • || 연산자의 양쪽 피연산자
  • ? 와 : 로 구성된 삼항 연산자의 첫 번째 피연산자 위치
  • Array 의 filter, find, findIndex, indexOf 메서드의 첫 번째 인자로 전달되는 함수의 반환 값

하지만 자바스크립트에선 위의 나열된 위치에 아무 값이나 들어갈 수 있습니다. 이러한 모든 값은 '불인 척하는' 자료형에 포함됩니다. 해당 자료형에 속한 값은 '참이라고 볼 수 있는 값(truthy)' 이거나 '거짓이라고 볼 수 있는 값(falsy)' 둘 중 하나입니다.

 

- 거짓이라고 볼 수 있는 값

 

  • false
  • null
  • undefined
  • "" (빈 문자열)
  • 0
  • NaN

위의 값 외 다른 모든 값은 '참이라고 볼 수 있는 값' 에 해당합니다. 여기에는 빈 객체, 빈 배열, "false", "0" 같은 문자열도 포함되며

흔히들 개발 작업 중에 if ({}) 와 같이 빈객체를 false 라고 판단해 비교하는 실수를 자주 합니다.

'붙인 척하기' 는 C 언어의 관용구를 자바스크립트에서도 사용할 수 있도록 하기 위해 일부러 만든 것이지만 C 에선 0, FALSE, NULL, 문자열의 끝 와 같은 것을 단 하나의 값으로 표현하기에 이 부분이 자바스크립트와 달라 JS 에선 실수처럼 느껴집니다.

 

- 조건문에는 꼭 불 값을 쓰도록 합니다.

 

- not 연산자를 두 번 쓰는 방식은 단순화하는 것이 좋습니다.

 

!!p === p 는 오직 p가 불 값일 경우에만 정확합니다. p가 불 타입이 아니라면 !!p는 Boolean(p) 와 같은 값이지, p와 같은지는 알 수 없습니다. 몇몇 비교 연산자 및 논리 표현식 또한 다음과 같은 단순화된 표현이 가능합니다.

 

  • !(a === b) === (a !== b)
  • !(a <= b) === (a > b)
  • !(a > b) === (a <= b)
  • !(a >= b) === (a < b)
  • !(p && q) === !p || !q
  • !(p || q) === !p && !q

- 실무에서 실제로 모든 경우에 이를 지키긴 어렵지만, 최대한 '불인 척하는 값' 은 피하고 진짜 불 값을 사용하는게 좋습니다.

 

출처 : 자바스크립트는 왜 그 모양일까?

 

 

'Backend > Javascript' 카테고리의 다른 글

[Javascript] - Object  (0) 2020.10.31
[Javascript] - Array  (0) 2020.10.24
[Javascript] - Big Integer  (0) 2020.10.10
[Javascript] - Number  (0) 2020.10.03
[Javascript] - Name  (0) 2020.09.26