包装类对象

包装类对象

介绍

js里的三个主原始数据类型(数值,字符串及布尔)每一个都有其对应的对象类。

JavaScript中不仅提供了数值型,字符串型及布尔型,它还提供了数值类,字符串类及布尔类。这些类将对应的原始数据类型包装了起来,它不但拥有其原始数据值,而且还定义了属性和操作值的方法。

JavaScript能够很灵活的转换各种数据类型。当你访问一个字符串的属性或方法时,JavaScript内部会自动创建其包装对象。这个字符串包装对象将替换原始字符串值,它拥有已定义的属性和方法。

这样的使用方法是对的:

var s="hello";//这是一个原始数据值
 
var S=new String("hello");//这是一个字符串对象

typeof s //"string"
typeof S //"object"

字符串在需要的时候会自动的转换为字符串对象。当你对S使用+运算符时,一个对应的原始字符串值将被创建,以便执行运算。

记住,这里讨论的所有内容都同样作用于数值型和布尔型。最后一点,所有的数值,字符串及布尔都可以通过Object()函数转换成其对应的对象: var number_wrapper=Object(22)

优点

可以使用很多使用方法

封装类对象结合隐式强制转换,让我们可以使用很多实用的方法。
当对原始值提取属性 和 进行方法调用时, 它表现的就像已经使用了对应的对象类型封装了该值一样。如——

"hello".toUpperCase(); //"HELLO"

缺点

获取和设置原始类型值的属性会隐式地创建封装对象,导致没有符合预期行为

一是,隐式转换+封装类 使得对原始值设置属性,可能会没有任何作用

"hello".someProperty=17;
"hello".someProperty; //undefined

这会导致有时候本想给一个对象设置属性,但没想到其是个原始值,这样设置的属性之后获取不到,会造成隐藏的错误。
并且,因为每次隐式封装都会产生一个新的String对象,更新第一个封装对象并不会造成持久的影响。

当做相等比较时,原始类型的封装对象与其原始值行为不一样

二是,这意味着,你不能使用内置的操作符来比较两个截然不同的String对象的内容

var s1 = new String("hello")
var s2 = new String("hello")
s1 === s2 //false

由于每个String对象都是一个单独的对象,气重视值等于自身。对于非严格相等运算符,结果同样如此

s1 == s2 //false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值