!! 연산자
코드를 보던 중,
x
function somthing () {
let a;
/* ... */
return !!a;
}
와 같은 코드를 보게 되었습니다.
여기서 return !!a;
의 !! 이 어떤 이유에서 쓰였는지 의문이 들어 알아보았습니다.
사실 !! 이라는 연산자가 존재하는 것은 아닙니다. ! 는 논리연산자 중 부정 연산자인데, !! 은 단순히 부정연산자가 두 번 쓰인 것이었습니다.
! 는 true인 값을 false 로, false인 값을 true로 바꾸는 것으로 알고있었는데, 왜 ! 를 두번 사용하여 원래대로 바꾼 것인지 의문이었습니다. MDN 문서를 보면 다음과 같이 나와있습니다.
!(피연산자)와 같이 사용하여, 피연산자가 true로 변환될수 있을경우 false,
불가능한경우 false 를 반환한다.
왜 문서에서 '피연산자가 true 로 변환될 수 있는 경우, 불가능한 경우' 라고 하였을까요.
문서에서 말하는 그 변환될 수 있는 경우란 Truthy 와 Falsy 값을 말하는 것 이었습니다.
간단하게 설명하면,
Truthy 는 조건문에서 true 로 간주되는 것, Falsy는 조건문에서 false 로 간주되는 것 입니다.
그래서 Truthy 인지 Falsy 인지 알수 있는 방법은 간단합니다. if 조건문에 넣어보면 됩니다.
xxxxxxxxxx
if ( value ) {
// value 는 Truthy 이다
} else {
// value 는 Falsy 이다.
}
Falsy 인 값 의 종류를 보면 그렇게 많지 않습니다.
- false
- 0 (zero)
- '' (빈 문자열)
- "" (빈 문자열)
- null
- undefined
- NaN
그리고 이를 제외한 나머지는 모두 Truthy 입니다. 가령 위에는 없지만 Falsy 하게 보이는
- '0' (string)
- "0" (string)
- "false" (string)
- [] (empty array)
- {} (object)
이것들 모두 Truthy 입니다.
그럼 다시 본론으로 들어가서 ! 연산자의 경우,
Truthy 를 false 로, Falsy 를 true 로 바꾸는 연산자 라고 할 수 있습니다. 그래서 !! 이렇게 부정 연산자를 두 번 사용하는 것은,
Falsy -> false, Truthy -> true 로 형변환 하는 용도로 사용된다는 것을 알게 되었습니다.
xxxxxxxxxx
var a;
a; // undefined (falsy)
!a; // true
!!a; // false
'Javascript' 카테고리의 다른 글
Object Type 알아내기 (0) | 2019.03.12 |
---|