코드 리뷰에서 다른분들 코드를 보면서 다음과 같은 궁금증이 생겼다.
내 궁금증은 다음과 같았다.
저렇게 not 연산자를 두번사용해야하는 경우가 따로 있나요?
if 문에 그냥 undefined 가 들어가더라도 해당 if문은 동작을 하지 않을 것이라고 생각하는데, 분명 이유가 있어서 저렇게 쓰셨을텐데 잘 이해가 안갑니다.
실무를 할때 저런코드를 사용한다고 하시니 더더욱 알고싶어서 부득히 하게 메일까지 드리게되었습니다.
그렇다 저 로직을 짜신분의 메일로 해당 궁금증을 보냈는데, 정말 친절하게 답변해주셨다.
Answer
!! 를 사용하는 이유는 "명시적 boolean 형변환" 을 위함입니다.
말씀 주신대로
if (undefined) {...} 나
if (!!undefined) {...} 나
코드의 기능은 완전히 동일하나,
!! 연산은 조건식을 명시적으로 boolean 형으로 바꿔주어, 코드를 좀 더 명료하게 이해할 수 있도록 해준다는 데에 그 목적이 있습니다.
truthy value(ex. 0이 아닌 숫자, 빈 문자열이 아닌 문자열, object, array 등등) 는 !! 연산의 결과로 true 값을 가지게 되고,
falsy value(ex. 0, 빈 문자열, null, undefined 등등) 는 !! 연산의 결과로 false 값을 가집니다.
그래서 !! 연산자의 피연산자에 무슨 값이 들어오든 항상 boolean 형으로 형 변환이 이루어집니다.
결론적으로 !! 연산자를 사용하는 이유는 "가독성을 위함이다" 라고 설명 드렸지만.. 사실 저도 저 !! 연산자가 가독성을 그렇게 높여주는지는 잘 모르겠습니다(그래서 코드리뷰에 질문을 드린것이기도 하구요). 왜냐하면 저 코드를 이해하려면 결국 어떤 값들이 truthy value 인지, falsy value 인지 알고 있어야 하기 때문이에요.
Respect
답변해주신 한윤님 정말 감사합니다.
'공부기록 > Q&A' 카테고리의 다른 글
자바스크립트의 null type 에 대한 궁금증 (0) | 2022.07.11 |
---|---|
[웹 퍼블리싱] codepen (0) | 2022.06.16 |
퍼블리싱 질문 (0) | 2022.06.16 |
리덕스 툴킷 - 구조분해할당 관련 질문 (0) | 2022.06.12 |
[Redux Toolkit] A non-serializable value was detected in an action (0) | 2022.06.11 |