使用包装对象

课后整理 2020-12-20

有人说,JavaScript 语言“一切皆对象”。这是因为数组和函数本质上都是对象,就连三种原始类型的值:数值、字符串、布尔值,在一定条件下也会自动转为对象,也就是原始类型的“包装对象”。

所谓“包装对象”,就是分别与数值、字符串、布尔值相对应的Number、String、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。例如:

var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);

上面代码根据原始类型的值,生成了三个对象,与原始值的类型不同。使用typeof运算符就可以看出来。例如:

typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"
v1 === 123 // false
v2 === 'abc' // false
v3 === true // false

JavaScript设计包装对象的最大目的:首先是使得JavaScript的“对象”涵盖所有的值;其次,使得原始类型的值可以方便地调用特定方法。

注意,Number、String和Boolean如果不作为构造函数调用(即调用时不加new运算符,常常用于将任意类型的值转为数值、字符串和布尔值。例如:

Number(123) // 123
String('abc') // "abc"
Boolean(true) // true

总之,这三个对象作为构造函数使用(带有new运算符)时,可以将原始类型的值转为对象;作为普通函数使用时(不带有new运算符),可以将任意类型的值,转为原始类型的值。