JavaScript中什么是包装对象?

存取字符串、数字或布尔值的属性时,创建的临时对象称为包装对象。包装对象只是偶尔用来区分字符串值和字符串对象、数字和数值对象以及布尔值和布尔对象。由于字符串、数字和布尔值的属性都是只读的,并且不能给它们定义新属性,因此它们是有别于对象的。

要注意的是,可通过String(),Number()或Boolean()构造函数来显式创建包装对象:

1     var s = "test", n = 1, b = true; //一个字符串、数字和布尔值
2     var S = new String(s);  //一个字符串对象
3     var N = new Number(n); //一个数值对象
4     var B = new Boolean(b);//一个布尔对象

JavaScript会在必要时将包装对象转换成原始值,因此上段代码中的对象S、N和B常常——但不总是——表现的和值s、n和b一样。“==”相等运算符将原始值和其包装对象视为相等,但是“===”严格相等运算符将它们视为不等。通过typeof运算符可以看到原始值和其包装对象的不同。

[扩展阅读:相等(==)和严格相当(===)的区别]
JavaScript对象是一种复合值:它是属性或已命名值得集合。通过“.”符号来引用属性值。当属性值是一个函数的时候,称其为方法。通过o.m()来调用对象o中的方法。

我们看到字符串也同样具有属性和方法:

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

[扩展阅读:JavaScript substring()方法]

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

同字符串一样,数字和布尔值也具有各自的方法:通过Number()和Boolean()构造函数创建一个临时对象,这些方法的调用均是来自于这个临时对象。null和undefined没有包装对象:访问他们的属性会造成一个类型错误。

看如下代码,思考他们的执行结果:

1       var s="test";
2       var t=0;
3       s.len=4;
4       t=s.len;
5       console.log(t);//undefined

当运行这段代码时,t的值是undefined.第三行代码创建一个临时对象字符串对象,并给其len属性赋值为4,随即销毁这个对象。第4行通过原始的(没有被修改过)字符串值创建一个新的字符串对象,尝试读取其len属性,这个属性自然不存在,表达式求值结果为undefined。这段代码说明了在读取字符串、数值和布尔值的属性(或方法)的时候,表现的像对象一样。但如果你试图给其属性赋值,则会忽略这个操作:修改只是发生在临时对象身上,而这个临时对象并未继续保留下来。

 

转载于:https://www.cnblogs.com/f6056/p/10874954.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值