封装对象包装

本文探讨了JavaScript中封装对象的使用方式及其注意事项,包括如何为基本类型值创建封装对象,以及这种做法可能带来的性能影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

封装对象(object wrapper)扮演着十分重要的角色。由于基本类型值没有 .length和 .toString() 这样的属性和方法,需要通过封装对象才能访问,此时 JavaScript 会自动为基本类型值包装(box 或者 wrap)一个封装对象:


var a = "abc";


a.length; // 3

a.toUpperCase(); // "ABC"


如果需要经常用到这些字符串属性和方法,比如在 for 循环中使用 i < a.length ,那么从一开始就创建一个封装对象也许更为方便,这样 JavaScript 引擎就不用每次都自动创建了。


但实际证明这并不是一个好办法,因为浏览器已经为 .length 这样的常见情况做了性能优化,直接使用封装对象来“提前优化”代码反而会降低执行效率。


一般情况下,我们不需要直接使用封装对象。最好的办法是让 JavaScript 引擎自己决定什么时候应该使用封装对象。换句话说,就是应该优先考虑使用 "abc" 和 42 这样的基本类型值,而非 new String("abc") 和 new Number(42) 。



使用封装对象时有些地方需要特别注意。


比如 Boolean :

var a = new Boolean( false );


if (!a) {

    console.log( "Oops" ); // 执行不到这里

}    


我们为 false 创建了一个封装对象,然而该对象是真值(“truthy”,即总是返回 true),所以这里使用封装对象得到的结果和使用 false 截然相反。


如果想要自行封装基本类型值,可以使用 Object(..) 函数(不带 new 关键字):


var a = "abc";

var b = new String( a );

var c = Object( a );


typeof a; // "string"

typeof b; // "object"

typeof c; // "object"


b instanceof String; // true

c instanceof String; // true


Object.prototype.toString.call( b ); // "[object String]"

Object.prototype.toString.call( c ); // "[object String]"


再次强调,一般不推荐直接使用封装对象(如上例中的 b 和 c ),但它们偶尔也会派上用场。


640?wx_fmt=png

好了,今天的文章就到这里,本文由Web前端精髓为您提供,喜欢的同学记得点击收藏或者点赞哦!

640?wx_fmt=png640?wx_fmt=jpeg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值