반응형
느낌표 두개 !!
연산자는 자바스크립트에서 흔히 "double negation" 또는 "double bang"이라고 불린다. 이 연산자는 값의 truthiness를 명시적으로 boolean 타입으로 변환하는 데 사용된다.
사용 예
!!
연산자의 일반적인 사용 예는 다음과 같다:
const value = "some string";
// Double negation to convert to boolean
const isTruthy = !!value;
console.log(isTruthy); // true
동작 원리
- 첫 번째
!
는 값을 부정(negate)하여 논리적 반전을 수행한다. 이 단계에서 truthy 값은false
로, falsy 값은true
로 변환된다. - 두 번째
!
는 다시 한 번 부정하여 원래 값의 truthiness에 따라true
또는false
로 변환한다.
이를 통해 어떤 값이든 명확하게 true
또는 false
로 변환할 수 있다. !!
연산자는 조건문에서 값의 존재 여부를 boolean 값으로 평가할 때 유용하다.
예제
const value1 = null;
const value2 = "hello";
const value3 = 0;
console.log(!!value1); // false (null is falsy)
console.log(!!value2); // true ("hello" is truthy)
console.log(!!value3); // false (0 is falsy)
!!
연산자는 자바스크립트에서 값의 truthiness를 명확하게 평가하고자 할 때 널리 사용되는 패턴이다.
왜 !!
를 사용하는가?
- Truthy/Falsy 값 평가: 자바스크립트에서는 여러 값들이 truthy 또는 falsy로 평가된다. 예를 들어, 빈 문자열(
""
),0
,null
,undefined
등은 falsy로 평가되고, 나머지 값들은 대부분 truthy로 평가된다. - 명시적 boolean 변환:
!!
연산자를 사용하면 어떠한 값이라도 명확히 boolean 타입으로 변환된다. 첫 번째!
는 값을 논리적으로 반전시키고, 두 번째!
는 다시 반전시켜 원래 값이 truthy인지 falsy인지에 따라true
또는false
를 반환한다.
예제
- 명시적 boolean 변환을 사용하지 않은 경우:
{userResponse?.data.user ? ( <span>User exists</span> ) : ( <span>No user</span> )}
- 명시적 boolean 변환을 사용한 경우:
{!!userResponse?.data.user ? ( <span>User exists</span> ) : ( <span>No user</span> )}
설명
userResponse?.data.user
는userResponse
,userResponse.data
, 그리고userResponse.data.user
가 모두 존재할 때만true
로 평가된다. 하지만 이 표현식 자체는 boolean이 아닐 수도 있다.!!userResponse?.data.user
는userResponse?.data.user
가 존재하면true
, 존재하지 않으면false
로 명확하게 boolean 값을 반환한다.
결론
삼항 연산자에서 !!userResponse?.data.user
를 사용하는 이유는 조건을 boolean 값으로 명확하게 평가하여 코드의 가독성과 예측 가능성을 높이기 위함이다. 이는 특히 조건문을 작성할 때 명확한 boolean 값을 요구하는 경우에 유용하다.
https://ko.javascript.info/logical-operators
논리 연산자
ko.javascript.info
반응형
'Frontend > Javascript Typescript' 카테고리의 다른 글
삼항연산자보다 더 간결하게 쓰기(논리연산자, nullish 널 병합연산자 `??`) (0) | 2024.12.09 |
---|---|
[TIL] useEffect/onClick 내에서 비동기 처리 (0) | 2024.08.08 |
Javascript 클로저 (0) | 2024.08.08 |
디바운싱과 쓰로틀링(Debouncing&Throttling) (0) | 2024.08.08 |
Node.js란(등장배경/내부구조/작동방식) (5) | 2024.07.23 |