## 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后端代码
- 小程序列表循环、传参、显示、接收
- 常用链接
- 环境常用操作手册