## 1.淺拷貝
* 拷貝就是把父對像的屬性,全部拷貝給子對象。
* 淺拷貝就是數據雙向改變。
* JavaScript存儲對象都是存地址的。
* 淺拷貝會導致 obj1 和obj2 指向同一塊內存地址。改變了其中一方的內容,都是在原來的內存上做修改會導致拷貝對象和源對象都發生改變。
```
var obj1 = {//淺拷貝
'name' : 'zhangsan',
'age' : '18',
};
var obj2 = obj1;
obj2.name = '987654'
console.log(obj1.name) //987654
console.log(obj2.name) //987654
//淺拷貝,雙向改變,指向同一片內存空間
var arr1 = [1, 2, 3];
var arr2 = arr1;
arr1[0] = 'change';
console.log('shallow copy: ' + arr1 + " ); //shallow copy: change,2,3
console.log('shallow copy: ' + arr2 + " ); //shallow copy: change,2,3
```
## 2、深拷貝:是開辟一塊新的內存地址,將原對象的各個屬性逐個復制進去。對拷貝對象和源對象各自的操作互不影響。
1、使用遞歸的方式實現深拷貝
```
//使用遞歸的方式實現數組、對象的深拷貝
function deepClone1(obj) {
//判斷拷貝的要進行深拷貝的是數組還是對象,是數組的話進行數組拷貝,對象的話進行對象拷貝
var objClone = Array.isArray(obj) ? [] : {};
//進行深拷貝的不能為空,并且是對象或者是
if (obj && typeof obj === "object") {
for (key in obj) {
if (obj.hasOwnProperty(key)) {
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepClone1(obj[key]);
} else {
objClone[key] = obj[key];
}
}
}
}
return objClone;
}
```
2、通過 JSON 對象實現深拷貝
```
function deepClone2(obj) {
var _obj = JSON.stringify(obj),
objClone = JSON.parse(_obj);
return objClone;
}
var obj1 = {
'name' : 'pengyaping',
'age' : '18',
};
var a = deepClone2(obj1).name = '45456465'
console.log(a) // 45456465
console.log(obj1.name) //pengyaping
```
> JSON對象實現深拷貝的一些問題 * 無法實現對對象中方法的深拷貝
## 3、通過jQuery的extend方法實現深拷貝
```
var array = [1,2,3,4];
var newArray = $.extend(true,[],array);
```
## 4、運用到js的 for in
```
var obj1 = {
'name' : 'pengyaping',
'age' : '18',
};
function cloneObject(object){
var newObject = {};
for(var i in object){
newObject[i] = object[i];
}
return newObject;
}
var a = cloneObject(obj1).name= '12313'
console.log(a)
console.log(obj1)
```
- JavaScript
- JS定義要點
- 數字千分位逗號隔開
- 數組排序
- JS字符串拼接,加逗號
- 日期計算周次
- JSON
- JS數組去重
- javascript 函數調用(HOT)
- 數組和對象重新組合,定義
- 遍歷數組,循環內容輸出,添加class
- JSON常用字段新增,對象數組重組
- js 獲取對象的鍵和值,重新組合
- 取對象的鍵和值,重組數組
- 清除數組里為空的值
- JavaScript 變量提升
- JavaScript 閉包
- JavaScript random() 隨機數
- js 多久內送到;設置當前時間延后20分鐘到達,成新時間點
- javascript 判斷當前時間是否在一個時間段內; 是否周六或者周日
- 設置當前時間延后30分鐘到達 成新時間點
- JS倒計時demo
- 數組拼接
- 時間轉換成 yy/mm/dd
- 通過字段返回信息進行文本渲染
- JavaScript replace()方法
- (去重)js計算數組里的對象的某個值相同,其余值相加
- (去重)JS比較兩個數組對象,取出不同的值
- (判重)數組對象判斷內容是否相同,分組,相同的生成對應的標簽
- JS 三元表達式(多條件)
- Typescript
- TS要點定義
- ECMAScript 6
- 模板字符串
- class語法
- JavaScript 雜談
- get和post請求的區別?
- js的事件冒泡和時間捕獲?
- 本地存儲 localStorage 和 sessionStorage 和 cookie
- WebPack和Grunt以及Gulp相比有什么特性
- js對象淺拷貝和深拷貝
- JQ事件委托
- JS如何判斷數組是Array類型
- HTML/CSS
- transform 瀏覽器識別碼
- ul li{} 和 ul>li{} 樣式的區別
- HTML-新建模板
- css 上 右 下 左 空心 箭頭
- opacity 標簽透明:div 連帶內容都被設置?
- flex 彈性布局-div之間間距問題
- CSS3 標題-線動畫-備注
- BootStrap 響應式布局
- node.js
- nodejs 本地方開發接口,配置
- node開發接口, 環境及配置,demo
- nodejs--express接收post請求參數;安裝 body-parser依賴
- mysql
- Mysql 分頁查詢及動態傳參;
- 主表和子表 一對多關系 如何查出主表信息和子表條數
- Mysql 常用命令
- Mysql 表數據聯動及插入,表A數據PUSH到表B
- char(10) 和 varchar(10) 主要的區別是什么?
- Vue.js
- vue 組件快速模版
- vue 組件的顯示隱藏,動畫效果;
- Vue 組件之間的傳值,路由傳參
- VUE中演示v-for為什么要加key
- vue 項目中引入公共方法
- Vue v-for 循環數組、對象、數字時 參數的順序
- vue 定時器常規操作及其停止
- vue常用知識點匯總
- Vue項目如何實現國際化?基于vue-i18n實現國際化經驗
- vue-i18n進行多語言切換?input標簽里面placeholder屬性
- vue中使用base64和md5
- vue 生產環境部署打包時配置;頁面不加載?字體不加載?
- vue-項目引入iview 主題定制-變量覆蓋;問題及其bug
- PHP
- 用PHP寫第一個接口
- PHP-JSON格式demo
- php 數組的循環、新加
- 微信小程序
- 微信小程序關于獲取用戶的openid的php后端代碼
- 小程序列表循環、傳參、顯示、接收
- 常用鏈接
- 環境常用操作手冊