JavaScript - 타입 변환(2)

노홍기·2022년 5월 18일
0

JavaScript-객체

목록 보기
2/2

기본 데이터 타입 래퍼 객체

var s = "wayne rooney";
var sNum = s.length;

위 코드의 첫 줄은 s가 문자열이지만, 두 번째 줄에서 length라는 프로퍼티가 사용되, s는 객체로 느껴지기도 한다.

이는 자바스크립트에는 세 가지 핵심 기본 데이터 타입(숫자, 문자열, 불리언 데이터타입) 각각에 대응되는 클래스 (String, Number, Boolean) 가 정의되어 있기 때문에 문맥상 일치하는 클래스로 자동 변환되어 프로퍼티를 사용할 수 있게 된다.

즉, 문자열을 객체 문맥으로 사용하면 내부적으로 문자열에 대한 String 객체가 자동으로 사용된다.

객체 문맥에서 문자열을 사용할 때 생성되는 String 객체는 일시적으로 존재하는 것이다. String 객체의 프로퍼티와 메서드에 대한 접근이 완료되면 이 객체는 더 이상 필요하지 않으므르 시스템이 객체를 회수해 간다.

위 코드에서 문자열 s의 값은 변하지 않으며, 새로운 임시 객체인 String 객체가 생성된 후 문자열의 길이를 sNum 변수에 저장하고 임시 객체는 사라진다.

문자열과 마찬가지로 숫자, 불리언 데이터타입에서도 같은 동작을 한다.

객체에서 기본 타입으로 변환

객체는 기본 타입으로 손쉽게 변환이 된다. 먼저 NULL이 아닌 객체가 불리언 문맥에서 사용되면 true로 변환된다.

new Boolean(false) // 내부 값은 false이지만 객체는 true 반환한다.
그 이유는 객체가 null이 아니기 때문이다.

값의 변환은 그 값이 사용되는 문맥에 따라 이루어진다. (+)연산자와 비교연산자는 숫자와 문자열 둘 다에 대해 작동한다. 따라서 객체가 이 연산자들 중 하나와 함께 객체가 이 연산자들 중 하나와 함께 사용될 경우, 숫자로 변환되어야 하는지 문자열로 변환되어야 하는지가 명확하지 않다.

대부분의 경우 자바스크립트는 객체의 valueOf() 메서드를 호출하여 객체를 변환하고, 이 메서드가 기본 데이터 타입 값을 반환하면 그 값이 사용된다.

그러나 종종 valueOf()가 단순히 변환되지 않은 객체를 반환할 수도 있다. 이때는 자바스크립트는 toString() 메서드를 호출하여 객체를 문자열로 변환하려고 시도한다.

이 경우에도 예외가 있는데 Date 객체와 +연산자를 사용하면 toString() 메서드가 먼저 사용된다.

*참고자료 : 자바스크립트 완벽 가이드 5/E

profile
레벨업 하는 중

0개의 댓글