数据类型,及深拷贝

本文详细介绍了JavaScript中的六种基本数据类型和一种引用类型,探讨了它们的存储方式,并深入讲解了深拷贝的概念及其实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值