javascript每句代码背后的故事二

原创 天下无双 随笔 原生javascript 139阅读 2019-02-19 10:23:49 举报

javascript数据类型我们几乎无时无刻不在用,如果问javascript数据类型,基本谁都能答出来无非就是number、string、boolean、null,undefined,object、function,array,然后es6里还新增了一个叫symbol数据类型,这个就不说了。

这些数据类型其实分为值类型和引用类型,number、string、boolean、null,undefined这些属于值类型,object、function,array这些就属于引用类型,这两种类型的字面上的区别可以这么想,值类型可能就是一个值而已,引用类型就是能存储更多值的引用。但是他们主要区别还是在底层的存储方式不同。

在javascript中数据的存储方式就3种:栈、堆、队列学过数据结构的都知道,栈的特点是先进后出,堆是无序的以键,值方式存储,队列就是先进先出了。

值类型呢就是存储在栈里面的,有固定大小,直接用值就能访问到。引用类型的引用存储在栈里,引用对应的值存储在堆里的没有固定大小,要用栈里的引用才能找到值。说到这里呢就不得不说下拷贝这件事了,对于值类型的数据,因为它本身就在栈里,所以我们拷贝的时候就是直接开辟了一个新内存用来存储,因为拷贝的值类型数据存在不同地方,所以修改拷贝的那个值不会影响原本的值。对于引用类型的数据的拷贝就稍微有点复杂了,引用类型数据拷贝分为浅拷贝和深拷贝,浅拷贝呢就是我们只拷贝了栈中的引用指针,内存地址还是原本那一块,所以当我们改变了拷贝的值的时候,原本的拷贝值也会跟着改变最明显的就是对象了

上面代码就很明显的表现出浅拷贝的特点了

深拷贝呢就是拷贝的时候,新建了一块内存把原本引用类型数据的栈里的引用和堆里的值一起放进去,当我们改变了拷贝的值,原本的引用类型数据不会受到影响

就是上面这种情况了。

数据类型这块就这些了

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复