JS分两种数据类型:
基本数据类型:Number、String、Boolean、Null、 Undefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际值。
引用数据类型:Object(在JS中除了基本数据类型以外的都是对象,数组是对象,函数是对象,正则表达式是对象)
基本数据类型存放在栈内存
引用数据类型存放在栈内存,但这个栈内存指向(堆内存中的对象),变量其实就是保存在栈内存中的一个指针(就是引用了堆内存的地址)
浅拷贝:用的还是同一个东西,只是把你的名字改成不一样的,我这里改了,所有地方会跟着变动,相当于分身,分身再多本体只有一个,你对他造成伤害其他也会跟着受伤
深拷贝:用的已经不是同一个东西,像细胞分裂一样,分裂出来的细胞你长得什么样那是你的事,与我无关
区别:浅拷贝只拷贝一层。对于对象属性仍然为引用的内容并没有进行拷贝,而是共用了一个。
而深拷贝则是完全拷贝了两份,互不影响。
<script type="text/javascript"> let obj = new Object() obj = { name: ‘whit‘, age: 99 } console.log(obj)//{name: "white", age: 99} let objSon = obj objSon.page = [ 1, 2, 3 ] console.log(obj)//{name: "white", age: 99, page: Array(3)}
let objSon2 = objSon
objSon2.desc = {
name: "why"
}
console.log(obj)//{name: "whit", age: 99, page: Array(3), desc: {…}}
delete objSon2.name
console.log(obj)//{age: 99, page: Array(3), desc: {…}}
</script>
发现obj多了一个对象page,这个page是objSon这里进行改动之后得到的,然后objSon2添加了对象desc,这次定义的是objSon2 = objSon,发现obj还是多出了desc这一个对象
原文:https://www.cnblogs.com/black-eyes/p/14852865.html