基本数据类型的包装对象

  作者:zhanhailiang 日期:2012-12-20

首先,请给出下列代码的输出:

var  s = "hello world";

String.prototype.typeof = function() {
    console.log(typeof(this));
}

console.log(typeof(s)); //(1)

console.log(typeof String(s)); //(2)

console.log(typeof new String(s)); //(3)

s.typeof(); //(4)

我们可以得到输出为:

string
string
object
object

接下来来解释下包装对象。我们知道JS中包含三个关键的基本数据类型——数字,字符串,布尔值,而其相应都有一个对象类——Number,String,Boolean类。这些类是那些基本数据类型的包装。这些包装(wrapper)不仅具有和基本类一样的值,还定义了用来运算数据的属性和方法。

JS可以很灵活地将一种类型的值转换成另一种类型。当我们在对象环境中使用字符串时(即s.typeof()),JS会为这个字符串值内部地创建一个String包装类。String对象就代替了原始的字符串值,从而可以调用typeof方法。(对其它基本类型的值同样可以这样调用)

但是要注意,当我们在对象环境中使用字符串时,被创建的String对象只不过是瞬时存在的,它使得我们可以访问属性和方法,此后它就没有用了,所以系统会自动丢序它。如上执行(4)时,一个String对象被创建了,它是瞬时存在的,使我们能访问typeof方法,之后它被丢弃。原始的值s并不会改变。

如果想要在程序中显式创建使用String对象,那么需要创建一个非瞬时的对象,即不能自动被系统丢弃的对象。String对象的创建和其他对象一样,都使用new运算来创建:

//(3)
var S = new String("hello world");

需注意的是,创建了String对象S后,除了typeof S返回对象外,其它情况我们基本上无法区分字符串和String对象1)

只需记住:只要有必要,字符串都会被转换成String对象;同时当我们在一处需要字符串值的地方使用String对象时,JS会自动通过调用toString()方法来将其瞬时转化成字符串值。2)

以上讨论同样适用于数字,布尔值及其相应的Number对象,Boolean对象。

额外说明上例代码中:

//(2)
var ns = String("hello world"); // 使用toString也可达到相同目的

String()可以将值显式地转化成字符串。

1)eval()方法对待字会符串值和String对象是不同的,若无意传递给它一个String对象而不是一个基本的字符串值,它可能无法像预期的那样工作。
2)这里需要深入研究JS解释器究竟是如何实现自动转换String对象和字符串值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值