기본 유형 값의 작업을 용이하게 하기 위해 ECMAScript는 Boolean, Number 및 String의 3가지 특수 참조 유형도 제공합니다. 이러한 유형은 이 장에 소개된 다른 참조 유형과 유사하지만 해당 기본 유형에 해당하는 특별한 동작도 있습니다. 실제로 기본 유형 값을 읽을 때마다 해당 기본 래퍼 유형의 개체가 백그라운드에서 생성되어 이 데이터를 조작하기 위한 몇 가지 메서드를 호출할 수 있습니다. 아래 예:
이 예제의 변수 s1에는 문자열이 포함되어 있습니다. 물론 문자열은 기본 유형 값이며, 다음 코드 줄에서는 s1의 substring() 메서드를 호출하고 반환된 결과를 s2에 저장합니다. 우리는 기본 유형 값이 객체가 아니라는 것을 알고 있으므로 논리적으로 메서드를 가져서는 안 됩니다(물론 우리가 원하는 대로 메서드가 있지만). 실제로 이러한 직관적인 작업을 달성하기 위해 일련의 프로세스가 백그라운드에서 자동으로 완료되었습니다. 코드의 두 번째 줄이 s1에 액세스하면 액세스 프로세스가 읽기 모드에 있습니다. 즉, 이 문자열의 값을 메모리에서 읽습니다. 읽기 모드에서 문자열에 접근하면 백그라운드에서 다음 처리가 자동으로 완료됩니다.
1. 문자열 유형의 인스턴스를 생성합니다.
2. 인스턴스에서 지정된 메서드를 호출합니다.
3. 이 인스턴스를 삭제합니다.
위의 세 단계를 다음 ECMAScript 코드를 실행하는 것으로 생각하시면 됩니다.
이 처리를 마치면 기본 문자열 값이 객체와 동일해지며 위의 세 단계는 각각 Boolean 및 Number 유형에 해당하는 Boolean 및 숫자 값에도 적용됩니다.
참조 유형과 기본 포장 유형의 주요 차이점은 개체의 수명입니다. new 연산자를 사용하여 생성된 참조 유형의 인스턴스는 실행 흐름이 현재 범위를 벗어날 때까지 메모리에 남아 있습니다. 자동으로 생성된 기본 패키징 유형 객체는 한 줄의 코드가 실행되는 순간에만 존재하며, 즉시 소멸됩니다. 이는 더 이상 런타임에 기본 유형 값에 속성과 메서드를 추가할 수 없음을 의미합니다. 아래 예는 다음과 같습니다.
여기서 코드의 두 번째 줄은 문자열 s1에 색상 속성을 추가하려고 시도합니다. 그러나 코드의 세 번째 줄이 여기에서 s1에 액세스하면 해당 색상 속성이 누락됩니다. 문제의 원인은 코드의 세 번째 줄이 실행될 때 두 번째 줄에서 생성된 String 객체가 소멸되었기 때문입니다. 코드의 세 번째 줄은 색상 속성이 없는 자체 String 개체를 만듭니다.
물론 Boolean, Number, String을 명시적으로 호출하여 기본 패키징 유형의 객체를 생성할 수 있습니다. 그러나 이 작업은 꼭 필요한 경우에만 수행해야 합니다. 기본 래퍼 유형을 다루고 있는지 또는 기본 래퍼 유형의 값을 참조하는지 간과하기 쉽기 때문입니다. 기본 래퍼 유형의 인스턴스에서 typeof를 호출하면 "객체"가 반환되고 기본 래퍼 유형의 모든 객체는 부울 값 true로 변환됩니다.
또한 Object 생성자는 팩토리 메소드와 마찬가지로 전달된 값 유형에 따라 해당 기본 래퍼 유형의 인스턴스를 반환합니다. 예:
Object 생성자에 문자열을 전달하면 String 인스턴스가 생성됩니다. 숫자 매개변수를 전달하면 Number 인스턴스가 생성되고, Boolean 매개변수를 전달하면 Boolean 인스턴스가 생성됩니다.
new를 사용하여 기본 패키징 유형의 생성자를 호출하는 것은 동일한 이름의 변환 함수를 직접 호출하는 것과 다르다는 점에 유의해야 합니다. 예:
이 예에서 변수 number는 기본 유형 값 25를 저장하고 변수 obj는 Number의 인스턴스를 저장합니다.
기본 래퍼 유형의 객체를 명시적으로 생성하는 것을 권장하지는 않지만 기본 유형 값을 조작하는 기능은 여전히 매우 중요합니다. 각 기본 래퍼 유형은 해당 값을 조작하기 위한 편리한 방법을 제공합니다.
이 글의 내용은 여기까지입니다. 모두 마음에 드셨으면 좋겠습니다.