一、包装类型----引用类型之一
用new的形式去创建
Number Boolean String
基本数据类型:string (s1="hello")
1.包装类型中的string
(1)要用 new String() new创建
(2)typeof 返回object
(3)s2=new String(1,2,3,4) 当有多个参数时,只处理第一个
(4)s1=new String(++n,n++,++n) 当有多个参数时,虽然只处理第一个,js会将代码执行完,所以n=4
s1="hello" -----后台操作:s1=new String("hello")
s2=s1.substring(2) s1.substring(2)
s1=null 销毁
s3="hello"
s4=new String("hello")
console.log(typeof(s3)) //string
console.log(typeof(s4)) //object
2.包装类型 Boolean
v1=false
v2=v1 && true //false
v1=new Boolean(false)
v2=v1 && true //true
console.log(v1) //Boolean{false}---object
//任何object对象转换为boolean都为true
console.log(v2) //true
(1)
v3=false
v4=new Boolean(false)
typeof(v3)-----基本数据类型:boolean
typeof(v4)-----object
(2)instanceof 判断是否为对象实例
v3 instanceof Boolean
v4 instanceof Boolean
3.包装类型的Number
v1=23
v2=new Number(23)
console.log(typeof(v1)) //number
console.log(typeof(v2)) //object
console.log(v1 instanceof Number) //false
console.log(v2 instanceof Number) //true
二、值类型与引用类型
1、值类型的传递采用基础数据类型,string number boolean null undefined
存储在栈内存中
占据的空间是固定的
2、引用类型采用地址传递,包括array function object
堆中存储的一般都是对象,通过一个地址编号传递给栈内存的变量
读取数据----由引用指针(地址编号)到堆内存中查找数据块
放到堆内存的都是空间不固定的,所以栈的空间是不固定的
var a=2
function f1(x){
x=4
}
f1(a)
alert(a) //2
//值传递
a1=[1,2,3]
function f1(x){
x[0]=50
}
f1(a1)
alert(a1[0]) //50
//引用类型地址传递
3.拆箱与装箱
装箱:将值类型包装为对应类型的引用对象
var a=12
b=new Number(12)---装箱
拆箱:将引用类型转换为值类型 valueof()
c=new Number(23)
var d=c.valueOf()
console.log(typeof(d)) //number