JavaScript的数据类型及深拷贝的实现方式

目录

一、JavaScript 有两种 数据类型:

二、JavaScript 有两种 数据拷贝方式:

三、深拷贝的实现方法


本文参考:【JS】深拷贝与浅拷贝的区别,实现深拷贝的几种方法菜鸟教程之JavaScript 数据类型​​​​​​​​​​​​​​

一、JavaScript 有两种 数据类型:

1、值类型(基本数据类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。

2、引用数据类型:对象(Object)、数组(Array)、函数(Function)。

注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。

二、JavaScript 有两种 数据拷贝方式:

1、浅拷贝拷贝时将栈内存中存储的变量名和变量值完整的复制一遍。

(1)基本数据类型:变量名和变量值存储在栈内存中

let a=1; (变量名和变量值对应存储在栈内存中)

1213309-20171124130901890-511917244

let b=a; (栈内存会新开辟一个内存,将栈内存中a的值拷贝给了b)

1213309-20171124131822437-430949998

修改a的值,b的值不会变化,修改b的值也不会影响到a的值:

let a = 1;
let b = a;
console.log(a,b); //1,1
b = 2;
console.log(a,b); //1,2

(2)引用数据类型:变量名存储在栈内存中,变量值存储在堆内存中,栈内存会提供一个引用地址指向堆内存中存储的值。

let a=[0,1,2,3,4];(栈内存中存储变量名和变量值在堆内存中的引用地址)

1213309-20171124133428359-1292133331

let b=a;(栈内存会新开辟一个内存,将栈内存中a的值的引用地址拷贝给了b)

1213309-20171124133647796-1390255671

修改b的值,a会变化,修改a的值,b也会改变:

var a = [0,1,2,3,4];
var b = a;
console.log(a,b); //[0, 1, 2, 3, 4],[0, 1, 2, 3, 4]
b[0]=1;
console.log(a,b); //[1, 1, 2, 3, 4],[1, 1, 2, 3, 4] 

但这不是我们想要的效果,我们希望将a赋值给b之后,修改b的值,不会影响到a的值,这就需要进行深拷贝了,显然,基本数据类型无需进行深拷贝,那么深拷贝就是针对引用数据类型而言了。

2、深拷贝针对引用数据类型,拷贝时会将栈内存和堆内存中的数据都进行拷贝。

三、深拷贝的实现方法

function deepClone(a) {
  let b = JSON.stringify(a);//将对象转为对象字符串
  let objClone = JSON.parse(b);//将对象字符串解析为对象
  return objClone;
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值