자바스크립트의 자동형변환

코딩 테스트 문제를 풀다가 내 풀이와 다른 개발자 분의 풀이를 비교하던 도중 이러한 코드를 보았다.

return !(n % (n + "").split("").reduce((a, b) => +b + +a ));

여기서 눈여겨보아야 할 부분은 바로 (n + ""), +b + +a이다.
원래라면 n에는 Number 타입의 데이터가 들어가고 a, b는 String 타입이기 때문에 다음과 같은 결과가 나올 것이다.

const n = 123;
const a = "1";
const b = "2";
console.log(n.split("")); // TypeError
console.log(b + a); // "21"

split은 Number 타입에 사용할 수 없기 때문에 TypeError가 뜨고,
b + a는 우리가 원하는 값인 3이 나오지 않고 문자열을 이어붙인 "21"이 출력될 것이다.
하지만 저 코드를 작성한 현명한 개발자는 무사히 원하는 값을 이끌어냈는데, 어떻게 가능한 것일까?

바로 자바스크립트의 자동형변환 덕분이다.

자바스크립트에서 함수와 연산자에 전달되는 값은 대부분 적절한 자료형으로 자동 변환된다.
이러한 점 때문에 (n + "")에서 Number 타입의 n""를 만나 String 타입으로 바뀌고,
+b + +a에서 String 타입인 a, b에 양수 부호(+)가 씌워지면서 Number 타입으로 바뀌게 되는 것이다.

이 외에도 불린형으로 변환하는 방법도 있는데,
숫자 0, 빈 문자열, null, undefined, NaN과 같이 직관적으로도 "비어있다" 느껴지는 값들은 false로 인식되며 나머지 값들은 모두 true로 인식된다.

이미 배운 내용이었지만 오랜만에 보는 반가운 것들이라 한번 적어보았다.

이상!

내용 출처 : https://ko.javascript.info/type-conversions
썸네일 출처 : https://velog.io/@yejinh/Javascript-%ED%98%95%EB%B3%80%ED%99%98

좋은 웹페이지 즐겨찾기