* 앞으로는 자잘한 궁금증을 기록해 보려는 습관을 가지려고 한다! *
문득 코딩 테스트 문제를 풀면서 궁금증이 생겼다.
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()의 차이점은 다음 포스트에!
'공부 > JavaScript' 카테고리의 다른 글
[JS] 다양한 메서드 알아보기 🔍 (0) | 2025.04.28 |
---|---|
[JS] var, let, const 비교해보기! (Feat. 호이스팅) (0) | 2025.04.23 |
[JS] .js와 .jsx의 차이점 알아보기 (0) | 2025.04.17 |
[JS] 동기와 비동기란? (Feat. 콜백, Promise, async/await) (0) | 2025.04.13 |
[JS] Number()와 parseInt()의 차이점 - feat. parseFloat() (0) | 2025.03.11 |