JavaScript数据类型

基础数据类型:保存在栈内存中的简单数据段 ,有undefined,boolean,number,string,null
引用数据类型:Array,object,Function保存在堆内存空间中

var a1 = 0; var a2 = 'this is str'; var a3 = null 存放在栈内存中

var c =[1,2,3] 与 var d = {m:20} 变量名与内存地址存储在栈内存中,[1,2,3]与{m:20} 作为对象存储在堆内存中

基础数据类型的复制(如var a = 20 var b = a)

引用数据类型的复制 ( var m ={a:10, b:20} var n = m)

解释:
m与n指向同一个内存空间,当m或者n改变时,另一个也跟着改变
如m.a = 80 ; console.log(n.a) // 80

总结:

浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;

深拷贝(deep copy):复制并创建一个一摸一样的对象,不共享内存,修改新对象,旧对象保持不变;实现深拷贝主要有2种方法

(1)递归

(2)JSON.stringify结合JSON.parse

JavaScript中浅拷贝和深拷贝的区别的更多相关文章

  1. JavaScript中浅拷贝和深拷贝的区别和实现

    深拷贝和浅拷贝的区别   浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存:    深拷贝(deep copy):复制并创建一个一摸一样的对象,不共 ...

  2. Java中浅拷贝和深拷贝的区别

    浅拷贝和深拷贝的定义: 浅拷贝: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.即对象的浅拷贝会对"主"对象进行拷贝,但不会复制主对象 ...

  3. Python中浅拷贝和深拷贝的区别总结与理解

    单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址相同 a = [1,2] # ...

  4. python中浅拷贝和深拷贝的区别

    浅拷贝 可变类型浅拷贝copy函数就是浅拷贝,只对可变类型的第一层对象进行拷贝,对拷贝的对象开辟新的内存空间进行存储,不会拷贝对象内部的子对象可变类型:a = [1, 2, 3] b = [11, 2 ...

  5. 全面聊聊JavaScript的浅拷贝和深拷贝

    一.背景      首先我们可以看下面这段简单的代码: var obj = {name:'程序猿',sex:'男'}; var arr = ['程序猿','程序媛']; var copyobj = o ...

  6. 关于JavaScript的浅拷贝和深拷贝

    在 JS 中有一些基本类型像是Number.String.Boolean,而对象就是像这样的东西{ name: 'Larry', skill: 'Node.js' },对象跟基本类型最大的不同就在于他 ...

  7. javascript篇-浅拷贝与深拷贝

    理解javascript 的浅拷贝与深拷贝,首先看一下js的数据类型: js有5种基本数据类型:undefined,null,boolean,number,string 还有一种复杂的数据类型(也叫引 ...

  8. C++浅拷贝和深拷贝的区别

    C++浅拷贝和深拷贝的区别 2012-04-24 21:22 11454人阅读 评论(6) 收藏 举报 c++deleteclass编译器c c++默认的拷贝构造函数是浅拷贝 浅拷贝就是对象的数据成员 ...

  9. Python FAQ2:赋值、浅拷贝、深拷贝的区别?

    在Python编程过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题.所以,在这里按个人的理解谈谈它们之间的区别. 一.赋值(assignment) 在<P ...

随机推荐

  1. C++ 求向量的交集、并集、差集

    #include<iostream> #include<stdio.h> #include<list> #include<algorithm> //se ...

  2. hdu 3938 Portal (prim+离线)

    Problem - 3938 题意是要求出给定权值下,满足要求的点对的数目.所谓的要求是,给出两点,之间会有很多路径,这个点对的最小距离是众多路径中,最短的一条路径的长度,路径长度是路径上最长边的长度 ...

  3. Eclipsed的SVN插件不能识别之前工作空间的项目

    今天用Eclipse的SVN插件,由于之前项目是用"tortoisesvn"进行checkout的,并且已经在工作空间中使用.后来用来Ecplise的SVN插件,可是发现右键Tea ...

  4. phpstudy一直使用php5.6版本一直“”“报错应用程序无法正常启动0xc000007b”,亲测可行

    http://www.php.cn/xiazai/gongju/1351 vc9和vc11-vc14运行库 2018-01-26 来源/作者:php中文网 «» 下载次数:7808 工具简介: php ...

  5. Android Studio(五):修改Android Studio项目包名

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  6. H3C 广域网的作用

  7. js后端返回一个时间戳,用原生怎么对时间进行格式化?

    function fn(time) { var date = new Date(time); var len = time.toString().length; // 时间戳不足13位则在后面加零 i ...

  8. 微信小程序下拉刷新真机无法弹回

    在下拉函数里加上这句wx.stopPullDownRefresh(); /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { v ...

  9. div+css布局的好处

    改版的时候更方便,只需改动CSS文件 页面加载速度更快,结构清晰,页面简洁 表现与结构相分离 有利于SEO,排名更靠前

  10. Java JDBC学习实战(二): 管理结果集

    在我的上一篇博客<Java JDBC学习实战(一): JDBC的基本操作>中,简要介绍了jdbc开发的基本流程,并详细介绍了Statement和PreparedStatement的使用:利 ...