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