반응형

* 앞으로는 자잘한 궁금증을 기록해 보려는 습관을 가지려고 한다! *

 

 

문득 코딩 테스트 문제를 풀면서 궁금증이 생겼다.

String()과 toString(), Number()와 parseInt()의 차이점은 무엇일까?


먼저 String()과 toString()은 값을 문자열로 변환해 주는 역할을 한다.

String()

String()은 전역 함수로, 숫자 / 배열 / 객체 등 어떠한 값도 문자열로 변환 가능하다.

let num = 123;
let str = String(123); // "123"

 

toString()

toString()은 객체 메서드로, 숫자 / 배열 등의 값에서 사용할 수 있다고 한다.

하지만 null이나 undefined 값을 처리하게 되면 에러가 발생할 수 있다.

let num = 123;
let str = num.toString(); // "123"

 

여기까지만 봤을 때는 '그럼 오류없이 모든 값을 문자열로 변환해 주는 String()을 쓰는 게 더 낫지 않나?'라는 생각이 들었었다.

그래서 각각 사용하는 경우를 찾아보았다.

 

그냥 문자열로 변환하는 것이라면 안전하게 String()을 사용하는 걸 권장한다.

그렇다면 toString()은 언제 쓰나 생각해 봤는데 내가 까먹고 있던 부분이 있었다.

 

숫자를 2 ~ 36진수로 변환할 때 toString()을 사용한다는 걸 잊고 있었다. 

toString() 괄호 안에는 2 ~ 36까지 입력할 수 있고, 생략하면 10진수로 변환된다.

return 12.0.toString(2); // "1100" (2진수)
return 12.0.toString(8); // "14"   (8진수)

* 12.0.toString(2)의 형식으로 작성한 이유는. JS에서 숫자 뒤의. 은 부동 소수점의 일부로 해석하게 된다.

   따라서 12.toString(2)으로 사용할 경우 toString()을 부동 소수점 숫자 뒤에 오는 잘못된 메서드 호출로 인식되기 때문에 오류가 발생한다.

 

   이를 해결하기 위해서는, 

     1. 12.0.toString(2)으로 작성: .0추가, 두 번째. 은 마침표 표기법으로 해석하기 때문.

     2. (12). toString(2)으로 작성: 괄호로 감싸주면 사용 가능


정리

String() toString()
전역 함수, 어떤 값이라도 문자열 변환 가능 객체 메서드, 숫자 / 배열 등 문자열 변환 가능하지만
null이나 undefined 값을 처리하려고 하면 오류 발생
값이 명확하다면 둘 다 상관 X, 하지만 안전하게 String() 사용하는걸 권장
toString()은 진수 변환으로 사용 가능

 

 

Number()와 parseInt()의 차이점은 다음 포스트에!

반응형

+ Recent posts