JS的数据类型分为基本类型和引用类型:
基本类型:number, string, boolean, undefined, null
引用类型:对象
区别:
基本类型变量的值是存放在栈内存中的;
引用类型变量是存放在栈+堆内存中的,其中,栈内存中存储的是指向堆内存中该对象的指针,堆内存存储的是该对象的值。
在复制过程中:
基本类型变量是将它的值拷贝一份,然后赋给新的变量,两个变量是相互独立的,因此当改变其中一个变量的值时,另一个变量的值不随之改变;
而引用类型变量复制的是指向堆内存中对象的指针,也就是堆内存中对象的值的地址,将其赋给新的变量,因此当改变对象的值时,实际上操作的是堆内存中的对象值,而两个变量指向堆内存中对象的指针(地址)的值是相同的,因此相互影响,其中一个变量值改变,另一个变量值也随之改变。
注意:在使用函数时,形参本质上是实参进行复制的过程,复制规则符合上述规律。
EX:
基本类型
var a = 6;
function change(num){
num = 8;
}
change(a);
console.log(a);//6
引用类型
function setName(obj){
obj.name = "joris";
}
var person = new Object();
setName(person);
console.log(person.name);//Joris
说明:形参obj可以看成是实参person的副本,遵循引用类型的复制规则,因此形参obj和实参person保存的是指向堆内存中同一个对象值的地址,在函数内部为对象添加属性值,操作的是堆内存中的对象值,因此内部的形参obj和外部的实参person的值都会随之改变。
然而,如果把一个全新的对象赋给形参obj,那么将会改变形参栈内存中存储的指针(地址)的值,此时形参obj和实参person指向的不再是堆内存中同一个对象,二者从此相互独立了。具体案例如下:
function setName(obj){
obj.name = "joris";
obj = new Object();
obj.name = "Tonny";
console.log(obj.name);//Tonny
}
var person = new Object();
setName(person);
console.log(person.name);//Joris
本文深入解析JavaScript中的数据类型,区分基本类型与引用类型,并通过实例展示它们在内存中的存储方式及复制过程的区别。理解这些概念对于掌握JS编程至关重要。

2564

被折叠的 条评论
为什么被折叠?



