객체 래퍼를 사용하는 것을 권장하진 않지만 그래도 사용해야 한다면 아래와 같은 함정이 있으니 주의해야 한다.
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값도 될 수 있으면 리터럴로 생성하자.