包装类对象

包装类对象

介绍

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

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

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

这样的使用方法是对的:对象

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

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

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

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

优势

可使用不少使用方法

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

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

缺点

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

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

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

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

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

二是,这意味着,你不能使用内置的操做符来比较两个大相径庭的String对象的内容数据类型

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

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

s1 == s2 //false
相关文章
相关标签/搜索