double-exclamation-marks

!! 연산자

코드를 보던 중,

와 같은 코드를 보게 되었습니다.

여기서 return !!a;!! 이 어떤 이유에서 쓰였는지 의문이 들어 알아보았습니다.

사실 !! 이라는 연산자가 존재하는 것은 아닙니다. ! 는 논리연산자 중 부정 연산자인데, !! 은 단순히 부정연산자가 두 번 쓰인 것이었습니다.

 

!true인 값을 false 로, false인 값을 true로 바꾸는 것으로 알고있었는데, 왜 ! 를 두번 사용하여 원래대로 바꾼 것인지 의문이었습니다. MDN 문서를 보면 다음과 같이 나와있습니다.

!(피연산자)와 같이 사용하여, 피연산자가 true로 변환될수 있을경우 false,

불가능한경우 false 를 반환한다.

왜 문서에서 '피연산자가 true 로 변환될 수 있는 경우, 불가능한 경우' 라고 하였을까요.

문서에서 말하는 그 변환될 수 있는 경우란 TruthyFalsy 값을 말하는 것 이었습니다.

간단하게 설명하면,

Truthy 는 조건문에서 true 로 간주되는 것, Falsy는 조건문에서 false 로 간주되는 것 입니다.

그래서 Truthy 인지 Falsy 인지 알수 있는 방법은 간단합니다. if 조건문에 넣어보면 됩니다.

 

 

Falsy 인 값 의 종류를 보면 그렇게 많지 않습니다.

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

그리고 이를 제외한 나머지는 모두 Truthy 입니다. 가령 위에는 없지만 Falsy 하게 보이는

  • '0' (string)
  • "0" (string)
  • "false" (string)
  • [] (empty array)
  • {} (object)

이것들 모두 Truthy 입니다.

 

그럼 다시 본론으로 들어가서 ! 연산자의 경우,

Truthyfalse 로, Falsytrue 로 바꾸는 연산자 라고 할 수 있습니다. 그래서 !! 이렇게 부정 연산자를 두 번 사용하는 것은,

Falsy -> false, Truthy -> true형변환 하는 용도로 사용된다는 것을 알게 되었습니다.

 

'Javascript' 카테고리의 다른 글

Object Type 알아내기  (0) 2019.03.12

+ Recent posts