javascript基本数据类型和引用数据类型的对比

本文探讨了JavaScript中的基本数据类型(number、string、Boolean、undefined、null)与复杂数据类型(数组、对象、函数、正则表达式)的区别。讲解了内存中的堆栈模型,以及这两种类型在赋值、比较和参数传递时的不同行为。通过示例解释了基本类型值的直接复制和引用类型值的地址复制,以及它们在比较时的逻辑。最后,通过实例展示了基本类型和引用类型在函数参数传递时的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<script type="text/javascript">
	//基本数据类型和复杂数据类型的比较
	//基本数据类型:number、string、Boolean、undefined、null
	//复杂数据类型(引用数据类型):数组、对象、函数、正则表达式
	
	//内存分为堆和栈,1.基本数据类型仅仅在栈里面,2.复杂数据类型,在栈里面储存地址,在堆里面储存数据。
	
								//基本类型赋值
	let str1 = "hello";
	let str2 = str1; //此时str2:hello 
	str1 = "world"; //此时strl:world 
	console.log(str1); //hello 
	console.log(str2); // world
	//简单数据类型的值都存储在栈里面,对原始数据类型赋值,真的就是值发生了变化,所以str1改变了,打印的str1的值也就发生了相应的变化。
	
	
								//引用类型的赋值
	let stu1 = {name: "小明"};
	let stu2 = stu1; //此时stu2 name:小明 在栈里面此时多出来了一个地址,它的指向与stu1的执行相同
	stu1.name = "小红"; //此时stul name:小红 此时,
	console.log(stu1.name); //打印的结果为  小红
	console.log(stu2.name); // 打印的结果为 小红
	//引用数据类型的内存分为堆和栈,堆里面是数据,栈里面是地址,在堆里面的name数据,变为了小红,因为在栈里面的两个地址都指向这个数据,
	//所以此时stu1和stu2都打印小红
	
								//基本数据类型的比较
	let str3 = 'abc'
	let str4 = 'abc'
	console.log(str3===str4) //打印的结果为true
	//基本数据类型的内存仅仅为栈,其值仅存储在栈中,所以当它们的比较,就是值的比较,值相同就为true,不同则为false
								//引用数据类型的比较
	let stu3 = {name: "小明"};
	let stu4 = {name: "小明"};
	console.log(stu3===stu4)//打印的结果为false
	//复杂数据类型的内存分为堆和栈,栈中存储地址,堆中存储值,它们的比较,要满足堆和栈都相同才为true,此处虽然他们的值是相同的
	// 但是它们的地址不同,所以为false
	
	
								//基本数据类型传参
	function fn(num){
		num = 100
		console.log(num) //100
	}
	let n = 10
	fn(n)
	console.log(n) //10
	//同样的道理,因为基本数据类型的内存中,仅仅是栈,现在有一个函数,函数中有一个num=100,在栈中开辟一个空间存储这个值。
	//let n = 10此时又会在栈中开辟一个空间,即使将n传入这个函数,打印的n的值仍然是不变的
	
								//复杂数据类型传参
	 function fun(arr){
		 arr.push(10)
	 }
	 let arr1 = [1,2,3]
	 fun(arr1)
	 console.log(arr1)
	 //复杂数据类型,现在声明了一个let arr1 = [1,2,3],它会在堆中存值,在栈中存地址,在这个函数中虽然,传入了这个数组arr1,
	 //但是它的指向没有发生变化,所以打印的结果为[1,2,3,10]
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值