普通类型和对象的区别

188 阅读1分钟

预置知识:

普通类型包括: number,string,boolean,symbol,null,undefined;

复杂类型包括:object;


内存:

  1. 一个 8G 内存条
  2. 操作系统开机占用 0.5G
  3. chorme 打开即占用 1 G
  4. 这些内存要分给页面渲染器、网络模块、浏览器外壳和 JS 引擎(V8引擎)
  5. JS 引擎将内存分为代码区和数据区
  6. 数据 区分为 Stack (栈内存)和 Heap(堆内存)
  7. 简单的数据类型直接存在 Stack 里
  8. 复杂的数据类型是把 Heap 地址存在 Stack 里


什么意思呢?请看代码

问题解析

1. 问题一

var a = 1

var b = a

b = 2

// a = ?


答案是  a = 1,这个相信大家都能理解

2. 问题二

var a = {name: 'a'}

var b = a

b.name = 'b'

// 请问 a.name 现在是多少? 

答案是 'b'

为什么呢,因为浏览器把 a.name 的值存为一个地址,而 b.name 也指向这同一个地址,修改了地址里面的内容。

3.  问题三

var  a = {name: 'a'}

var b = a

b = null

//  请问 a.name 现在是多少?

答案是 a ,因为 类型为 null 的值,不管后面存什么都为 null



垃圾回收

如果一个对象没有被引用,它就是垃圾,将被回收


深拷贝和浅拷贝

var a = 1 

var b = a

b = 2

a = 1

b 变化了没影响 a, 为深拷贝;

var a = {name:'a'} 

var b = a 

b.name = 'b' 

a.name = 'b'

反之,b 变化了导致 a 变化 , 为浅拷贝。