重拾JavaScript乐趣——谈谈基本包装类型

为了便于操作基本类型值,ECMAScript提供了3个特殊的应用类型:Boolean、Number和String。这些类型和其他引用类型相似,但具有与各自基本类型相应的特殊行为。每当读取一个基本类型值时,后台会创建一个对应的基本包装类型的对象。一般在后台都会进行这样的处理:

(1)创建Boolean/Number/String类型的一个实例;

(2)在实例上调用指定的方法;

(3)销毁这个实例。

下面举个例子:

var s1="some text";
var s2=s1.substring(2);

实际上可以想象成下列ECMAScript代码:

var s1=new String("some text");
var s2=s1.substring(2);
s1=null;

【注意】引用类型与基本包装类型的主要区别是对象的声明周期。

对于使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都是一直保存在内存中,而自动创建的基本包装类型的对象,则只存在于一行代码的执行瞬间,然后立即被销毁。这意味着不能在运行时为基本包装类型值添加属性和方法。

如下面例子:

var s1="some text";
s1.color="red";
alert(s1.color);//undefined

虽然第二行中为s1添加了一个color属性,但是在第三行代码中再访问s1时,其color属性已经不存在,这是因为第二行创建的String对象在执行第三行代码时已经被销毁,第三行又创建了自己的String对象,而该对象没有color属性。

【注意】使用new调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的。

如下:

var value=25;
var number=Number(value);//转型函数
alert(typeof number);//"number"

var obj=new Number(value);//构造函数
alert(typeof obj);//"object"

猜你喜欢

转载自blog.csdn.net/tozeroblog/article/details/79822429
今日推荐