js的基本数据类型和引用数据类型及深拷贝浅拷贝
1、栈(stack)和堆(heap)
stack为自动分配的内存空间,它由系统自动释放;而heap则是动态分配的内存,大小也不一定会自动释放
2、js数据类型分两种
(1)基本数据类型(值类型):Number、String、Boolean、Null、 Undefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际值。
(2)引用数据类型(地址类型):Object(在JS中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象)
基本数据类型存放在栈内存中
引入数据类型存放在堆中,地址存放在栈中
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3、深拷贝和浅拷贝
所谓的深拷贝和浅拷贝说白了其实就是a复制b,如果a发生了变化,b也随着发生变化,说明是浅拷贝;如果a发生变化,b没有发生变化则是深拷贝。
(1)浅拷贝的方法:
<1> 等号赋值 (数组的拷贝)
var arr1 = [1,2,3,4]
var arr2 = arr1
arr1[0] = 'a'
console.log( arr1); // ['a',2,3,4]
console.log( arr2); // ['a',2,3,4]
<2> 简单的引用复制
<3> Object.assign()
<4>解构赋值
var obj1 = { a:21,b:5,c:{d:8,e:7}}
var obj2 = {...obj1}
(2)深拷贝的方法有:
<1> JSON.stringify(obj) 先将对象转换为字符串
JSON.parse(str) 然后再将字符串转为对象。
<2> 利用递归遍历的方式实现深拷贝
<3> 下载插件 loadsh
通过 _.cloneDeep() 实现深拷贝
最新文章
- 【bzoj2648】 SJY摆棋子
- [django]表格的添加与删除实例(可以借鉴参考)
- Android中如何收听特定应用安装成功的广播
- Linux中查看文件编码
- derby支持的数据类型
- == 和 isEqualToString的区别之备忘
- HDU 1568 Fibonacci 数学= = 开篇
- IIS6.0服务器搭建网站无法访问解决方法
- OpenGL ES 2.0 摄像机与投影
- Codeforces 463D Gargari and Permutations
- C++模板类中使用静态成员变量(例如Singleton模式)
- [NPOI2.0] 使用NPOI读取和导出Excel文件
- tinyxml的封装与使用(转载)
- 解决svn更新项目目录时“Error:svn: E155037: Previous operation has not finished; run &#39;cleanup&#39; if it was interrupted”的报错问题
- CSS float的相关图文详解(一)
- 聚类——FCM的matlab程序
- 编写高质量代码:改善Java程序的151个建议 --[36~51]
- android 开发 View _1_ View的子类们 和 视图坐标系图
- jsp+ajax+servlet+jquery从后台取json数据示例
- mysql 5.6 binlog组提交实现原理(转载)