[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 的區別