3.2.1 객체 래퍼의 함정

jude·2022년 2월 2일
0

you don't know js

목록 보기
22/30
post-thumbnail

객체 래퍼를 사용하는 것을 권장하진 않지만 그래도 사용해야 한다면 아래와 같은 함정이 있으니 주의해야 한다.

var a = new Boolean( false ); // 블린 타입 객체 래퍼가 반환된다.

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

일반적인 객체는 'truthy'한 값이다. 그래서 조건값에 넣으면 true가 되어 위 코드의 구문은 실행되지 않는다.


수동으로 원시 값을 박싱하려면 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]

하지만 객체 래퍼로 직접 박싱하여 사용하는 것은 권장하지 않는다.
물론, 드물긴 하지만 그렇게 해야 할 경우가 전혀 없진 않다.

결론

Boolean값도 될 수 있으면 리터럴로 생성하자.

profile
UI 화면 만드는걸 좋아하는 UI개발자입니다. 프론트엔드 개발 공부 중입니다. 공부한 부분을 블로그로 간략히 정리하는 편입니다.

0개의 댓글