module2-04-简单类型和复据类型的存储

简单类型和复杂类型

一、简单类型和复杂类型的区别

  • 基本类型又叫值类型,复杂类型又叫引用类型

  • 值类型:简单数据类型,基本数据类型,在存储时,变量中存储的是值本身,因此叫做值类型

  • 引用类型:复杂数据类型,在存储时,变量中存储的仅仅是地址(引用)

堆和栈

  • JS中没有堆和栈的概念,但是可以用这个来讲解

    • 简单的数据就会存储到栈(复杂类型的引用也会在这里)

    • 复杂类型的数据就会存储到堆(需要人工销毁,现在js有自己的垃圾清除机制)

  • 栈(操作系统):有操作系统自动分配释放,存放函数的参数值,局部变量等

  • 堆(操作系统):存储复杂类型(对象),一般有程序员分配释放,若程序员不释放,由辣鸡回收机制回收

二、基本类型在内存中的存储

  • 变量中存储的是值本身,如果将变量赋值给另一个变量,是将内部的值赋值一份给另外一个变量,两个变量没有联系,其中一个变化,另外一个不会发生变化

  • 两个空间是独立开的,当讲number赋值给n,其实是将值赋值过去(前提number存储的是简单变量),其中是没有联系的

三、复杂类型在内存中的存储

  • 如果讲复杂类型的数据赋值给一个变量,复杂类型的数据会在内存中创建一个原型,而变量中存储的是指向对象的一个地址。如果讲变量赋值给另外一个变量,相当于将地址复制一份给了新的变量,两个变量的地址相同指向的是同一个原型,其中一个访问并改变了,另一个变量也会改变

var p1 = { name: 'zs', age: 18 }
p2 = p1
p2.age = 20
p1 // { name: 'zs', age: 20 }
p2 // { name: 'zs', age: 20 }
  • 数组也是复杂数据类型,所以数组也有这样的特性

原文地址:https://www.cnblogs.com/lezaizhu/p/14093742.html