new String()
new Boolean()
new Number()
1. 概述
为了便于操作基本类型值,ECMAScript 提供了 3 个特殊的引用类型:Boolean、Number和 String。这些类型与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据。
- 基本类型:Undefined, Null, Boolean, Number, String
- 引用类型:Object, Array, Date, RegExp (其实就是对象)
2. 怎么产生的?
eg :
var a = "abc"
console.log(a.length) //3
? JS中只有对象才有属性和方法,原始值没有属性和方法那么上面求字符串的长度 用length属性不是没有问题吗?
? 这是因为js中提供了三种特殊的引用类型(String Number Boolean)每当我们给原始值赋属性值时 后台都会给我们偷偷转换 调用包装类,实际走了下面的包装过程?
var a = "abc"
var b = a.length //触发包装类 new String("abc")
console.log(a) //
console.log(b)
var a = "abc"
var s1 = new String("abc")//创建出一个和基本类型值相同的对象
var b = s1.length //对象原型上包含length属性
s1 = null //s1置null并销毁当前实例,再次打印a依然是字符串而不是对象
3. 怎么进行“包装”的?
<script>
var a = "abc"
var b = a.substring(2)
console.log(b) //abc,还是字符串
console.log(b)
1.var s1 = new String("abc")
2.var b = s1.substring(2)
3.s1 = null ,并销毁当前实例
</script>
var s1 = "abc"
s1.color = "red"
console.log(s1.color) //underfined
var s2 = String("abc")
s2.color = "red"
console.log(s2.color) //underfined
var s3 = new String("abc")
s3.color = "red"
console.log(s3.color) //red
console.log(s1===s2) //true
console.log(s1==s3) //true
console.log(s1===s3) //false,创建出的是一个和基本类型值相同的对象