원시 자료형은 어떻게 메서드를 호출할 수 있을까?

권세진·2021년 2월 21일
0

js이론

목록 보기
5/9

🤔 원시 자료형은 어떻게 메소드를 호출할 수 있을까?

'hi'.toUpperCase(); // HI

여기서 'hi'는 분명 원시자료형 string일텐데,
원시자료형에 메소드나 프로퍼티가 존재할 수 있을까?

결론적으론 존재할 수 없다.
그렇다면 어떻게 메소드 호출이 가능한 것일까?

📦 wrapper 객체

js는 모든 것을 객체로 바라보는 언어이다.
그래서 number,string, boolean 등등 원시 자료형은 불편할 수 밖에 없다.
이를 해결하기 위해 js는 각 원시 자료형에 해당하는 wrapper 객체를 미리 만들어 놓았다.

ex) number(원시형) -> Number(wrapper 객체)

그리고 js는 원시형 데이터가 들어오면 wrapper 객체로 변환한 뒤 사용하는 것이다.
이 wrapper 객체는 사용 후 바로 메모리에서 해제된다.(임시로 사용됨)

예시

"hello".toUpperCase();

이 구문은 다음과 동일한 구문이다.

new String("hello").toUpperCase();

🎈 기타

sloppy mode(default) vs strict mode

sloppy mode(일반적인 코드)와 strict mode 간의
wrapper 동작이 조금 다르다고 한다.

  • sloppy mode
    래퍼 객체로 감싼 후 메소드 호출
String.prototype.sloppyMethod = function () {
	console.log(typeof this); // 객체 
    console.log(this instanceof String) // true
};
''.sloppyMethod();
  • strict mode
    래퍼 객체를 생성하지 않고 메서드를 가져와 사용하는 듯하다.
String.prototype.sloppyMethod = function () {
	'use strict';
	console.log(typeof this); // 문자열 
    console.log(this instanceof String) // false
};
''.sloppyMethod();

참고 자료

profile
상상을 현실로 꺼내길 좋아하는 프론트엔드 개발자입니다.

0개의 댓글