美文网首页
[JS]深拷贝与浅拷贝与赋值

[JS]深拷贝与浅拷贝与赋值

作者: 泉落云生 | 来源:发表于2018-04-27 21:26 被阅读24次

前言

首先需要知道javascript的数据类型:栈内存(%) 堆内存(*)

  • number----------->%
  • string-------------->%
  • boolean------------>%
  • undefined---------->%
  • null----------------->%
  • Object -------------->*
  • Symbol(ES6)

深拷贝与浅拷贝的区别就是,修改是否会造成相互影响。

赋值

简单数据类型才谈赋值,复杂数据类型谈的是拷贝(Object)。

浅拷贝

var obj1 = {name:'zhangsan',age:200};
var obj2 = obj1;
obj1.sex='male';
console.log(obj1,obj2) //结果是相同的,原因是浅拷贝只复制指向某个对象的指针,而不复制对象本身。

深拷贝的实现方法

  1. for/for in
var obj1 = {name:'jojo',age:200,sex:'male'}
var obj2 = {};
for(let item in obj1){
    obj2[item]=obj1[item]
}
obj1.name='kaka';
console.log(obj1,obj2)
  1. JSON.parse/stringfy
var obj1 = {name:'jojo',age:200,sex:'male'}
var obj2 = {};
obj2 = JSON.parse(JSON.stringify(obj1))
obj1.name='kaka';
console.log(obj1,obj2)
  1. Object.create()
var obj1 = {name:'jojo',age:200,sex:'male'};
obj1.name='kaka';
var obj2 = Object.create(obj1)
console.log(obj1,obj2)
  1. 解构赋值就是一种深拷贝
var arr1 = [1,2,3,4,5,6,7];
var [...arr2]=arr1;
//let {...rest} = obj
arr1.splice(0,1)
console.log(arr1,arr2)
  1. 数组的Array.from()也是一种深拷贝
var arr1 = [1,2,3,4,5,6,7];
var [...arr2]=arr1;
arr1.splice(0,1)
console.log(arr1,arr2)
  1. 特殊(es6)Object.assign是一种浅拷贝,但是可以通过Object.assign({},obj1,obj2...)的方法深拷贝。

最后:
建议使用Lodash

相关文章

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • JavaScript 深拷贝、浅拷贝和 Object.assig

    数组解构赋值的模式同样适用于任意迭代器:ES6 变量声明与赋值:值传递、浅拷贝与深拷贝详解 浅拷贝 浅拷贝是指复制...

  • JS赋值、浅拷贝与深拷贝

    赋值 基本数据类型赋值,赋值之后两个变量互不影响 对引用类型进行赋址,两个变量指向同一个对象,改变变量 a 之后会...

  • [JS]深拷贝与浅拷贝与赋值

    前言 首先需要知道javascript的数据类型:栈内存(%) 堆内存(*) number----------->...

  • JAVA设计模式:原型模式与拷贝

    深拷贝与浅拷贝 浅拷贝:对象A进行赋值操作得到对象B,这就是浅拷贝,修改对象A的属性会影响到B的属性 深拷贝:深拷...

  • js深拷贝浅拷贝

    目录 一.数据类型 二.浅拷贝与深拷贝 三.赋值和浅拷贝的区别 四.浅拷贝的实现方式 五.深拷贝的实现方式 一.数...

  • 简介深浅拷贝

    深浅拷贝 python 直接赋值,浅拷贝和深拷贝 直接赋值 其实就是对象的引用 (可以理解成浅拷贝) 浅拷贝: 拷...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • js面试题

    1,js的深拷贝与浅拷贝 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,...

  • JS实现深拷贝、浅拷贝的方法

    一、赋值、浅拷贝与深拷贝的区别 二、深拷贝的方法 1.JSON转换 缺点: (1)如果对象里有函数,函数无法被拷贝...

网友评论

      本文标题:[JS]深拷贝与浅拷贝与赋值

      本文链接:https://www.haomeiwen.com/subject/fypilftx.html