js的值类型
1.原始值
原始值类型分为五类:number,boolean,,string,undefined,null,
var a=123; var=123.2 //都是定义number类型该类型可以定义为小数
var a="abc"; var='abc'; //都是定义string类型,定义string类可用“”,也可用‘’;但var c='fqaf"错误,不可以这样
var a=true; var b=false //定义boolean类型,boolean类型只有该两种true,false.非假即真,非真即假
undefined类型,就是声明了变量但未给变量赋值,使用该变量是undefined
null类型,一般用来占位,当某个变量的值或者方法不在需要时,用null赋值给该变量
这样写错误但 var c=“123'可以,为字符串类型 ·
2.引用值
引用类型有object,Array等(对象,数组,函数)
原始值与引用值的区别
原始值放在栈(stack)中,
引用值放在堆(heap)中,
原始值: var a=10, var b=a; b的值相当于复制a的值,所以当a改变时,b不变
引用值类型:声明数组a并赋值,数组b=a. a.push(3)是往数组a中放入一个3.当a数组该变时b数组跟着改变
这是因为原始值放在栈中,引用值放在堆中
每个栈和堆都有地址和空间
原始值放入栈中是先找到地址,然后放在栈空间里
引用值放入堆中是先找到栈的地址,在栈的空间里放入堆的地址,通过堆的地址找到堆并放入堆空间中
所以引用值,数组b=a,a和b的栈空间里都是放的同一个堆地址,都是指向相同的值,当堆空间中的值改变时其余的都会改变
相当于多个钥匙同一个房间
这里为什么数组c改变时,d不变了?这是因为c=[1,3]是在堆中开辟了一个新空间,该堆的地址不一样了,c在栈空间放入新堆地址。c和d的栈空间中放入的堆地址也就不同,指向不同的堆。c=[1,3]相当于换了个钥匙换了个房间