공부기록/Q&A

자바스크립트에서 !! 을 사용한 명시적 형변환

_우지 2022. 7. 11. 14:51

코드 리뷰에서 다른분들 코드를 보면서 다음과 같은 궁금증이 생겼다.

 

내 궁금증은 다음과 같았다.

저렇게 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

https://github.com/YoonHan

 

YoonHan - Overview

Front-end web developer. YoonHan has 20 repositories available. Follow their code on GitHub.

github.com

답변해주신 한윤님 정말 감사합니다.