如何找到一家提供专业效果网站开发的龙岗网站建设公司?
摘要:龙岗网站建设公司效果,网站开发软件,小蚁人网站建设,免费发布信息网站深浅拷贝 经典真题 深拷贝和浅拷贝的区别?如何实现 深拷贝和浅拷贝概念 首先,我们需要明确深拷贝和浅拷贝的概念。
龙岗网站建设公司效果,网站开发软件,小蚁人网站建设,免费发布信息网站深浅拷贝
经典真题
深拷贝和浅拷贝的区别#xff1f;如何实现
深拷贝和浅拷贝概念
首先#xff0c;我们需要明确深拷贝和浅拷贝的概念。 浅拷贝#xff1a;只是拷贝了基本类型的数据#xff0c;而引用类型数据#xff0c;复制后也是会发生引用#xff0c;我们把这种拷…深浅拷贝
经典真题
深拷贝和浅拷贝的区别如何实现
深拷贝和浅拷贝概念
首先我们需要明确深拷贝和浅拷贝的概念。 浅拷贝只是拷贝了基本类型的数据而引用类型数据复制后也是会发生引用我们把这种拷贝叫做浅拷贝(浅复制)。浅拷贝只复制指向某个对象的指针引用地址而不复制对象本身新旧对象还是共享同一块内存。 深拷贝在堆中重新分配内存并且把源对象所有属性都进行新建拷贝以保证深拷贝的对象的引用图不包含任何原有对象或对象图上的任何对象拷贝后的对象与原来的对象是完全隔离互不影响。
浅拷贝方法
接下来我们来看一下对象有哪些浅拷贝方法。
1. 直接赋值
直接赋值是最常见的一种浅拷贝方式。例如
var stu {name: xiejie,age: 18
}
// 直接赋值
var stu2 stu;
stu2.name zhangsan;
console.log(stu); // { name: zhangsan, age: 18 }
console.log(stu2); // { name: zhangsan, age: 18 }2. Object.assign 方法
我们先来看一下 Object.assign 方法的基本用法。
该方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。
如下
var stu {name: xiejie
}
var stu2 Object.assign(stu, { age: 18 }, { gender: male })
console.log(stu2); // { name: xiejie, age: 18, gender: male }在上面的代码中我们有一个对象 stu然后使用 Object.assign 方法将后面两个对象的属性值分配到 stu 目标对象上面。
最终得到 { name: ‘xiejie’, age: 18, gender: ‘male’ } 这个对象。
通过这个方法我们就可以实现一个对象的拷贝。例如
const stu {name: xiejie,age: 18
}
const stu2 Object.assign({}, stu)
stu2.name zhangsan;
console.log(stu); // { name: xiejie, age: 18 }
console.log(stu2); // { name: zhangsan, age: 18 }在上面的代码中我们使用 Object.assign 方法来对 stu 方法进行拷贝并且可以看到修改拷贝后对象的值并没有影响原来的对象这仿佛实现了一个深拷贝。
然而Object.assign 方法事实上是一个浅拷贝。
当对象的属性值对应的是一个对象时该方法拷贝的是对象的属性的引用而不是对象本身。
例如
const stu {name: xiejie,age: 18,stuInfo: {No: 1,score: 100}
}
const stu2 Object.assign({}, stu)
stu2.name zhangsan;
stu2.stuInfo.score 90;
console.log(stu); // { name: xiejie, age: 18, stuInfo: { No: 1, score: 90 } }
console.log(stu2); // { name: zhangsan, age: 18, stuInfo: { No: 1, score: 90 } }3. ES6 扩展运算符
首先我们还是来回顾一下 ES6 扩展运算符的基本用法。
ES6 扩展运算符可以将数组表达式或者 string 在语法层面展开还可以在构造字面量对象时将对象表达式按 key-value 的方式展开。
