什么是基本包装类型?
- 为了便于操作基本类型值,JS提供了3种特殊的引用类型(Boolean,Number,String),这些类型具有与各自的基本类型相对应的特殊行为
工作原理
- 每读取一个基本类型值的时候,后台会自动创建一个对应的基本包装类型的对象,从而可以调用指定的方法来操作数据
var a = 'boJack';
var b = a.substring(2);
console.log(b);//Jack
- 当第二行代码访问a时,从内存种读取这个字符串的值,而在读取模式下访问字符串时,后台会自动完成以下操作
var a = new String('boJack');
var b = a.substring(2);
a = null;
console.log(b);//Jack
后台处理
创建String类型的一个实例
在实例上调用指定的方法
销毁这个实例
- 这样的话,基本的字符串值就跟对象一样了,上面步骤同样适用Boolean,Number类型对应的布尔值和数字值
与引用类型主要的区别:对象的生存期
在第三行代码再次访问a时,其color属性不见了,这是因为第二行创建的String对象在执行第三行代码的时候已经被销毁,而第三行又创建了自己的String对象,其对象中并没有color属性
var a = 'boJack';
a.color = 'aqua';
console.log(a.color);//undefined
对于自动创建的基本包装类型的对象,只存在于一行代码的执行瞬间,然后立刻被销毁,我们不能在运行时为基本类型值添加属性和方法
而对于使用new创建的引用类型的实例,再执行流离开当前作用域之前都一直保存在内存中。
Boolean
基本类型和引用类型的布尔值的两个区别
1.typeof操作符对基本类型返回Boolean.对引用类型返回Object
var a =true;
console.log(typeof a);//Boolean
var a = new Boolean();
console.log(typeof a);//Object
2.使用instanceof 测试Boolean对象会返回true,测试基本类型的布尔值返回false
var a = true;
console.log(a instanceof Boolean);//false
var a = new Boolean();
console.log(a instanceof Boolean);//true
理解基本类型的布尔值与Boolean对象之间的区别非常重要----建议是永远不要使用Boolean对象