包装对象
基本概念
所谓“包装对象”,就是分别与数值、字符串、布尔值相对应的Number、String、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。
var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);
typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"
v1 === 123 // false
v2 === 'abc' // false
v3 === true // false
- 包装对象使得JS对象涵盖所有的值,使原始类型的值也能很方便地去调用某些方法。
- 如果不作为构造函数调用,那么常用于将任意类型的值转为数值、字符串、布尔值。
Number(123) // 123
String('abc') // "abc"
Boolean(true) // true
valueOf()和toString()方法
包装对象对应的方法是valueOf()和toString(),我们来看一下他们的用途。
- valueOf()返回包装对象实例对应的原始类型的值
new Number(123).valueOf() // 123
new String('abc').valueOf() // "abc"
new Boolean(true).valueOf() // true
- toString()返回对应的字符串形式
new Number(123).toString() // "123"
new String('abc').toString() // "abc"
new Boolean(true).toString() // "true"
自动转换
- 原始类型的值,可以自动当做对象来调用,即调用对象的各种方法和参数,JS引擎会自动将原始类型的值转为包装对象的实例,
使用后立刻销毁实例。如:
'abc'.length // 3
- abc是一个字符串,本身不是对象,不能调用length属性。JavaScript 引擎自动将其转为包装对象,在这个对象上调用length属性。调用结束后,这个临时对象就会被销毁。这就叫原始类型与实例对象的自动转换。