基本包装类型
简介
基本包装类型是一种特殊的引用类型,他们有着与基本数据类型相应的特殊行为,分别为Boolean、Number、String。
其实每当读取一个基本类型值时,后台就会创建一个基本包装类型的对象,从而可以让我们能够调用一些方法来操作数据。
var str = "Hello World!";
var str2 = str.substring(5);
我们可以看到,在这个例子中,str是个基本类型值,即string。在第二句中,str的用法像是一个对象。但是他明明是一个基本类型值。但他为什么可以这样用呢???
这是因为,在执行第二句代码时,后台已经自动完成了一系列的处理。在访问str时,访问过程处于一种读取状态,即要从内存中读取字符串。那么,在读取模式中访问字符串时,后台会自动完成下列几步操作:
- 创建String类型的一个实例。
- 在实例上调用相应的方法。
- 销毁这个实例。
用代码解释就是:
var str = new String("Hello World!");
var str2 = str.substring(8);
str = null;
经过这三步,基本数据类型就变成的跟对象一样了。Number 和 Boolean 同理。
引用类型与基本包装类型的不同
主要区别就是:对象的生存期。
引用类型中,通过new操作符创建的对象,在执行流离开当前作用域前,会一直被保存在内存中。 而后台自动创建的基本包装类型的对象只存在于相应的一行代码的执行瞬间,然后立即被销毁。因此,我们不能在运行时给基本包装类型添加属性和方法。
var str = "Hello";
str.color = "blue";
alert(str.color); // undefined
我们来解释一下: 第二行代码想要为str添加color属性,那么正如上面所说的,在第二行会执行上面所说的三个步骤,但是后台自动创建的基本包装类型的对象在执行到第三行代码时已经被销毁了。在执行第三行代码时,会再次执行上述三个步骤,但是新创建的基本包装类型中没有color属性,因此显示的结果为undefined
Object() 构造函数
使用Object()构造函数,会根据传入的值的类型来返回相应基本包装类型的实例。
var obj = new Object(12);
alert(obj instanceof Number); // true
同理,传入字符串 和 布尔值 也会返回对应的类型。
注意
使用new调用基本包装类型的构造函数 和 调用同名的转型函数是不同的。
var str = '222';
var num = Number(str);
alert(typeof num); //number
var obj = new Number();
alert(typeof obj); // object
在此例中,前三行代码,字符串str经过转型函数处理之后,是一个number基本类型。而在后面几行代码中,obj是一个基本包装类型的实例。因此,他们有所不同。
总结
因为有了基本包装类型,Javascript中的基本数据类型值可以被当作对象来访问。
三种基本包装类型是: Boolean Number String
共同特征:
- 每个包装类型都映射到同名的基本数据类型
- 在读取模式下访问基本数据类型,就会创建对应的基本包装类型的一个对象,从而方便了数据操作。
- 操作基本数据类型值的语句一经执行完毕,就会立即销毁新创建的包装对象。
网友评论