javascript中原始值和引用值类型及区别
首先原始值和引用值类型都是我们JS中的数据类型,为了充分利用存储空间,定义了不同的数据类型,而且我们JS是弱类型,动态语言,数据类型可变。
原始值(简单数据类型):存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
包含五种简单数据类型:undefined、null、boolean、number 和 string ;可以通过typeof 运算符来判断一个值是否在某种类型的范围内,如果它是原始类型,还可以判断它表示哪种原始类型。
引用值(复杂数据类型):存储在堆中的对象,放在变量的栈空间中的值是该对象存储在堆中的地址,也就是说,存储在变量处的值是一个指针(内存地址),指向存储对象的堆内存中。
包含:Object、function、array等。
区别:
简单数据类型的值是储存在栈中,当把一个变量传递给另一个变量时,是把一个栈中的东西复制到另一个到栈中,并且这两个变量互不影响,修改其中的变量值时,不会改变另外一个变量的结果。
var num1 = 100;
var num2;
num2 = num1;
num1=10;
console.log(num1, num2);// 10, 100
引用值(复杂数据类型)是把引用变量的名称(内存地址)存储在栈中,但是把其实际对象存储在堆中,栈中的内存地址指向堆中的实际对象,当把引用对象传递给另一个变量时,复制的其实是指向实际对象的指针(内存地址),此时两者指向的是同一个数据,若通过方法改变其中一个变量的值,则访问另一个变量时,其值也会跟着改变, 因为JavaScript 中对象的赋值是默认引用赋值的。
var num1 = {
name:‘xiaoming’
}
var num2;
num2 = num1;
num1.name=‘xiaobai’;
console.log(num1, num2);//输出结果相同
但如果你想要复制赋值,另外一个值不会随他的改变而改变,则必须要重新分配对象,此时,该值的原指针(内存地址)改变,则另外一个值不会随他的改变而改变。
var num1 = {
name: ‘xiaoming’
}
var num2 =Object.assign({},num1);
//num2 = num1;
num2.name = ‘xiaobai’;
console.log(num1, num2);//{name: “xiaoming”} {name: “xiaobai”}输出结果不同
————————————————
版权声明:本文为CSDN博主「中南啊哈」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42721322/article/details/106333987