📗
TIL
  • About
  • javascript
    • GoodParts
      • 프로토타입 방식
      • RegexComponent
      • 재귀적 호출 (Recursive Call)
      • 객체를 기술하는 객체
      • 예외 (Exception)
      • 호출
      • 문자열 (Strings)
      • 참조 (Reference)
      • 배열의 특성들
      • 숫자 (Numbers)
      • 메모이제이션 (Memoization)
      • 모듈 (Module)
      • 열거 (Enumeration)
      • 정규 표현식
      • 정규 표현식 객체 생성
      • 프로토타입 (Prototype)
      • 콜백 (Callback)
      • 문장 (Statements)
      • 함수 표현식 요약
      • 의사 클래스 방식 (Pseudoclassical)
      • 함수를 사용한 방식
      • 클로저 (Closer)
      • 배열 (Array)
      • 기본 타입에 기능 추가
      • 자바스크립트 분석
      • 인수 배열(arguments)
      • Function
      • 유효범위(Scope)
    • YouDon'tKnowJS
      • 타입
      • Native
      • 명시적 강제변환
      • 문자열
      • 함수 vs 블록 스코프
      • 클로저
      • 배열
      • 숫자
      • 연산자 우선순위
      • 스코프
      • 암시적 강제변환
      • 래퍼
      • Statement
      • 호이스팅
      • Coercion
    • javascript
Powered by GitBook
On this page
  • 객체 래퍼의 함정
  • 언박싱

Was this helpful?

  1. javascript
  2. YouDon'tKnowJS

래퍼

자바스크립트는 원시 값을 알아서 박싱(래핑)하므로 다음과 같은 코드가 가능

var a = "abc";

a.length; // 3
a.toUpperCase(); // "ABC"

브라우저 엔진이 알아서 암시적으로 원시값을 박싱하게 하는 것이 좋다. 즉, new String("abc"), new Number(42)처럼 코딩하지 말고, 그냥 알기 쉽게 원시값 "abc", 42를 사용하자

객체 래퍼의 함정

var a = new Boolean(false);

if (!a) {
    console.log("Oops"); // 실행되지 않음
}

만약 수동으로 원시값을 박싱하려면 Object() 함수를 이용하자

var a = "abc";
var b = new String(a);
var c = Object(a);

typeof a; // "string"
typeof b; // "object"
typeof c; // "object"

b instanceof String // true
c instanceof String // true

Object.prototype.toString.call(b); // "[object String]"
Object.prototype.toString.call(c); // "[object String]"

언박싱

객체 래퍼의 원시값은 valueOf() 메서드로 추출

var a = new String("abc");
var b = new Number(42);
var c = new Boolean(true);

a.valueOf(); // "abc"
b.valueOf(); // 42
c.valueOf(); // true

var d = new String("abc");
var e = d + ""; // e에는 없박싱된 원시값 "abc" 대입

typeof d; // "object"
typeof e; // "string"
Previous암시적 강제변환NextStatement

Last updated 4 years ago

Was this helpful?