### 1.浅拷贝(只拷贝地址)
![](https://box.kancloud.cn/e3503f07b6832f5f58c0da52749a4ff8_532x327.PNG)
- 此时改变栈中的任一对象的值,俩者的值都会改变,因为他们的存储地址一样
- 改变复制的对象,原对象也会改变
```
<script>
var obj = {
name: "chengchao",
age: "20"
}
cheng = obj
cheng.name = "zhang"
console.log(cheng, obj)
//{name: "zhang", age: "20"} {name: "zhang", age: "20"}
</script>
```
### 2.深拷贝(拷贝值和址)将值放入另一个地址中
![](https://box.kancloud.cn/1f1b4b3da029822c41514ea5aecb2f70_546x316.PNG)
- 此时对象之间属性的改变互不影响
- 改变复制的对象,原对象值不会改变
```
<script>
var obj = {
name: "chengchao",
age: "20"
}
cheng = { ...obj
}
cheng.name = "zhang"
console.log(cheng, obj)
//{name: "zhang", age: "20"} {name: "chengchao", age: "20"}
</script>
```
## promise解决回调地狱
```
<script>
function getData(url){
const promise = new Promise((resolve,reject)=>{
$.ajax({
url,
dataType:"jsonp",
success:res=>{
resolve(res)
},
error:err=>{
reject(err);
}
})
})
return promise;
}
getData("https://api.douban.com/v2/book/search?q=javascript&count=1").then(res=>{
let id = res.books[0].id;
return getData(`https://douban.uieee.com/v2/book/${id}`)
}).then(res=>{
console.log(res);
})
</script>
```
- 效果实例
- 1.点击增加高度
- 2.tab页面切换
- 3. 列表切换
- 4. 隔行变色
- 5. swiper 轮播
- 6.vue
- 7.定时器
- 8. 向表格中添加数据
- 9 瀑布流
- 1.JavaScript基础
- 1. 变量
- 2. 调试
- 3.数据类型
- 4.转换
- 5.控制语句
- 6.运算
- 7. this
- 8 JSON对象和javascript对象的相互转换
- 2.JavaScript的控制语句
- 1. 基本控制语句
- 2.节点
- 2.1DOM补充
- 3. 函数
- js的模块化如何解决
- 不知道有什么用的
- 4.数组
- 5. String
- 补充
- 6.Ajax
- 1. 原生Ajax
- 2. HTTP/get/post
- 3.jQuery-Ajax
- 4.跨域
- 5.axios
- 6.封装
- Ajax效果
- ajax补充
- 7. 正则
- 1.创建正则表达式
- 2. 正则的api
- 3.正则语法
- 4.例子
- 量词
- 8.面向对象
- 1.原型
- ES6
- 模块化
- 1.回调地狱
- 什么是回调地狱
- 简单封装
- promise解决回调地狱
- generator解决回调地狱
- async解决回调地狱
- 2.封装
- Ajax,promise
- JavaScript难点
- 1. 闭包/作用域
- 2.原型链
- 3. 兼容性
- 适配
- JavaScript小效果
- 字符串截取