Javascript中的数据类型
引用类型array
, object
, function
值类型string
、number
、boolean
、undefined
和null
代码举例
在Javascript中值类型和引用类型在内存中存储的方式不一样。
值类型:存储到栈内存中。
引用类型:存储到堆内存中。(原因类型复杂、大小具有弹性)
demo1
<script>
let x=5;
let y=6;
function exchange(a,b){
let c=a;
a=b;
b=c;
}
exchange(x,y);
console.log(x+" "+y);
//结果5 6
</script>
原因:值类型是复制过去的、而当函数的生命周期过了之后、函数作用销毁了,外面的值没有改变
函数执行之前
//栈内存
ST001:X,5
ST002:y,6
ST003:
进入函数执行中(a,b)是形参
//栈内存
ST001:X,5
ST002:y,6
ST003:a,6
ST004:b,5
ST005:c,5
ST006:
执行结束、变量销毁
//栈内存
ST001:X,5
ST002:y,6
ST003:
ST004:
ST005:
ST006:
完毕
demo2
<script>
let x=[5];
let y=[6];
function exchange(a,b){
let c=a[0];
a[0]=b[0];
b[0]=c;
}
exchange(x,y);
console.log(x+" "+y);
//结果6 5
</script>
//栈内存
ST001:X,HP001
ST002:y,HP002
ST003:
ST004:
// 堆内存
HP001:[5],(1)//引用计数(1)一次
HP002:[6],(1)
HP003:
HP004:
函数执行中
//栈内存
ST001:X,HP001
ST002:y,HP002
ST003:a,HP001
ST004:b,HP002
ST005:c,5
ST006:
// 堆内存
HP001:[6],(2)
HP002:[5],(2)
HP003:
HP004:
函数结束
//栈内存
ST001:X,HP001
ST002:y,HP002
ST003:
ST004:
// 堆内存
HP001:[6],(1)
HP002:[5],(1)
HP003:
HP004: