分享
JS编程题 ⚡️ 一次性学透Promise
输入“/”快速插入内容
JS编程题 ⚡️ 一次性学透Promise
飞书用户1744
2024年8月13日修改
1、数据类型
(1)什么是浅拷贝?什么是深拷贝?说明并分别写出代码。
①浅拷贝
所谓浅拷贝,就是一个变量赋值给另一个变量,其中一个变量的值改变,则两个变量的值都变了,即对于浅拷贝来说,是数据在拷贝后,新拷贝的对象内部仍然有一部分数据会随着源对象的变化而变化。
代码块
JavaScript
// 分析
function shallowCopy(obj){
let copyObj = {};
for(let i in obj){
copyObj[i] = obj[i];
}
return copyObj;
}
// 实例
let a = {
name: '张三',
age: 19,
like: ['打篮球', '唱歌', '跳舞']
}
let b = shallowCopy(a);
a.name = '李四';
a.like[0] = '打打乒乓球';
console.log(a);
console.log(b);
②深拷贝
定义
:深拷贝就是,新拷贝的对象内部所有数据都是独立存在的,不会随着源对象的改变而改变。
深拷贝有两种方式
:递归拷贝和利用JSON函数进行深拷贝。
•
递归拷贝的实现原理是
:对变量中的每个元素进行获取,若遇到
基本类型值
,直接获取;若遇到
引用类型值
,则继续对该值内部的每个元素进行获取。
•
JSON深拷贝的实现原理是
:将变量的值转为字符串形式,然后再转化为对象赋值给新的变量。
局限性
:深拷贝的局限性在于,会忽略
undefined
,不能序列化函数,不能解决循环引用的对象。
递归拷贝方式实现代码:
代码块
JavaScript
// 分析
function deepCopy(obj){
// 判断是否为引用数据类型
if(typeof obj === 'object'){
let result = obj.constructor === Array ? [] : {};
// 对引用类型继续进行遍历,如果遍历没有结束的话
for(let i in obj){
result[i] = typeof obj[i] === 'object' ? deepCopy(obj[i]) : obj[i];
}
return result;
}
// 为基本数据类型,直接赋值返回
else{
return obj;
}
}
// 实例 - 利用递归函数做深拷贝
let c = {
name:'张三',
age:12,
like:[
'打乒乓球',
'打羽毛球',
'打太极'
]
}
let d = deepCopy(c);
c.name = '李四';
c.like[0] = '打篮球';
console.log(c);
console.log(d);