diff --git a/01-HTML/05-HTML标签:字体标签和超链接.md b/01-HTML/05-HTML标签:字体标签和超链接.md
index 3a67fde..b70cd22 100644
--- a/01-HTML/05-HTML标签:字体标签和超链接.md
+++ b/01-HTML/05-HTML标签:字体标签和超链接.md
@@ -143,10 +143,10 @@ href(hypertext reference):超文本地址。读作“喝瑞夫”,不要
![Paste_Image.png](http://img.smyhvae.com/2015-10-01-cnblogs_html_17.png)
-当然,我们也可以直接点进链接,访问一个网址。举例如下:
+当然,我们也可以直接点进链接,访问一个网址。代码举例如下:
-```
- 点我点我
+```html
+点我点我
```
### 2、锚链接
diff --git a/04-JavaScript基础/09-对象简介和对象的基本操作.md b/04-JavaScript基础/09-对象简介和对象的基本操作.md
index d841562..00593ca 100644
--- a/04-JavaScript基础/09-对象简介和对象的基本操作.md
+++ b/04-JavaScript基础/09-对象简介和对象的基本操作.md
@@ -86,7 +86,7 @@ person.height = '180';
## 对象和数据类型之间的关系
-数据类型分类:
+### 数据类型分类
- **基本数据类型(值类型)**:String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。
@@ -100,7 +100,7 @@ person.height = '180';
只要不是那五种基本数据类型,就全都是对象。
-如果使用基本数据类型的数据,我们所创建的变量都是独立,不能成为一个整体。
+如果使用基本数据类型的数据,我们所创建的变量都是独立的,不能成为一个整体。
对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。
@@ -110,7 +110,9 @@ person.height = '180';
**如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会受到影响**。
-例如:
+上面这句话很重要,我们来看个例子。
+
+### 一个经典的例子
```javascript
var obj = new Object();
@@ -118,11 +120,24 @@ person.height = '180';
var obj2 = obj;
- //修改obj的name属性
- obj.name = "猪八戒";
+ //修改obj2的name属性
+ obj2.name = "猪八戒";
```
-上面的代码中,当我修改obj的name属性后,会发现,obj2的name属性也会被修改。因为obj和obj2指向的是堆内存中的同一个地址。
+上面的代码中,当我修改 obj2 的name属性后,会发现,obj 的 name 属性也会被修改。因为obj和obj2指向的是堆内存中的同一个地址。
+
+这个例子要尤其注意,实战开发中,很容易忽略。
+
+对于引用类型的数据,赋值相当于地址拷贝,a、b占用了同一段地址。所以改了b,a也会变;本质上a、b就是一个东西。
+
+如果你打算把引用类型 A 的值赋值给 B,让A和B相互不受影响的话,可以通过 Object.assign() 来复制对象。效果如下:
+
+```js
+var obj = {name: '孙悟空'};
+
+// 复制对象:把 obj 赋值给 obj3。两者之间互不影响
+var obj3 = Object.assign({}, obj);
+```
## 对象的分类
diff --git a/04-JavaScript基础/21-内置对象:Date.md b/04-JavaScript基础/21-内置对象:Date.md
index 450fbaa..61cb246 100644
--- a/04-JavaScript基础/21-内置对象:Date.md
+++ b/04-JavaScript基础/21-内置对象:Date.md
@@ -87,21 +87,18 @@ console.log(date26);
Date对象 有如下方法,可以获取日期和时间的**指定部分**:
-- `getFullYear() ` 获取年份
+| 方法名 | 含义 | 备注 |
+| ------------- | ----------------- | --------- |
+| getFullYear() | 获取年份 | |
+| getMonth() | **获取月: 0-11** | 0代表一月 |
+| getDate() | **获取日:1-31** | 获取的是几号 |
+| getDay() | **获取星期:0-6** | 0代表周日,1代表周一 |
+| getHours() | 获取小时:0-23 | |
+| getMinutes() | 获取分钟:0-59 | |
+| getSeconds() | 获取秒:0-59 | |
+| etMilliseconds() | 获取毫秒 | 1s = 1000ms |
-- `getMonth() ` **获取月 0-11**(0代表一月)
-- `getDate()` **获取日 1-31**。即:获取的是几号
-
-- `getDay()` **获取星期 0-6**(0代表周日,1代表周一)
-
-- `getHours() ` 获取小时 0-23
-
-- `getMinutes() ` 获取分钟 0-59
-
-- `getSeconds()` 获取秒 0-59
-
-- `getMilliseconds()` 获取毫秒 (1s = 1000ms)
**代码举例**:
@@ -115,7 +112,9 @@ Date对象 有如下方法,可以获取日期和时间的**指定部分**:
console.log(myDate.getMonth() + 1); // 打印结果:2
console.log(myDate.getDate()); // 打印结果:4
+ var dayArr = ['星期日', '星期一', '星期二', '星期三', '星期四','星期五', '星期六'];
console.log(myDate.getDay()); // 打印结果:1
+ console.log(dayArr[myDate.getDay()]); // 打印结果:星期一
console.log(myDate.getHours()); // 打印结果:13
console.log(myDate.getMinutes()); // 打印结果:23
@@ -127,45 +126,62 @@ Date对象 有如下方法,可以获取日期和时间的**指定部分**:
获取了日期和时间的指定部分之后,我们把它们用字符串拼接起来,就可以按照自己想要的格式,来展示日期。
-
-### 举例1:年月日的格式化
+### 举例:年月日的格式化
代码举例:
-```javascript
- // 格式化年月日:2020年2月2日 星期三
- var date = new Date();
- var year = date.getFullYear();
- var month = date.getMonth() + 1;
- var dates = date.getDate();
- var day = date.getDay();
- var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
+```js
+console.log(formatDate());
+
+/*
+ 方法:日期格式化。
+ 格式要求:今年是:2020年02月02日 08:57:09 星期日
+*/
+function formatDate() {
+ var date = new Date();
+
+ var year = date.getFullYear(); // 年
+ var month = date.getMonth() + 1; // 月
+ var day = date.getDate(); // 日
+
+ var week = date.getDay(); // 星期几
+ var weekArr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
+
+ var hour = date.getHours(); // 时
+ hour = hour < 10 ? '0' + hour : hour; // 如果只有一位,则前面补零
+
+ var minute = date.getMinutes(); // 分
+ minute = minute < 10 ? '0' + minute : minute; // 如果只有一位,则前面补零
+
+ var second = date.getSeconds(); // 秒
+ second = second < 10 ? '0' + second : second; // 如果只有一位,则前面补零
+
+ var result = '今天是:' + year + '年' + month + '月' + day + '日 ' + hour + ':' + minute + ':' + second + ' ' + weekArr[week];
+
+ return result;
+}
- console.log('今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day]);
```
-### 举例2:时分秒的格式化
-封装一个函数,返回当前时间的时分秒,格式为 06:06:06)
-
-
-
-
-
-## getTime():获取时间戳
+## 获取时间戳
Date对象 还有如下方法:
-- `getTime()` 获取当前日期对象的**时间戳**。这个方法在实际开发中,用得比较多。
+- `getTime()` 获取日期对象的**时间戳**(单位:毫秒)。这个方法在实战开发中,用得比较多。
啥叫时间戳?接下来,我们解释一下。
+### 时间戳的定义和作用
+
**时间戳**:指的是从格林威治标准时间的`1970年1月1日,0时0分0秒`到当前日期所花费的**毫秒数**(1秒 = 1000毫秒)。
计算机底层在保存时间时,使用的都是时间戳。时间戳的存在,就是为了**统一**时间的单位。
+我们经常会利用时间戳来计算时间,因为它更精确。
+
我们再来看下面这样的代码:
```javascript
@@ -183,7 +199,41 @@ Date对象 还有如下方法:
为啥打印结果是`-28800000`,而不是`0`呢?这是因为,我们的当前代码,是在中文环境下运行的,与英文时间会存在**8个小时的时差**(中文时间比英文时间早了八个小时)。如果代码是在英文环境下运行,打印结果就是`0`。
-**利用时间戳检测代码的执行时间**:
+### 获取 Date 对象的时间戳
+
+代码演示:
+
+```js
+ // 方式一:获取 Date 对象的时间戳(最常用的写法)
+ var date1 = +new Date();
+ console.log(date2); // 打印结果举例:1589448165370
+
+ var date2 = new Date();
+
+ // 方式二:获取 Date 对象的时间戳
+ console.log(date2.getTime()); // 打印结果举例:1589448165370
+
+ // 方式三:获取 Date 对象的时间戳
+ console.log(date2.valueOf()); // 打印结果举例:1589448165370
+```
+
+上面这三种写法都可以获取任意 Date 对象的时间戳,最常见的写法是**方式一**,其次是方式二。
+
+根据前面所讲的关于「时间戳」的概念,上方代码获取到的时间戳指的是:从 `1970年1月1日,0时0分0秒` 到现在所花费的总毫秒数。
+
+### 获取当前时间的时间戳
+
+如果我们要获取**当前时间**的时间戳,除了上面的三种方式之外,还有另一种方式。代码如下:
+
+```js
+ // 方式四:获取当前时间的时间戳
+ console.log(Date.now()); // 打印结果举例:1589448165370
+```
+
+上面这种方式,用得也很多。只不过,`Date.now()`是H5标准中新增的特性,如果你的项目需要兼容低版本的IE浏览器,就不要用了。这年头,谁还用IE呢?
+
+
+### 利用时间戳检测代码的执行时间
我们可以在业务代码的前面定义 `时间戳1`,在业务代码的后面定义 `时间戳2`。把这两个时间戳相减,就能得出业务代码的执行时间。
diff --git a/05-JavaScript进阶/JavaScript开发积累.md b/05-JavaScript进阶/JavaScript开发积累.md
index 0b0f26d..076f678 100644
--- a/05-JavaScript进阶/JavaScript开发积累.md
+++ b/05-JavaScript进阶/JavaScript开发积累.md
@@ -58,10 +58,10 @@ this.todayList.splice(0, 0, ...dataList);
**对象赋值的正确写法**:
```javascript
-Object.assign(this.dataObj, dataObj);
+Object.assign(obj2, obj1);
```
-上方代码中,是将`dataObj` 的值追加到`this.dataObj`中。如果对象里属性名相同,会被覆盖。
+上方代码中,是将`obj1` 的值追加到`obj2`中。如果对象里的属性名相同,会被覆盖。
### 2019-11-25-在新的窗口中打开url
diff --git a/09-ES6/06-ES6:字符串、数组、对象的扩展.md b/09-ES6/06-ES6:字符串、数组、对象的扩展.md
index 0f0b817..057ce2b 100644
--- a/09-ES6/06-ES6:字符串、数组、对象的扩展.md
+++ b/09-ES6/06-ES6:字符串、数组、对象的扩展.md
@@ -167,7 +167,10 @@ ES6中的字符串扩展,用得少,而且逻辑相对简单。如下:
代码解释:还是刚刚说的那样,`Object.is(v1, v2)`比较的是字符串是否相等。
-### 扩展2(重要)
+### Object.assign()
+
+Object.assign() 在实战开发中,使用到的频率非常高,一定要重视。
+
```javascript
Object.assign(目标对象, 源对象1, 源对象2...)
@@ -178,8 +181,7 @@ ES6中的字符串扩展,用得少,而且逻辑相对简单。如下:
其实可以理解成:将多个对象**合并**为一个新的对象。
-
-举例:
+**举例1**、对象的属性复制:
```javascript
let obj1 = { name: 'smyhvae', age: 26 };
@@ -194,8 +196,18 @@ ES6中的字符串扩展,用得少,而且逻辑相对简单。如下:
![](http://img.smyhvae.com/20180404_2240.png)
-上图显示,成功将obj1和obj2的属性复制给了obj3。
+上图显示,成功将obj1和obj2的属性复制(追加)给了obj3;如果属性名相同,会被覆盖。
+**举例2**、将对象 A 赋值给对象B:
+
+```js
+const obj1 = { name: 'smyhvae', age: 26 };
+
+const obj2 = Object.assign({}, obj1);
+
+```
+
+注意,将对象 A 复制给对象 B,不要直接使用 `B = A`,而是要使用 Object.assign()。至于为何这样做的原因,我们在之前的《JS基础/对象简介和对象的基本操作》里已经讲过。
### 扩展3:`__proto__`属性
diff --git a/09-ES6/07-ES6:Promise入门详解.md b/09-ES6/07-ES6:Promise入门详解.md
index f465474..144e2b1 100644
--- a/09-ES6/07-ES6:Promise入门详解.md
+++ b/09-ES6/07-ES6:Promise入门详解.md
@@ -231,19 +231,19 @@ Promise对象, 可以**将异步操作以同步的流程表达出来**。使用
// 先发起request1,等resolve后再发起request2;紧接着,等 request2有了 resolve之后,再发起 request3
request1()
- .then(data => {
+ .then(res1 => {
// 接口1请求成功后,打印接口1的返回结果
- console.log(data);
+ console.log(res1);
return request2();
})
- .then(data => {
+ .then(res2 => {
// 接口2请求成功后,打印接口2的返回结果
- console.log(data);
+ console.log(res2);
return request3();
})
- .then(data => {
+ .then(res3 => {
// 接口3请求成功后,打印接口3的返回结果
- console.log(data);
+ console.log(res3);
});