dolog
원시값의 메서드 본문
JS에선 원시값에서도 객체처럼 매서드 호출이 가능
그러나 객체처럼 프로퍼티를 추가할 수 없다(비 엄격모드에서 래퍼 객체를 만들어도 래퍼 객체는 금방 삭제되기 때문에...)
원시값 vs 객체
원시값)
- 원시형 값
- 종류 : string, number, bigint, boolean, symbol, null, undefined(7가지)
객체)
- 프로퍼티에 다양한 종류의 값 저장가능
- 대괄호 { } 를 사용하여 만들 수 있으며 JS에선 함수도 객체의 일종이다
- 함수를 프로퍼티로 저장할 수 있다는 장점
let gustn = {
name: “kim”,
sayHi: function() {
console.log(“Hi~”);
}
};
gusts.sayHi(); // Hi~
- JS 내장 객체 : 날짜, 오류, HTML 요소 등의 객체를 제공하고 이 객체들은 고유한 프로퍼티와 매서드를 가진다
- 단점은 원시값도가 무겁고, 내부 구조 유지를 위해 추가 자원을 사용함으로 시스템 자원이 많이 소모 된다는 점이다
원시값을 객체처럼 사용하기
원시값을 다루는 작업이 많다 ➡️ 매서드를 사용하면 수월할 것 같은데 ➡️ 원시값은 가능한 빠르고 가벼워야 한다
⬇️
원시값은 원시값 그대로 단일 값 형태 유지
string, number, boolean, symbol 매서드와 프로퍼티에 접근할 수 있게 언어 차원에서 허용
가능하게 하기 위해 - 원시값이 매서드나 프로퍼티에 접근하려 할 때 - 추가 기능을 제공해주는 특수한 객체 : 원시 래퍼 객체(object wrapper)
object wrapper
- 원시 타입에 따라 종류가 다양하다
- 원시형과 똑같이 string, number, boolean, symbol이라 부른다
- object wrapper 마다 제공하는 매서드는 다르다
- JS에선 만들지 않고도 생성한 것 처럼 동작하게 해준다(…?)
ex) toUpperCase()
let str = “Hello”;
// 원시값의 프로퍼티(toUpperCase)에 접근하는 순간
// 특별한 객체가 생성되고 toUpperCase() 매서드를 가지고 있다
// 인수로 받은 문자열의 모든 글자 ➡️ 대문자
console.log( str.toUpperCase() ); // HELLO
// 출력 후 생성된 객체는 삭제되고 원시값 str만 남는다
목적은 원시값을 가볍게 유지 하면서 매서드를 호출하는 것
ex) toFixed(n)
let n = 1.23456;
// 인수로 받은 숫자형 ➡️ 원하는 자리에서 소수점 아래 숫자 반올림
console.log(n.toFixed(2)); // 1.23
String / Number / Boolean 을 생성자로는 쓰지 말아야 한다
(이 말은 즉, 원하는 타입의 래퍼 객체를 만드는 것이다)
왜? 혼동을 일으키기 때문이다
console.log( typeof 0 ); // number
console.log( typeof new Number(0) ); // “object”
let zero = new Number(0); // object ➡️ always true !!
if(zero) {
console.log(“zero는 falsy 값이다.”);
}
new(생성자)를 붙이지 않고 사용하면 원하는 형의 원시값으로 바꿔주므로 그냥 사용하자
let number = Number(“123”); // 문자열 ➡️ 숫자형
또한 null / undefined 매서드는 존재하지 않고 래퍼 객체도 없다
null / undefined에 속한 프로퍼티에 접근하려고 하면 에러가 발생한다