프리미티브 방법

코드 조각부터 시작하겠습니다.

const name = "aniket";
name.toUpperCase(); // ANIKET

name는 프리미티브이지만 일종의 객체인 것처럼 메서드에 액세스할 수 있습니다. 그러나 우리는 프리미티브가 객체가 아니라는 것을 압니다.
여기에 무슨 이야기가 있나요?🧐

프리미티브는 메모리에 저장된 단순한 값으로 가볍고 매우 빠릅니다. 개체는 키, 값 쌍의 모음이지만 무겁지만 매우 유용한 개체와 관련된 일부 유틸리티 속성에 액세스할 수 있습니다. javascript 사람들은 가볍고 빠르기 위해 primitive를 추가하고 싶었지만 primitives에 대한 유용한 메서드에 액세스할 수 있기를 원하는 딜레마에 직면했습니다.

그가 제시한 해결책은 다음과 같습니다.

엔진이 라인 2에 도달하자마자 프리미티브에 대한 속성 액세스를 시도하고 있지만 프리미티브 자체에는 메소드가 없다는 것을 알 수 있습니다. 이 메서드가 있는 해당 유형 래퍼 개체에 기본 값을 일시적으로 래핑하고 해당 개체는 우리가 사용할 수 있는 속성을 노출합니다. 메서드 실행이 완료되자마자 새 메모리 공간에서 작업 결과를 반환합니다. 이 래퍼 객체를 삭제합니다.

생성자 기능



생성자 함수String, Number, Boolean는 내부 전용입니다. Java와 같은 언어를 사용하면 JavaScript에서도 가능한 래퍼 개체를 명시적으로 만들 수 있지만 권장되지 않으며 내부용으로만 사용됩니다. 우리가 그것들을 사용하면 많은 것들이 미쳐버릴 수 있습니다.

// Insane Use 🙅‍♂️ Not recommended
const age = new Number(22);
typeof age; // "object" 😱
// Sane Use 😍
const age = Number("22");
// explicit type conversion


질문으로 요약하기


strict 및 non-strict 모드의 콘솔 출력에 대해 설명해주세요.

const name = "Aniket";
name.last = "Jha";
console.log(name.last);


2행의 strict 모드에서 엔진은 우리가 일시적으로 내부적으로 생성된 내부 래퍼 개체에 속성을 생성하려는 것으로 보고 오류가 발생합니다. 엄격하지 않은 모드의 경우 라인 2의 엔진은 일시적으로 생성된 래퍼 개체에 속성을 만들 수 있지만 이 개체는 라인 2가 실행되는 즉시 메모리에서 제거됩니다. 3행에서 새 래퍼 객체가 일시적으로 생성되지만 이전과 다르기 때문에 last 속성이 없으므로 undefined가 출력됩니다.

결론



프리미티브는 실제로 간단한 값이지만 엔진은 프리미티브를 래퍼 객체로 래핑하고 유용한 메서드와 속성을 노출하여 속성 액세스가 있는 경우 특히 프리미티브를 처리합니다.

좋은 웹페이지 즐겨찾기