JS基本类型和引用类型的经典案例分析

本文深入解析JavaScript中的数据类型,区分基本类型与引用类型,并通过实例展示它们在内存中的存储方式及复制过程的区别。理解这些概念对于掌握JS编程至关重要。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值