자바스크립트는 원시값(문자열,숫자)를 마치 객체처럼 다룰 수 있게 해준다.
원시값에도 객체에서처럼 메서드를 호출할 수 있다.
원시값은 객체가 아님
원시값과 객체는 다음과 같은 차이점이 있다.
- 원시형 값이다.
- 원시형의 종류는 문자(String),숫자(number),bigint,불린(boolean),심볼(symbol),null,undefined형으로 총 일곱가지
객체
- 프로퍼티에 다양한 종류의 값을 저장한 수 이싿.
- {name : "John", age : 30}와 같이 대괄호 {}를 사용해 만들 수 있다.
자바스크립트에는 여러 종류의 객체가 있는데 함수도 객체의 일종이다.
객체의 장점중 하나는 함수를 프로퍼티로 저장할 수 있다는 것.
let john = {
name: "John",
sayHi: function() {
alert("친구야 반갑다!");
}
};
john.sayHi(); // 친구야 반갑다!
객체 john을 만들고, 거기에 메서드 sayHi를 정의
자바 스크립트는 날짜, 오류, HTML요소등을 다룰 수 있게 해주는 다양한 내장 객체를 제공한다.
이 객체들은 고유한 프로퍼티와 메서드를 가진다.
하지만 이런 기능을 사용하면 시스템 자원이 많이 소모된다는 단점이 있다.
객체는 원시값보다 "무겁고", 내부 구조를 유지하기 위해 추가 자원을 사용하기 때문
원시값을 객체처럼 사용하기
"래퍼"는 원시 타입에 따라 종류가 다양하다.
각래퍼 객체는 원시 자료형의 이름을 그대로 차용해
String,Number,Boolean,Symbol 이라고 부르고 래퍼 객체마다 제공하는 메서드 역시 다르다.
#String/Number/Boolean을 생성자론 쓰지 말자.
Java 등의 몇몇언어에서는 new Number(1) 또는 Boolean(false)와 같은 문법을 사용해 원하는 타입틔 "래퍼 객체"를 직접 만들수 있다.
자바스크립트에서도 하위 호환성을 위해 이기능을 남겨 두었는데 이런 식으로 래퍼 객체를 만드는 건 몇몇 상황에서 혼동을 불러일으킬수 있다.
# null/undefined는 메서드가 없다.
특수 자료형인 null과 undefined의 원시값 (null/undefined)는 위와 같은 법칙을 따르지 않는다.
이 자료형과 연관되는 래퍼객체도 없고 메서드도 제공하지 않는다 어떤 의미에서는 두 자료형이 '가장 원시적'이라고 할 수 있다.
요약
- null과 undefined를 제외한 원시값에 다양한 메서드를 호출 할 수 있다.
- 원시값에 메서드를 호출하려 하면 임시 객체가 만들어 진다. 그런데 자바 스크립트 엔진은 내부 최적화가 잘되어있어 메서드를 호출해도 많은 리소스를 쓰지 않는다.
'자바 스크립트' 카테고리의 다른 글
자바스크립트 문자열 (0) | 2020.12.12 |
---|---|
자바스크립트 숫자형 (0) | 2020.12.11 |
자바 스크립트 심볼형 (0) | 2020.12.08 |
자바스크립트 옵셔널 체이닝 '?.' (0) | 2020.12.08 |
자바스크립트 new 연산자와 생성자 함수 (0) | 2020.12.07 |
댓글