JavaScript中的包装对象

🖋前言

最近在学习JavaScript,遇到了包装对象的概念,开始有点不太了解。经过多方查阅资料,终于理解了。

包装对象的概念

先看一段js代码:

var s="hello world!";//一个字符串
var word=s.substring(s.indexOf("")+1,s.length);//使用字符串的属性

字符串既然不是对象,为什么它会有属性呢?
这是因为只要引用了字符串s的属性,JavaScript就会将字符串值通过调用new String(s)的方式转换成对象,这个对象继承了字符串的substring()indexOf()方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会销毁(其实在实现上并不一定创建或销毁这个临时对象,然而整个过程看起来是这样)。

举一个栗子

看如下代码:

var s="test";//创建一个字符串
s.len=4;//给它设置一个属性
var t=s.len;//查询这个属性

当运行这段代码时,t的值是undefined。

我们看看代码解析过程:————————————————————————————————————
第二行代码加载s的值时编译器会判定s中是一个字符串,创建一个临时字符串对象,并给其len属性赋值为4,随即销毁这个对象。第三行代码加载时,编译器重复了加载第二行时的动作,首先判定s中是一个字符串,创建一个新字符串对象,尝试读取其len属性,这个属性自然不存在,表达式求值结果为undefined。
———————————————————————————————————————————————

这段代码说明了在读取字符串的时候,表现的像对象一样。但如果试图给其属性赋值,则会忽略这个操作:修改只是发生在临时对象身上,而这个临时对象并未继续保留下来。

同字符串一样,数字和布尔值也具有各自的方法:通过Number()Boolean()构造函数创建一个临时对象,这些方法的调用均是来自于这个临时对象。

结论

存取字符串、数字或布尔值的属性时创建的临时对象称做包装对象,它只是偶尔用来区分字符串值和字符对象、数字和数值对象以及布尔值和布尔对象。包装对象只是被看做是一种实现细节,而不用特别关注。由于字符串、数字和布尔值的属性都是只读的,并且不能给它们定义新属性,因此要明白它们是有别于对象的

参考资料:JavaScript权威指南(第六版) —— Flanagan D 著

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值