当前位置:首页 > Web开发 > 正文

栈内存中的数据每一次赋值都会产生一个新的内存

2024-03-31 Web开发

标签:

1. 如果是根基数据类型(String,Number,Boolean,Null,undefined),名字和值城市储存在栈内存中。栈内存中的数据每一次赋值城市孕育产生一个新的内存,每条数据之间不彼此影响,

var a = 1; b = a; // 栈内存会斥地一个新的内存空间,此时b和a都是彼此独立的 b = 2; console.log(a); // 1

  

2. 如果是引用数据类型(Object),,名字存在栈内存中,值存在堆内存中,但是栈内存会供给一个引用的地点指向堆内存中的值。     例如:var a=[0,1,2,3,4]。a存储在占内存中,它指向的堆内存的地点。

技术图片

  如果令 var b=a; 且 改削a的值 a[0]=1;时,堆内存的数据产生了变革,由于a与b指向的是同一个地点,所以自然b也受了影响。

技术图片

总结:如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当改削A时,看B是否会产生变革,如果B也随着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,赤手起家。 常用的深拷贝要领: 一.数组深拷贝     1.用concat实现对数组的深拷贝

技术图片

2.通过jQuery的extend要领实现深拷贝  ---true 代表深拷贝,false代表浅拷贝  --jquery供给

技术图片

3.用slice实现对数组的深拷贝

var arr1 = ["1","2","3"]; var arr2 = arr1.slice(0); arr2[1] = "9"; console.log("数组的原始值:" + arr1 ); console.log("数组的新值:" + arr2 );

  

  concat复制的数组不会受原有的地点数据变革影响 二.东西深拷贝 1.如果需要,可以通过将 vm.$data 传入 JSON.parse(JSON.stringify(...)) 得到深拷贝的原始数据东西。--vue官网供给 2.如果东西的value是根基类型的话,也可以用Object.assign来实现深拷贝,但是要把它赋值给一个空东西

var obj = { a: 1, b: 2 } var obj1 = Object.assign({}, obj); // obj赋值给一个空{} obj1.a = 3; console.log(obj.a);// 1

 

三。通用的深拷贝要领

技术图片

 

浅谈js中的深拷贝和浅拷贝

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31647.html