由于基本类型值没有 .length 和 .toString() 这样的属性和方法,需要通过封装对象才能访问,此时 JavaScript 会自动为 基本类型值包装(box 或者 wrap)一个封装对象:

  1. var a = "abc";
  2. a.length; // 3
  3. a.toUpperCase(); // "ABC"

一般情况下,我们不需要直接使用封装对象。最好的办法是让 JavaScript 引擎自己决定什么时候应该使用封装对象。换句话说,就是应该优先考虑使用 “abc” 和 42 这样的基本类型值,而非new String("abc")new Number(42)

封装对象释疑

使用封装对象时有些地方需要特别注意:
比如 Boolean:

  1. var a = new Boolean( false );
  2. if (!a) {
  3. console.log( "Oops" ); // 执行不到这里
  4. }

原因:创建了一个封装对象,然而该对象是真值(“truthy”,即总是返回 true)
如果想要自行封装基本类型值,可以使用Object(..)函数(不带 new 关键字):

  1. var a = "abc";
  2. var b = new String( a );
  3. var c = Object( a );
  4. typeof a; // "string"
  5. typeof b; // "object"
  6. typeof c; // "object"
  7. b instanceof String; // true
  8. c instanceof String; // true
  9. Object.prototype.toString.call( b ); // "[object String]"
  10. Object.prototype.toString.call( c ); // "[object String]"

一般不推荐直接使用封装对象。