[TOC]
>[success] # 对深拷贝的认知总结
~~~
基本类型的数据不需要深拷贝,比如'字符串、number、布尔值'都是直接赋值即可达到深拷贝的效果
~~~
<br/>
>[success] ## 基本类型数据拷贝写法
~~~
var obj = {
a: 1,
b: 2
}
var obj2 = {
a: obj.a,
b: obj.b
}
obj.a = 3
obj.a // 3
obj2.a // 1
~~~
<br/>
>[danger] ## 错误写法
~~~
var obj = {
a: 1,
b: 2
}
var obj2 = obj
obj.a = 3
obj.a // 3
obj2.a // 3
还有一种情况也是深拷贝不成功的,如下:
var obj = {
a: 1,
b: [1, 2, 3]
}
var obj2 = {}
for(var key in obj){
obj2[key] = obj[key]
}
这种情况obj.b是深拷贝不到的,如果修改了obj.b中的值obj2.b也会改变的
~~~
<br/>
>[success] ## 数组的深拷贝
说白了就是一个数组的值push到另一个数组中即可
~~~
var arr = [1, 2, 3, 4, 5, 6]
var arr2 = []
this.arr.forEach( item => {
arr2.push(item)
})
或者一个简单的写法:
arr2.push(...arr)
~~~
<br/>
>[success] ## 对象的深拷贝
~~~
var obj = { name: '小明',age: '10岁' }
var obj2 = {}
for(var key in obj){
obj2[key] = obj[key]
}
~~~
<br/>
>[success] ## 数据中变量值为null时如何处理?
有时我的数据中格式是这样的:
~~~
let arr = [
{
a: null
},
{
a: {
b: '哈哈'
}
}
]
const deepCopy = (p, c) => {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object' && p[i] !== null) { // 判断类型为object并且不等于null
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}
在执行deepcopy时会报错因为,'null'是一个'空对象的指针',所以需要做一下判断加了一句'p[i] !== null'就可以了
~~~
- vue复选框逻辑
- get请求给后台传数组
- 提交表单时传值参数处理方案
- Element ui上传图片功能
- async和await的使用
- 时间戳转换
- 日期格式转换时间戳
- 时间戳转换日期格式
- 对深拷贝的认知总结
- vue-右键菜单功能
- textarea中换行、回车、空格的识别与处理
- element ui表格合并
- 合并行(上下行)
- 双层for循环
- 数组去重
- 瀑布流
- 前端多条件筛选
- 闭包的理解
- 改变this指向
- vue单选框逻辑
- 对象数组根据某个属性来进行排序
- vscode插件整理
- 对象数组多条件去重
- Blob类型数据转换Json数据类型
- Element ui做批量上传功能
- 前端cookie和后端cookie
- 强制转换https协议
- 给事件传额外参数
- 树形结构数据处理
- 查找所有父级数据
- 根据id筛选单条数据
- 动态引入阿里图标库
- 四舍五入
- 封装一个Promise.allSettled方法
- 判断输入框内是否有emoji表情
- element-ui的popover组件位置偏移
- formData上传文件时,携带【数组对象参数】
- 前端解压压缩包(zip)解压后上传解压的文件
- element ui表格列相同解决办法
- elementUI,table复选框多选,翻页/切换条数时保持选中状态
- cookie 和 token 的区别