资讯专栏INFORMATION COLUMN

一篇文章彻底搞懂JS深浅拷贝和const

MyFaith / 2176人阅读

摘要:图数据类型图引用类型深浅拷贝问题不知道什么是深拷贝和浅拷贝的请先去并在调试台自己操作一下,这篇文章只会说明为何中会有这种问题。所以有的时候我们为了避免浅拷贝,会用一些方式实现深拷贝。

首先要了解的js基础
基本数据类型:Object、undefined、null、Boolean、Number、String、Symbol (ES6新加) 
Object包括: Array 、Date 、RegExp 、Function 

两者的重要区别在于:基本类型赋值给变量,变量的标识符和变量的值都存放在内存中的栈(Stack)里。引用类型的变量的标识符在栈中,变量的值在内存的堆(Heap)中。
举一个通俗的例子:基本类型是你在内存的栈中拥有一个咖啡店和钥匙,引用类型是你只有咖啡店的钥匙,你可以去内存的堆中找到对应的咖啡店地址,钥匙环上有一个标签上面写了,这个钥匙是对应的哪一家店,而这个标签就是指针。

图:数据类型

图:引用类型

深浅拷贝问题

不知道什么是深拷贝和浅拷贝的请先去Google并在Chrome调试台自己操作一下,这篇文章只会说明为何JS中会有这种问题。

我举个栗子

出现这种结果的原因是第二步将a赋给b只是将a的地址给了b(请注意,数组是引用类型),此时改变b其实就是改变了堆中a和b共同指向的地址的值。通俗一点讲:a和b两个人都拿到了一个同一家咖啡店的钥匙,这时候在咖啡店多放一个杯子,自然两人共同的咖啡店都有这个杯子。所以有的时候我们为了避免浅拷贝,会用一些方式实现深拷贝。

关于ES6里的const,有些后台人员甚至前端人员误以为const赋值是常量,其实

const并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址)

(此段引用自阮一峰)

const只是把钥匙上的标签(指针)固定,所以:

小白第一次写技术文章,如果有错误还请多多指教,多谢!

参考资料
[深入了解JS引用类型基本类型][5]
[阮一峰ES6教程][6]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102692.html

相关文章

  • JavaScript深入浅出

    摘要:理解的函数基础要搞好深入浅出原型使用原型模型,虽然这经常被当作缺点提及,但是只要善于运用,其实基于原型的继承模型比传统的类继承还要强大。中文指南基本操作指南二继续熟悉的几对方法,包括,,。商业转载请联系作者获得授权,非商业转载请注明出处。 怎样使用 this 因为本人属于伪前端,因此文中只看懂了 8 成左右,希望能够给大家带来帮助....(据说是阿里的前端妹子写的) this 的值到底...

    blair 评论0 收藏0
  • 文章彻底说清JS的深拷贝/浅拷贝

    摘要:一篇文章彻底说清的深拷贝浅拷贝这篇文章的受众第一类业务需要急需知道如何深拷贝对象的开发者。这篇文章分享的目的更多还是希望用一篇文章整理清楚深浅拷贝的含义递归实现思路以及小伙伴们如果使用了这种黑科技一定要清楚这样写的优缺点。 一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者。 第二类,希望扎实JS基础,将来好去面试官前秀操作...

    J4ck_Chan 评论0 收藏0
  • 文章彻底说清JS的深拷贝/浅拷贝

    摘要:一篇文章彻底说清的深拷贝浅拷贝这篇文章的受众第一类业务需要急需知道如何深拷贝对象的开发者。这篇文章分享的目的更多还是希望用一篇文章整理清楚深浅拷贝的含义递归实现思路以及小伙伴们如果使用了这种黑科技一定要清楚这样写的优缺点。 一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者。 第二类,希望扎实JS基础,将来好去面试官前秀操作...

    lakeside 评论0 收藏0
  • 文章彻底说清JS的深拷贝/浅拷贝

    摘要:一篇文章彻底说清的深拷贝浅拷贝这篇文章的受众第一类业务需要急需知道如何深拷贝对象的开发者。这篇文章分享的目的更多还是希望用一篇文章整理清楚深浅拷贝的含义递归实现思路以及小伙伴们如果使用了这种黑科技一定要清楚这样写的优缺点。 一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者。 第二类,希望扎实JS基础,将来好去面试官前秀操作...

    big_cat 评论0 收藏0

发表评论

0条评论

MyFaith

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<