dolog

원시값의 메서드 본문

JavaScript/자료구조와 자료형

원시값의 메서드

dokite 2022. 7. 25. 19:12

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 속한 프로퍼티에 접근하려고 하면 에러가 발생한다

'JavaScript > 자료구조와 자료형' 카테고리의 다른 글

배열  (0) 2022.08.01
문자열 2  (0) 2022.07.31
문자열 1  (0) 2022.07.29
숫자형 2  (0) 2022.07.28
숫자형 1  (0) 2022.07.26