728x90
챕터 3 ) 네이티브 Native
많이 사용하는 네이티브의 종류
- String()
- Number()
- Boolean()
- Array()
- Object()
- Function()
- RegExp()
- Date()
- Error()
- Symbol()
🔘 네이티브는 사실 내장 함수이다.
사실 const a = new String("abc")를 typeof로 결과값을 받아보면 "object" 라고 나온다.
즉, string 타입이 아니라 object 하위 래퍼인 것이다.
🔘 instanceof 는 생성자의 프로토타입 속성이 객체의 프로토타입 체인 어딘가 존재하는지 판별한다.
➡ new String("abc")는 원시값을 감싸는 문자열 래퍼를 생성하는 샘이다.
🔸 내부 [[Class]]
- typeof 가 Object인 값에는 [[Class]] 라는 내부 프로퍼티가 있다.
직접 접근은 불가능 하지만, Object.prototype.toString() 메서드를 이용해 호출 가능하다.
🔘 null 과 undefined 를 호출 해 보면 각각 Null과 Undefined 가 확인된다.
🔸 래퍼 박싱하기
- 원시값에는 프로퍼티나 메서드가 없으므로 객체 래퍼로 감싸줘야 메서드 사용이 가능하지만,
JS 엔진에서는 개발자가 직접 객체 형태로 선최적화시 발생하는 프로그램 속도 저하를 방지하는
엔진에서 알아서 암시적으로 박싱해준다. - 굳이 객체 래퍼를 이용한다면 Object() 를 이용하자.
🔸 언박싱
- 객체 래퍼의 원시값은 valueOf() 로 추출한다.
- 4장에서 확인 가능한 예제가 1개 더 있다.
🔸 네이티브, 나는 생성자이다.
- 배열, 객체, 함수, 정규식 값은 일반적으로 리터럴 형식으로 생성하지만,
리터럴은 생성자 형식으로 만든것과 동일한 종류의 객체를 생성한다.
🔸 Array()
- Array() 생성자에서는 인자로 숫자를 한개 받으면 "배열의 크기를 미리 정하는" 기능이 있다.
🔸 Object(), Function(), RegExp()
- 위 3가지는 생성자도 선택사항이다.
- new Object() : 거의 사용하지 않는다. 리터럴 형태로 사용하면 프로퍼티 지정 가능
- Function() : 함수의 인자가 내용을 동직으로 정의할 때, 가끔 유용하다.
- RegExp() 정규 표현식 : RegExp() 보다 리터럴 형식이 더 좋다.(/^a*b+/g)
🔸 Date(), Error()
- 위의 두개는 리터럴이 없기에 다른 네이티브 보다 유용하다.
- date 객체 값은 new Date() 로 생성된다.
- Error() 생성자는 앞에 new 유무 차이는 없다.
현재의 실행 스택 콘텍스트를 포착해서 객체에 담는 것 throw 연산자와 함께 사용한다.
🔸 Symbol()
- 충돌 염려없이 객체 프로퍼티로 사용 가능한 특별한 유일값이다.(하지만 절대적으로 유일하다고 보장할 수 없다.)
- 프로퍼티 명으로 사용할 수 있으나, 실제값을 보는 것은 불가능하다.
- 심볼을 직접 정의하면 Symbol() 네이티브 사용 앞에 new를 붙이면 에러가 난다.
🔸 네이티브 프로토타입
- 내장 네이티브 생성자는 각자의 .prototype 객체를 갖는다.
정리
- JS는 원시값을 감싸는 객체 래퍼 ➡ 네이티브를 제공
- 객체 래퍼에는 타입별로 쓸만한 기능 구현(메서드)
- 정의된 메서드 호출시 JS는 자동으로 원시값을 박싱해줘서 필요한 프로퍼티와 메서드를 쓸 수 있게 도와준다.
728x90
'JavaScript > You Don't know JS' 카테고리의 다른 글
I don't know JS YET) 스코프란 무엇인가 (0) | 2022.12.15 |
---|---|
JS 복습 1주차 / 4. 강제 변환 Coercion (0) | 2022.11.07 |
JS 복습 1주차 / 2. 값 (0) | 2022.11.05 |
JS 복습 1주차 / 1. 타입 (0) | 2022.11.05 |
I don't know JS YET) 문법 - 함수 인자 (0) | 2022.07.10 |