通过原生构造函数(如new String(‘abc’))创建出来的是封装了基本类型值的封装对象。

  1. var a = new String('abc')
  2. a instanceof String //true
  3. typeof a //object
  4. Object.prototype.toString.call(a) //[object String]

1. 内部属性[[Class]]

所有typeof返回值为object的对象,都包含一个内部属性[[Class]],可以通过Object.prototype.toString(…)查看

  1. Object.prototype.toString.call([1,2,3]) //[object Array]
  2. Object.prototype.toString.call(/regex-literal/i) //[object RegExp]
  3. Object.prototype.toString.call(null) //[object Null]
  4. Object.prototype.toString.call(undefined) //[object Undefined]

2. 装箱

由于基本类型值没有.length和toStirng这样的属性和方法,需要通过封装对象才能访问,这时Javascript会自动为基本类型值包装一个封装对象
**

  1. //自动装箱
  2. Object.prototype.toString.call('abc') //[object String]
  3. Object.prototype.toString.call(123) //[object Number]

布尔值装箱后作判断,永远为真值true

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

如果想要自行封装基本类型值,可以使用Object()函数(不带new关键字)

3. 拆箱

如果想要得到封装对象的基本类型值,可以使用valueOf()函数

  1. var a = new Strin('abc')
  2. var b = new Boolean(true)
  3. a.valueOf() // 'abc'
  4. b.valueOf() // true

4. Date(…) Error(…)

创建日期对象必须使用new Date()。Date()可以带参数,用来指定日期和时间,而不带参数的话则使用当前的日期和时间。
获取时间戳:new Date().getTime() 或者使用 Date.now().
调用Date()时不带new关键字,则会得到当前日期的字符串值