首页 > 其他 > 详细

栈空间,浅(深)拷贝,原型链

时间:2021-06-05 18:36:09      阅读:24      评论:0      收藏:0      [点我收藏+]

1. 数据类型

JS分两种数据类型:

  基本数据类型:Number、String、Boolean、Null、 Undefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际值。
  引用数据类型:Object(在JS中除了基本数据类型以外的都是对象,数组是对象,函数是对象,正则表达式是对象)

2. 栈堆

  基本数据类型存放在栈内存

  引用数据类型存放在栈内存,但这个栈内存指向(堆内存中的对象),变量其实就是保存在栈内存中的一个指针(就是引用了堆内存的地址)

3. 浅(深)拷贝

  浅拷贝:用的还是同一个东西,只是把你的名字改成不一样的,我这里改了,所有地方会跟着变动,相当于分身,分身再多本体只有一个,你对他造成伤害其他也会跟着受伤

  深拷贝:用的已经不是同一个东西,像细胞分裂一样,分裂出来的细胞你长得什么样那是你的事,与我无关

  区别:浅拷贝只拷贝一层。对于对象属性仍然为引用的内容并没有进行拷贝,而是共用了一个。
                  而深拷贝则是完全拷贝了两份,互不影响。

 

<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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!