博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据类型,及深拷贝
阅读量:7119 次
发布时间:2019-06-28

本文共 1175 字,大约阅读时间需要 3 分钟。

js有五种基本类型: string number blooen null undefined

1.javascript变量包含两种不同数据类型的值:基本类型和引用类型。

基本类型值指的是简单的数据段,包括es6里面新增的一共是有6种,具体如下:number、string、boolean、null、undefined、symbol。

引用类型值指那些可能由多个值构成的对象,只有一种如下:object。 在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。

2.javascript的变量的存储方式:栈(stack)和堆(heap)。

栈:自动分配内存空间,系统自动释放,里面存放的是基本类型的值和引用类型的地址

堆:动态分配的内存,大小不定,也不会自动释放。里面存放引用类型的值。
而这两类数据存储分别是这样的:

a.基本类型--名值存储在栈内存中

let a = 1; 当b = a时,栈内存会开辟一个内存.所以当修改a=2时,对b并不会造成影响.因为b已经自食其力.

a.基本类型--名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值

let a={ name:'aaa' }

当b=a进行拷贝时,其实是复制的a的引用地址.而并非堆里面的值. 而当我们a[0]=1时进行数组修改时,由于a与b指向的是同一个地址,所以自然b也受了影响,这就是所谓的浅拷贝了。那,要是在堆内存中也开辟一个新的内存专门为b存放值,就像基本类型那样,岂不就达到深拷贝的效果了.
下面封装一个深拷贝的函数

function depClone(source){    let targetObj = source.constructor === 'Array'?[]:{};    for(var key in source){        if(source.hasOwnproperty(key){            if(source[key]&&typeof(source)=='Object'){                 targetObjt[key] = source[key].constructor === Array?[]:{};                 targetObjt[key] = deepClone(source[key])            }else{                 targetObjt[key] = source[key]            }            }    }     return targetObjt}复制代码

转载于:https://juejin.im/post/5c176e66f265da61764acaec

你可能感兴趣的文章
Python 生成器和迭代器
查看>>
Android WebView与JavaScript交互操作(Demo)
查看>>
Java设计模式 - 代理模式
查看>>
HDU 3533 Escape
查看>>
npm 相关
查看>>
大数据笔记-外存算法
查看>>
PHP WEBSERVICE NOWSDL模式 (不传参数,字符串参数,数组参数,对象参数) IOS 参数为XML...
查看>>
Maven学习总结(20)——Maven pom.xml配置再体会
查看>>
Mysql学习总结(42)——MySql常用脚本大全
查看>>
java知识库
查看>>
【面试题】-100盏灯
查看>>
HS-T912 adb 连接配置
查看>>
logger打印错误日志
查看>>
【Todo】【转载】Java中的锁机制2 - Lock
查看>>
node.js是什么
查看>>
让元素跟随鼠标移动
查看>>
Bootstrap是什么
查看>>
P1279 字串距离
查看>>
在Windows Server2016中安装SQL Server2016(转)
查看>>
oracel数据库ORA-28001: the password has expired
查看>>