From 108e7973bf428e67be58bbbd4bfc8a1d0114bd4c Mon Sep 17 00:00:00 2001
From: xugaoyi <894072666@qq.com>
Date: Thu, 25 Mar 2021 20:24:44 +0800
Subject: [PATCH] =?UTF-8?q?blog:=20=E6=B7=BB=E5=8A=A0React=E5=AD=A6?=
=?UTF-8?q?=E4=B9=A0=E7=AC=94=E8=AE=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
docs/.vuepress/config/themeConfig/nav.js | 1 +
.../40.学习笔记/10.《ES6 教程》笔记.md | 8 +-
docs/01.前端/40.学习笔记/20.《Vue》笔记.md | 10 +-
docs/01.前端/40.学习笔记/25.《Reqct》笔记.md | 17 ++
...ios》 copy.md => 30.《TypeScript 从零实现 axios》.md} | 0
docs/01.前端/40.学习笔记/35.TypeScript笔记.md | 2 +-
docs/01.前端/40.学习笔记/40.小程序笔记.md | 109 ++++---
docs/《ES6 教程》笔记/01.ECMAScript 6 简介.md | 6 +-
docs/《ES6 教程》笔记/02.let 和 const 命令.md | 7 +-
docs/《ES6 教程》笔记/03.变量的解构赋值.md | 6 +-
docs/《ES6 教程》笔记/04.字符串的扩展.md | 6 +-
docs/《ES6 教程》笔记/05.字符串的新增方法.md | 7 +-
docs/《ES6 教程》笔记/06.正则的扩展.md | 6 +-
docs/《ES6 教程》笔记/07.数值的扩展.md | 7 +-
docs/《ES6 教程》笔记/08.函数的扩展.md | 7 +-
docs/《ES6 教程》笔记/09.数组的扩展.md | 7 +-
docs/《ES6 教程》笔记/10.对象的扩展.md | 7 +-
docs/《ES6 教程》笔记/11.对象的新增方法.md | 6 +-
docs/《ES6 教程》笔记/12.Symbol.md | 6 +-
.../13.Set 和 Map 数据结构.md | 6 +-
docs/《ES6 教程》笔记/14.Proxy.md | 6 +-
docs/《ES6 教程》笔记/15.Reflect.md | 6 +-
docs/《ES6 教程》笔记/16.Promise 对象.md | 6 +-
.../17.Iterator 和 for-of 循环.md | 6 +-
.../18.Generator 函数的语法.md | 6 +-
.../19.Generator 函数的异步应用.md | 6 +-
docs/《ES6 教程》笔记/20.async 函数.md | 7 +-
docs/《ES6 教程》笔记/21.Class 的基本语法.md | 6 +-
docs/《ES6 教程》笔记/22.Class 的继承.md | 8 +-
docs/《ES6 教程》笔记/23.Module 的语法.md | 7 +-
docs/《ES6 教程》笔记/24.Module 的加载实现.md | 7 +-
docs/《ES6 教程》笔记/25.编程风格.md | 6 +-
.../26.读懂 ECMAScript 规格.md | 6 +-
docs/《ES6 教程》笔记/27.异步遍历器.md | 7 +-
docs/《ES6 教程》笔记/28.ArrayBuffer.md | 6 +-
docs/《ES6 教程》笔记/29.最新提案.md | 7 +-
docs/《ES6 教程》笔记/30.装饰器.md | 7 +-
docs/《ES6 教程》笔记/31.函数式编程.md | 6 +-
docs/《ES6 教程》笔记/32.Mixin.md | 6 +-
docs/《ES6 教程》笔记/33.SIMD.md | 6 +-
docs/《ES6 教程》笔记/34.参考链接.md | 6 +-
.../10.手册/00.常用Git命令清单.md | 2 +-
.../《Git》学习笔记/10.手册/03.Git变基合并.md | 2 +-
.../10.手册/06.Git命令思维导图.md | 8 +-
.../20.文档笔记/10.Git基础与命令.md | 11 +-
.../20.文档笔记/100.Git工具-重写历史.md | 8 +-
.../20.文档笔记/110.Git工具-重置揭密.md | 8 +-
.../20.文档笔记/20.Git分支-分支原理.md | 8 +-
.../20.文档笔记/30.Git分支的新建与合并-分支操作.md | 9 +-
.../20.文档笔记/40.Git分支管理-查看分支.md | 10 +-
.../20.文档笔记/50.Git分支开发工作流.md | 10 +-
.../20.文档笔记/60.Git分支-远程分支.md | 12 +-
.../20.文档笔记/70.Git分支-变基.md | 8 +-
.../20.文档笔记/80.Git工具-查看修订版本.md | 8 +-
.../20.文档笔记/90.Git工具-交互式暂存.md | 8 +-
docs/《JavaScript教程》笔记/01.基础.md | 54 ++--
docs/《JavaScript教程》笔记/02.内置对象.md | 108 +++----
docs/《JavaScript教程》笔记/03.面向对象.md | 99 +++----
docs/《JavaScript教程》笔记/04.异步操作.md | 12 +-
docs/《JavaScript教程》笔记/05.DOM.md | 226 +++++++--------
docs/《JavaScript教程》笔记/06.事件.md | 30 +-
docs/《JavaScript教程》笔记/07.浏览器模型.md | 36 +--
docs/《React》笔记/01.核心概念/01.JSX简介.md | 106 +++++++
docs/《React》笔记/01.核心概念/02.元素渲染.md | 68 +++++
.../01.核心概念/03.组件&Props.md | 203 +++++++++++++
.../01.核心概念/04.State&生命周期.md | 215 ++++++++++++++
docs/《React》笔记/01.核心概念/05.事件处理.md | 162 +++++++++++
docs/《React》笔记/01.核心概念/06.条件渲染.md | 229 +++++++++++++++
docs/《React》笔记/01.核心概念/07.列表&Key.md | 220 ++++++++++++++
docs/《React》笔记/01.核心概念/08.表单.md | 269 ++++++++++++++++++
docs/《React》笔记/01.核心概念/09.状态提升.md | 12 +
.../01.核心概念/10.组合vs继承.md | 12 +
.../《React》笔记/01.核心概念/11.React哲学.md | 12 +
docs/《React》笔记/02.高级指引/01.高级指引.md | 11 +
docs/《React》笔记/03.Hook/01.Hook.md | 11 +
.../01.初识 TypeScript/01.简介.md | 8 +-
.../01.初识 TypeScript/02.安装 TypeScript.md | 8 +-
.../03.编写第一个 TypeScript 程序.md | 10 +-
.../02.TypeScript 常用语法/01.基础类型.md | 10 +-
.../02.TypeScript 常用语法/02.变量声明.md | 8 +-
.../02.TypeScript 常用语法/03.接口.md | 11 +-
.../02.TypeScript 常用语法/04.类.md | 30 +-
.../02.TypeScript 常用语法/05.函数.md | 22 +-
.../02.TypeScript 常用语法/06.泛型.md | 11 +-
.../02.TypeScript 常用语法/07.类型推断.md | 6 +-
.../02.TypeScript 常用语法/08.高级类型.md | 9 +-
.../03.ts-axios 项目初始化/01.需求分析.md | 7 +-
.../03.ts-axios 项目初始化/02.初始化项目.md | 20 +-
.../03.ts-axios 项目初始化/03.编写基础请求代码.md | 6 +-
.../01.处理请求 url 参数.md | 6 +-
.../02.处理请求 body 数据.md | 12 +-
.../04.ts-axios 基础功能实现/03.处理请求 header.md | 8 +-
.../04.ts-axios 基础功能实现/04.获取响应数据.md | 8 +-
.../04.ts-axios 基础功能实现/05.处理响应 header.md | 8 +-
.../04.ts-axios 基础功能实现/06.处理响应 data.md | 6 +-
.../05.ts-axios 异常情况处理/01.错误处理.md | 8 +-
.../05.ts-axios 异常情况处理/02.错误信息增强.md | 6 +-
.../06.ts-axios 接口扩展/01.扩展接口.md | 6 +-
.../06.ts-axios 接口扩展/02.axios 函数重载.md | 8 +-
.../06.ts-axios 接口扩展/03.响应数据支持泛型.md | 6 +-
.../07.ts-axios 拦截器实现/01.拦截器设计与实现.md | 8 +-
.../01.合并配置的设计与实现.md | 14 +-
.../08.ts-axios 配置化实现/02.请求和响应配置化.md | 7 +-
.../03.扩展 create 静态接口.md | 12 +-
.../01.取消功能的设计与实现.md | 13 +-
.../10.ts-axios 更多功能实现/01.withCredentials.md | 6 +-
.../10.ts-axios 更多功能实现/02.XSRF 防御.md | 6 +-
.../03.上传和下载的进度监控.md | 7 +-
.../10.ts-axios 更多功能实现/04.HTTP 授权.md | 6 +-
.../10.ts-axios 更多功能实现/05.自定义合法状态码.md | 6 +-
.../10.ts-axios 更多功能实现/06.自定义参数序列化.md | 6 +-
.../10.ts-axios 更多功能实现/07.baseURL.md | 8 +-
.../10.ts-axios 更多功能实现/08.静态方法扩展.md | 8 +-
.../11.ts-axios 单元测试/01.前言.md | 7 +-
.../11.ts-axios 单元测试/02.Jest 安装和配置.md | 20 +-
.../11.ts-axios 单元测试/03.辅助模块单元测试.md | 7 +-
.../11.ts-axios 单元测试/04.请求模块单元测试.md | 8 +-
.../11.ts-axios 单元测试/05.headers 模块单元测试.md | 6 +-
.../06.Axios 实例模块单元测试.md | 6 +-
.../11.ts-axios 单元测试/07.拦截器模块单元测试.md | 6 +-
.../08.mergeConfig 模块单元测试.md | 8 +-
.../11.ts-axios 单元测试/09.请求取消模块单元测试.md | 6 +-
.../11.ts-axios 单元测试/10.剩余模块单元测试.md | 6 +-
.../01.ts-axios 编译与发布.md | 8 +-
.../12.ts-axios 部署与发布/02.引用 ts-axios 库.md | 6 +-
docs/《Vue》笔记/01.基础/00.MVVM模式.md | 9 +-
docs/《Vue》笔记/01.基础/10.生命周期.md | 38 +--
.../01.基础/20.计算属性 vs 方法 vs 侦听属性.md | 9 +-
docs/《Vue》笔记/01.基础/30.v-if vs v-show.md | 9 +-
.../01.基础/35.列表渲染之数组、对象更新检测.md | 9 +-
.../02.组件/36.使用组件的细节点.md | 8 +-
.../02.组件/40.父组件给子组件传值.md | 8 +-
.../02.组件/50.子组件派发事件和值给父组件.md | 8 +-
.../52.Prop 验证 与 非 Prop 的 Attribute.md | 23 +-
docs/《Vue》笔记/02.组件/55.自定义事件.md | 31 +-
docs/《Vue》笔记/02.组件/60.兄弟组件传值.md | 10 +-
docs/《Vue》笔记/02.组件/65.非父子组件传值.md | 8 +-
.../02.组件/70.父组件调用子组件方法并传入值.md | 9 +-
docs/《Vue》笔记/02.组件/75.插槽slot.md | 12 +-
.../02.组件/80.动态组件与 v-once 指令.md | 13 +-
.../02.组件/90.vue父子组件的生命周期顺序.md | 13 +-
.../03.过渡&动画/110.transition过渡&动画.md | 11 +-
.../03.过渡&动画/112.使用animate库.md | 8 +-
.../03.过渡&动画/120.transition-group列表过渡.md | 10 +-
.../04.可复用性&组合/01.Mixin混入.md | 9 +-
.../05.工具/10.Vue CLi v3 创建项目使用记录.md | 17 +-
.../《Vue》笔记/06.规模化/100.vuex操作相关.md | 11 +-
docs/《Vue》笔记/06.规模化/140.路由懒加载.md | 9 +-
.../99.其他/80.Vue中的防抖函数封装和使用.md | 9 +-
docs/《Vue》笔记/99.其他/90.操作本地缓存.md | 11 +-
150 files changed, 2369 insertions(+), 964 deletions(-)
create mode 100644 docs/01.前端/40.学习笔记/25.《Reqct》笔记.md
rename docs/01.前端/40.学习笔记/{30.《TypeScript 从零实现 axios》 copy.md => 30.《TypeScript 从零实现 axios》.md} (100%)
create mode 100644 docs/《React》笔记/01.核心概念/01.JSX简介.md
create mode 100644 docs/《React》笔记/01.核心概念/02.元素渲染.md
create mode 100644 docs/《React》笔记/01.核心概念/03.组件&Props.md
create mode 100644 docs/《React》笔记/01.核心概念/04.State&生命周期.md
create mode 100644 docs/《React》笔记/01.核心概念/05.事件处理.md
create mode 100644 docs/《React》笔记/01.核心概念/06.条件渲染.md
create mode 100644 docs/《React》笔记/01.核心概念/07.列表&Key.md
create mode 100644 docs/《React》笔记/01.核心概念/08.表单.md
create mode 100644 docs/《React》笔记/01.核心概念/09.状态提升.md
create mode 100644 docs/《React》笔记/01.核心概念/10.组合vs继承.md
create mode 100644 docs/《React》笔记/01.核心概念/11.React哲学.md
create mode 100644 docs/《React》笔记/02.高级指引/01.高级指引.md
create mode 100644 docs/《React》笔记/03.Hook/01.Hook.md
diff --git a/docs/.vuepress/config/themeConfig/nav.js b/docs/.vuepress/config/themeConfig/nav.js
index c2633a9..ed00bcf 100644
--- a/docs/.vuepress/config/themeConfig/nav.js
+++ b/docs/.vuepress/config/themeConfig/nav.js
@@ -20,6 +20,7 @@ module.exports = [
{ text: '《JavaScript高级程序设计》笔记', link: '/note/js/' },
{ text: '《ES6 教程》笔记', link: '/note/es6/' },
{ text: '《Vue》笔记', link: '/note/vue/' },
+ { text: '《React》笔记', link: '/note/react/' },
{
text: '《TypeScript 从零实现 axios》',
link: '/note/typescript-axios/',
diff --git a/docs/01.前端/40.学习笔记/10.《ES6 教程》笔记.md b/docs/01.前端/40.学习笔记/10.《ES6 教程》笔记.md
index 0b91417..734bbab 100644
--- a/docs/01.前端/40.学习笔记/10.《ES6 教程》笔记.md
+++ b/docs/01.前端/40.学习笔记/10.《ES6 教程》笔记.md
@@ -1,17 +1,17 @@
---
-pageComponent:
+pageComponent:
name: Catalogue
- data:
+ data:
key: 《ES6 教程》笔记
imgUrl: https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200112160453.png
description: 本章内容为博主在原教程基础上添加学习笔记,教程版权归原作者所有。来源:ES6教程
title: 《ES6 教程》笔记
date: 2020-01-12 15:49:22
-permalink: /note/es6
+permalink: /note/es6/
article: false
comment: false
editLink: false
-author:
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
diff --git a/docs/01.前端/40.学习笔记/20.《Vue》笔记.md b/docs/01.前端/40.学习笔记/20.《Vue》笔记.md
index f0ac3b0..ac19ec5 100644
--- a/docs/01.前端/40.学习笔记/20.《Vue》笔记.md
+++ b/docs/01.前端/40.学习笔记/20.《Vue》笔记.md
@@ -1,17 +1,17 @@
---
-pageComponent:
+pageComponent:
name: Catalogue
- data:
+ data:
key: 《Vue》笔记
imgUrl: https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200204143633.png
- description: 本章内容是博主的Vue学习笔记,以官方文档为准。
+ description: 本章内容是博主的Vue学习笔记,非教程文档,请以官方文档为准。
title: 《Vue》笔记
date: 2020-02-04 12:16:12
-permalink: /note/vue
+permalink: /note/vue/
article: false
comment: false
editLink: false
-author:
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
diff --git a/docs/01.前端/40.学习笔记/25.《Reqct》笔记.md b/docs/01.前端/40.学习笔记/25.《Reqct》笔记.md
new file mode 100644
index 0000000..03b49c0
--- /dev/null
+++ b/docs/01.前端/40.学习笔记/25.《Reqct》笔记.md
@@ -0,0 +1,17 @@
+---
+pageComponent:
+ name: Catalogue
+ data:
+ key: 《React》笔记
+ imgUrl: data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0xMS41IC0xMC4yMzE3NCAyMyAyMC40NjM0OCI+CiAgPHRpdGxlPlJlYWN0IExvZ288L3RpdGxlPgogIDxjaXJjbGUgY3g9IjAiIGN5PSIwIiByPSIyLjA1IiBmaWxsPSIjNjFkYWZiIi8+CiAgPGcgc3Ryb2tlPSIjNjFkYWZiIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiPgogICAgPGVsbGlwc2Ugcng9IjExIiByeT0iNC4yIi8+CiAgICA8ZWxsaXBzZSByeD0iMTEiIHJ5PSI0LjIiIHRyYW5zZm9ybT0icm90YXRlKDYwKSIvPgogICAgPGVsbGlwc2Ugcng9IjExIiByeT0iNC4yIiB0cmFuc2Zvcm09InJvdGF0ZSgxMjApIi8+CiAgPC9nPgo8L3N2Zz4K
+ description: 本章内容是博主的React学习笔记,非教程文档,请以官方文档为准。
+title: 《React》笔记
+date: 2021-03-25 19:50:12
+permalink: /note/react/
+article: false
+comment: false
+editLink: false
+author:
+ name: xugaoyi
+ link: https://github.com/xugaoyi
+---
diff --git a/docs/01.前端/40.学习笔记/30.《TypeScript 从零实现 axios》 copy.md b/docs/01.前端/40.学习笔记/30.《TypeScript 从零实现 axios》.md
similarity index 100%
rename from docs/01.前端/40.学习笔记/30.《TypeScript 从零实现 axios》 copy.md
rename to docs/01.前端/40.学习笔记/30.《TypeScript 从零实现 axios》.md
diff --git a/docs/01.前端/40.学习笔记/35.TypeScript笔记.md b/docs/01.前端/40.学习笔记/35.TypeScript笔记.md
index 3bdae97..07e868f 100644
--- a/docs/01.前端/40.学习笔记/35.TypeScript笔记.md
+++ b/docs/01.前端/40.学习笔记/35.TypeScript笔记.md
@@ -6,7 +6,7 @@ categories:
- 前端
- 学习笔记
tags:
- -
+ - TypeScript
---
# TypeScript 学习笔记
diff --git a/docs/01.前端/40.学习笔记/40.小程序笔记.md b/docs/01.前端/40.学习笔记/40.小程序笔记.md
index df65e5a..c845cb2 100644
--- a/docs/01.前端/40.学习笔记/40.小程序笔记.md
+++ b/docs/01.前端/40.学习笔记/40.小程序笔记.md
@@ -2,12 +2,12 @@
title: 小程序笔记
date: 2019-12-25 14:27:01
permalink: /note/wx-miniprogram
-tags:
- - null
-categories:
+tags:
+ - 小程序
+categories:
- 前端
- 学习笔记
-author:
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -276,7 +276,7 @@ weUI是一套同微信原生视觉体验一致的基础样式库
#### 数据类型
-String 字符串
+String 字符串
Number 数字
@@ -334,7 +334,7 @@ const testDB = wx.cloud.database({
-#### serverless(无服务)
+#### serverless(无服务)
概念:函数即服务,当需要后端服务的时候,不需要关心后端的IP地址、域名,只需要像调用普通函数一样既可以实现调用。
@@ -544,7 +544,7 @@ pages 设置页面 ,设置后会自动在pages目录下生成相应的目录
type: Object // 数据类型
}
},
-
+
//子组件的wxml文件可直接引入数据{{playlist}}
```
@@ -562,7 +562,7 @@ key的值不建议使用index,因为当数据发生变化会dom结构产生变
-
+
@@ -595,7 +595,7 @@ cloudfunctions目录 右键 `新建 Node.js 云函数` > 输入目录名 `getPl
在云函数中向第三方服务器发送请求要依赖第三方库
-**安装依赖包**
+**安装依赖包**
云函数目录 `getPlaylist` 右键 `在终端打开` 打开命令行 输入命令:
@@ -663,7 +663,7 @@ exports.main = async (event, context) => {
*/
// const list = await playlistCollection.get() // 获取数据库集合的数据 (因为有条数限制,不直接用此方法)
-
+
// 突破条数限制 (为了读取到全部数据然后与第三方服务器获取的数据进行对比去重)
const countResult = await playlistCollection.count() // 获取数据总条数 返回为对象
const total = countResult.total // 取得总条数
@@ -683,7 +683,7 @@ exports.main = async (event, context) => {
}
})
}
-
+
// 获取第三方服务器端数据
const playlist = await rp(URL).then((res) => {
return JSON.parse(res).result
@@ -747,9 +747,9 @@ exports.main = async (event, context) => {
.orderBy('createTime', 'desc').get().then((res) => {
return res.data
})
-
+
})
-
+
return app.serve() // 必需返回
}
@@ -824,9 +824,9 @@ page页面js中有这两个函数:
onReachBottom: function() {
this._getPlaylist()
},
-
-
-
+
+
+
下拉刷新请求完数据后
wx.stopPullDownRefresh() // 停止下拉刷新动画
```
@@ -874,7 +874,7 @@ const TcbRouter = require('router'); // 必需
exports.main = (event, context) => {
const app = new TcbRouter({ event });// 必需
-
+
// app.use 表示该中间件会适用于所有的路由(全局中间件) 非必需
app.use(async (ctx, next) => { // 这个中间件表示所有路由都会调用到,而路由中间件为单独调用
ctx.data = {}; // 获取要传给小程序端的数据
@@ -981,7 +981,7 @@ wx.setNavigationBarTitle({
```json
-// 需要在app.json配置,才能使用后台音乐播放的能力
+// 需要在app.json配置,才能使用后台音乐播放的能力
"requiredBackgroundModes": ["audio", "location"]
```
@@ -1128,7 +1128,7 @@ methods: {
子组件1js:
// 触发自定义事件 向父组件传值, 参数x(可选,传递给父组件的参数,可以是对象或其他)
this.triggerEvent('自定义事件名1', 参数x)
-
+
子组件2js:
@@ -1177,7 +1177,7 @@ wx.getSystemInfo({
onLaunch: function () {
this.globalData = {// 设置全局属性、方法
test: 0
- }
+ }
},
setGlobalData(dataItem, val) { // 设置全局属性
this.globalData[dataItem] = val
@@ -1239,11 +1239,11 @@ components内部的组件无法直接调用外部的样式。可通过以下方
'iconfont', // 对应的是上面等号前面的名称
'icon-sousuo'
],
-
+
子组件wxml: 即可实现调用组件外的样式
-
-
+
+
注意:如果想在组件内部再次修改样式,不能够引用外部传进来的class名称进行修改,可以另起一个class名称进行修改。
```
@@ -1276,7 +1276,7 @@ Component({
插槽内容
组件标签>
-
+
组件内部定义slot标签:
@@ -1289,7 +1289,7 @@ Component({
**如果需要实现多个插槽**
```
-
+
父组件调用传入插槽内容:
<组件标签>
@@ -1307,8 +1307,8 @@ Component({
options: {// 设置
multipleSlots: true // 打开多个插槽功能
},
-
-
+
+
组件内部定义slot标签:
@@ -1337,7 +1337,7 @@ options: {// 设置
}
})
} else { // 未授权
-
+
}
}
})
@@ -1444,8 +1444,8 @@ wx.chooseImage({
-
-
+
+
// 删除图片
onDelImage(event) {
// event.target.dataset.index 获取标签属性data-index的值
@@ -1499,7 +1499,7 @@ wx.chooseImage({
})
/**
* 实现思路及步骤:
- * 1、图片 -> 上传 云存储 -> 生成 图片fineID(云文件ID)
+ * 1、图片 -> 上传 云存储 -> 生成 图片fineID(云文件ID)
* 2、数据 -> 录入 云数据库
* 数据包括:文字内容、图片fineID、昵称、头像、发布时间、openId(用户唯一标识,在插入数据库是系统会自动添加_openId字段,不需要另外插入)
*/
@@ -1528,7 +1528,7 @@ wx.chooseImage({
})
promiseArr.push(p)
})
-
+
// 存入云数据库
Promise.all(promiseArr).then((res) => {
db.collection('blog').add({
@@ -1610,7 +1610,7 @@ formatTime(new Date('Wed Aug 28 2019 16:23:06 GMT+0800 (中国标准时间)'))
#### 阻止事件冒泡
-`bind` 和 `catch` 都可以绑定事件,它们的区别是 `bind` 有事件冒泡,而 `catch` 没有
+`bind` 和 `catch` 都可以绑定事件,它们的区别是 `bind` 有事件冒泡,而 `catch` 没有
@@ -1666,7 +1666,7 @@ formatTime(new Date('Wed Aug 28 2019 16:23:06 GMT+0800 (中国标准时间)'))
.orderBy('createTime', 'desc').get().then((res) => {
return res.data
})
-
+
})
```
@@ -1780,7 +1780,7 @@ formatTime(new Date('Wed Aug 28 2019 16:23:06 GMT+0800 (中国标准时间)'))
##### 第三种:N的数量巨大 几百成千上万个
-**每个 N 都存储 1 的 id**
+**每个 N 都存储 1 的 id**
如新浪博客中的一条博客下面有几千条评论
@@ -1875,7 +1875,7 @@ exports.main = async (event, context) => {
page: `/pages/blog-comment/blog-comment?blogId=${event.blogId}`, // 用户点击推送消息打开的页面
data: { // 模板的内容,keyword为在公众平台设置模板时对应的字段
keyword1: { // 评价内容
- value: event.context
+ value: event.context
},
keyword2: { // 评价时间
value: event.time
@@ -2021,7 +2021,7 @@ wx.getUserInfo({
})
```
-在未授权的情况下需要用户先授权:
+在未授权的情况下需要用户先授权:
```js
// 判断用户是否授权
@@ -2045,12 +2045,12 @@ wx.getUserInfo({
}
}
})
-
-
+
+
授权按钮
-
-
+
+
onGetUserInfo(event) { // 获取用户信息
const userInfo = event.detail.userInfo
if (userInfo) { // 用户允许授权
@@ -2062,7 +2062,7 @@ wx.getUserInfo({
this.triggerEvent('loginFail')
}
}
-
+
```
> 注意:上面这种方式没有获取到openId
@@ -2293,7 +2293,7 @@ onLoad: function (options) {
}
```
-
+
```js
// 云函数入口函数
@@ -2310,7 +2310,7 @@ exports.main = async (event, context) => {
// },
// isHyaline: true // 是否透明
})
-
+
// result为二进制数据, 先上传到云存储
// 上传云存储
@@ -2472,7 +2472,7 @@ checkUpate(){
vue-admin-template <---通过ajax--> 基于Koa2;HTTP API 或 tcb-admin-node ---->云函数、云数据库、云存储
-
+
@@ -2527,7 +2527,7 @@ app.use(async (ctx) => {
const port = 3000
app.listen(port, () => { // 端口号,开启服务后的回调函数
console.log(chalk.green(`> 服务已开启,访问:http://localhost:${port}`))
-})
+})
```
@@ -2716,9 +2716,9 @@ app.use(koaBody({
```js
router.post('/updatePlaylist', async (ctx, next) => {
-
+
const params = ctx.request.body // post请求获取前端传来的数据,需安装和配置koa-body
-
+
})
```
@@ -2736,7 +2736,7 @@ router.get('/list', async (ctx, next) => {
const query = `db.collection('swiper').get()`
const res = await callCloudDB(ctx, 'databasequery', query)
console.log(res)
-
+
})
```
@@ -2749,14 +2749,3 @@ router.get('/list', async (ctx, next) => {
#### 后端上传图片到云存储
[文件上传](https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/storage/uploadFile.html)
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/《ES6 教程》笔记/01.ECMAScript 6 简介.md b/docs/《ES6 教程》笔记/01.ECMAScript 6 简介.md
index 1eddb7f..300055d 100644
--- a/docs/《ES6 教程》笔记/01.ECMAScript 6 简介.md
+++ b/docs/《ES6 教程》笔记/01.ECMAScript 6 简介.md
@@ -3,10 +3,10 @@ title: ECMAScript 6 简介
date: 2020-01-12 15:45:35
permalink: /pages/f344d070a1031ef7
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
> 说明:本章内容为博主在原教程基础上添加自己的学习笔记,来源,教程版权归原作者所有。
diff --git a/docs/《ES6 教程》笔记/02.let 和 const 命令.md b/docs/《ES6 教程》笔记/02.let 和 const 命令.md
index ad0f05f..a0d02c3 100644
--- a/docs/《ES6 教程》笔记/02.let 和 const 命令.md
+++ b/docs/《ES6 教程》笔记/02.let 和 const 命令.md
@@ -3,10 +3,10 @@ title: let 和 const 命令
date: 2020-02-09 16:00:29
permalink: /pages/c1edd70a6b7c7872
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# let 和 const 命令
@@ -643,4 +643,3 @@ var getGlobal = function () {
[ES2020](https://github.com/tc39/proposal-global) 在语言标准的层面,引入`globalThis`作为顶层对象。也就是说,任何环境下,`globalThis`都是存在的,都可以从它拿到顶层对象,指向全局环境下的`this`。
垫片库[`global-this`](https://github.com/ungap/global-this)模拟了这个提案,可以在所有环境拿到`globalThis`。
-
diff --git a/docs/《ES6 教程》笔记/03.变量的解构赋值.md b/docs/《ES6 教程》笔记/03.变量的解构赋值.md
index 250b9ed..7a59f80 100644
--- a/docs/《ES6 教程》笔记/03.变量的解构赋值.md
+++ b/docs/《ES6 教程》笔记/03.变量的解构赋值.md
@@ -3,10 +3,10 @@ title: 变量的解构赋值
date: 2020-02-09 16:00:29
permalink: /pages/b1ab10a62f7564da
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 变量的解构赋值
diff --git a/docs/《ES6 教程》笔记/04.字符串的扩展.md b/docs/《ES6 教程》笔记/04.字符串的扩展.md
index 0c2dbac..31f99b2 100644
--- a/docs/《ES6 教程》笔记/04.字符串的扩展.md
+++ b/docs/《ES6 教程》笔记/04.字符串的扩展.md
@@ -3,10 +3,10 @@ title: 字符串的扩展
date: 2020-02-09 16:00:29
permalink: /pages/ca89eca8adeba5f4
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 字符串的扩展
diff --git a/docs/《ES6 教程》笔记/05.字符串的新增方法.md b/docs/《ES6 教程》笔记/05.字符串的新增方法.md
index ae8ab20..c9d9ab0 100644
--- a/docs/《ES6 教程》笔记/05.字符串的新增方法.md
+++ b/docs/《ES6 教程》笔记/05.字符串的新增方法.md
@@ -3,10 +3,10 @@ title: 字符串的新增方法
date: 2020-02-09 16:00:29
permalink: /pages/a650b4a0ebfc9350
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 字符串的新增方法
@@ -338,4 +338,3 @@ s.trimEnd() // " abc"
## 实例方法:matchAll()
`matchAll()`方法返回一个正则表达式在当前字符串的所有匹配,详见《正则的扩展》的一章。
-
diff --git a/docs/《ES6 教程》笔记/06.正则的扩展.md b/docs/《ES6 教程》笔记/06.正则的扩展.md
index 43f85fd..9074251 100644
--- a/docs/《ES6 教程》笔记/06.正则的扩展.md
+++ b/docs/《ES6 教程》笔记/06.正则的扩展.md
@@ -3,10 +3,10 @@ title: 正则的扩展
date: 2020-02-09 16:00:29
permalink: /pages/0473261a6ab0ee8c
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 正则的扩展
diff --git a/docs/《ES6 教程》笔记/07.数值的扩展.md b/docs/《ES6 教程》笔记/07.数值的扩展.md
index 3316297..317d878 100644
--- a/docs/《ES6 教程》笔记/07.数值的扩展.md
+++ b/docs/《ES6 教程》笔记/07.数值的扩展.md
@@ -3,10 +3,10 @@ title: 数值的扩展
date: 2020-02-09 16:00:29
permalink: /pages/5dfea9a0f2d1a392
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 数值的扩展
@@ -967,4 +967,3 @@ BigInt 与字符串混合运算时,会先转为字符串,再进行运算。
```javascript
'' + 123n // "123"
```
-
diff --git a/docs/《ES6 教程》笔记/08.函数的扩展.md b/docs/《ES6 教程》笔记/08.函数的扩展.md
index f345c83..f8ee934 100644
--- a/docs/《ES6 教程》笔记/08.函数的扩展.md
+++ b/docs/《ES6 教程》笔记/08.函数的扩展.md
@@ -3,10 +3,10 @@ title: 函数的扩展
date: 2020-02-09 16:00:29
permalink: /pages/8ed309d668b20264
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 函数的扩展
@@ -1372,4 +1372,3 @@ try {
// ...
}
```
-
diff --git a/docs/《ES6 教程》笔记/09.数组的扩展.md b/docs/《ES6 教程》笔记/09.数组的扩展.md
index 2cba8e6..d652478 100644
--- a/docs/《ES6 教程》笔记/09.数组的扩展.md
+++ b/docs/《ES6 教程》笔记/09.数组的扩展.md
@@ -3,10 +3,10 @@ title: 数组的扩展
date: 2020-02-09 16:00:29
permalink: /pages/e34009d60d8bc4b2
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 数组的扩展
@@ -997,4 +997,3 @@ arr.sort(unstableSorting)
常见的排序算法之中,插入排序、合并排序、冒泡排序等都是稳定的,堆排序、快速排序等是不稳定的。不稳定排序的主要缺点是,多重排序时可能会产生问题。假设有一个姓和名的列表,要求按照“姓氏为主要关键字,名字为次要关键字”进行排序。开发者可能会先按名字排序,再按姓氏进行排序。如果排序算法是稳定的,这样就可以达到“先姓氏,后名字”的排序效果。如果是不稳定的,就不行。
早先的 ECMAScript 没有规定,`Array.prototype.sort()`的默认排序算法是否稳定,留给浏览器自己决定,这导致某些实现是不稳定的。[ES2019](https://github.com/tc39/ecma262/pull/1340) 明确规定,`Array.prototype.sort()`的默认排序算法必须稳定。这个规定已经做到了,现在 JavaScript 各个主要实现的默认排序算法都是稳定的。
-
diff --git a/docs/《ES6 教程》笔记/10.对象的扩展.md b/docs/《ES6 教程》笔记/10.对象的扩展.md
index 8c3b331..ea72e0d 100644
--- a/docs/《ES6 教程》笔记/10.对象的扩展.md
+++ b/docs/《ES6 教程》笔记/10.对象的扩展.md
@@ -3,10 +3,10 @@ title: 对象的扩展
date: 2020-02-09 16:00:29
permalink: /pages/b5e3e0a0ff6e9c25
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 对象的扩展
@@ -932,4 +932,3 @@ lhs || (middle ?? rhs);
(lhs ?? middle) || rhs;
lhs ?? (middle || rhs);
```
-
diff --git a/docs/《ES6 教程》笔记/11.对象的新增方法.md b/docs/《ES6 教程》笔记/11.对象的新增方法.md
index 0a48dba..cb69bee 100644
--- a/docs/《ES6 教程》笔记/11.对象的新增方法.md
+++ b/docs/《ES6 教程》笔记/11.对象的新增方法.md
@@ -3,10 +3,10 @@ title: 对象的新增方法
date: 2020-02-09 16:00:29
permalink: /pages/e85e68947502cf90
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 对象的新增方法
diff --git a/docs/《ES6 教程》笔记/12.Symbol.md b/docs/《ES6 教程》笔记/12.Symbol.md
index 9ce4c1a..239c9be 100644
--- a/docs/《ES6 教程》笔记/12.Symbol.md
+++ b/docs/《ES6 教程》笔记/12.Symbol.md
@@ -3,10 +3,10 @@ title: Symbol
date: 2020-02-09 16:00:29
permalink: /pages/02c86eb2792f3262
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Symbol
diff --git a/docs/《ES6 教程》笔记/13.Set 和 Map 数据结构.md b/docs/《ES6 教程》笔记/13.Set 和 Map 数据结构.md
index 8faa2a7..f444394 100644
--- a/docs/《ES6 教程》笔记/13.Set 和 Map 数据结构.md
+++ b/docs/《ES6 教程》笔记/13.Set 和 Map 数据结构.md
@@ -3,10 +3,10 @@ title: Set 和 Map 数据结构
date: 2020-02-09 16:00:29
permalink: /pages/0c21dae358fca16b
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Set 和 Map 数据结构
diff --git a/docs/《ES6 教程》笔记/14.Proxy.md b/docs/《ES6 教程》笔记/14.Proxy.md
index 7a1d56a..8d262a5 100644
--- a/docs/《ES6 教程》笔记/14.Proxy.md
+++ b/docs/《ES6 教程》笔记/14.Proxy.md
@@ -3,10 +3,10 @@ title: Proxy
date: 2020-02-09 16:00:29
permalink: /pages/f56ec2ab97d60483
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Proxy
diff --git a/docs/《ES6 教程》笔记/15.Reflect.md b/docs/《ES6 教程》笔记/15.Reflect.md
index 04c39c3..49f3999 100644
--- a/docs/《ES6 教程》笔记/15.Reflect.md
+++ b/docs/《ES6 教程》笔记/15.Reflect.md
@@ -3,10 +3,10 @@ title: Reflect
date: 2020-02-09 16:00:29
permalink: /pages/74de3e45e4491e95
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Reflect
diff --git a/docs/《ES6 教程》笔记/16.Promise 对象.md b/docs/《ES6 教程》笔记/16.Promise 对象.md
index 5e36cf6..f7e9a2e 100644
--- a/docs/《ES6 教程》笔记/16.Promise 对象.md
+++ b/docs/《ES6 教程》笔记/16.Promise 对象.md
@@ -3,10 +3,10 @@ title: Promise 对象
date: 2020-02-09 16:00:29
permalink: /pages/2810ae8985e9bd52
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Promise 对象
diff --git a/docs/《ES6 教程》笔记/17.Iterator 和 for-of 循环.md b/docs/《ES6 教程》笔记/17.Iterator 和 for-of 循环.md
index 25f44e7..3e40cc7 100644
--- a/docs/《ES6 教程》笔记/17.Iterator 和 for-of 循环.md
+++ b/docs/《ES6 教程》笔记/17.Iterator 和 for-of 循环.md
@@ -3,10 +3,10 @@ title: Iterator 和 for-of 循环
date: 2020-02-09 16:00:29
permalink: /pages/48df907ad3570f3d
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Iterator 和 for...of 循环
diff --git a/docs/《ES6 教程》笔记/18.Generator 函数的语法.md b/docs/《ES6 教程》笔记/18.Generator 函数的语法.md
index 46641c9..381d735 100644
--- a/docs/《ES6 教程》笔记/18.Generator 函数的语法.md
+++ b/docs/《ES6 教程》笔记/18.Generator 函数的语法.md
@@ -3,10 +3,10 @@ title: Generator 函数的语法
date: 2020-02-09 16:00:29
permalink: /pages/718b48ed9ce0adce
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Generator 函数的语法
diff --git a/docs/《ES6 教程》笔记/19.Generator 函数的异步应用.md b/docs/《ES6 教程》笔记/19.Generator 函数的异步应用.md
index 6999fd6..814c8df 100644
--- a/docs/《ES6 教程》笔记/19.Generator 函数的异步应用.md
+++ b/docs/《ES6 教程》笔记/19.Generator 函数的异步应用.md
@@ -3,10 +3,10 @@ title: Generator 函数的异步应用
date: 2020-02-09 16:00:29
permalink: /pages/75af7031eb66847b
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Generator 函数的异步应用
diff --git a/docs/《ES6 教程》笔记/20.async 函数.md b/docs/《ES6 教程》笔记/20.async 函数.md
index 939de2f..b04fef2 100644
--- a/docs/《ES6 教程》笔记/20.async 函数.md
+++ b/docs/《ES6 教程》笔记/20.async 函数.md
@@ -3,10 +3,10 @@ title: async 函数
date: 2020-02-09 16:00:29
permalink: /pages/3777253e65bac487
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# async 函数
@@ -867,4 +867,3 @@ console.log("Z");
上面代码有三个模块,最后的`z.js`加载`x.js`和`y.js`,打印结果是`X1`、`Y`、`X2`、`Z`。这说明,`z.js`并没有等待`x.js`加载完成,再去加载`y.js`。
顶层的`await`命令有点像,交出代码的执行权给其他的模块加载,等异步操作完成后,再拿回执行权,继续向下执行。
-
diff --git a/docs/《ES6 教程》笔记/21.Class 的基本语法.md b/docs/《ES6 教程》笔记/21.Class 的基本语法.md
index 562b19e..a823148 100644
--- a/docs/《ES6 教程》笔记/21.Class 的基本语法.md
+++ b/docs/《ES6 教程》笔记/21.Class 的基本语法.md
@@ -3,10 +3,10 @@ title: Class 的基本语法
date: 2020-02-09 16:00:29
permalink: /pages/e831e1593c82bbe0
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Class 的基本语法
diff --git a/docs/《ES6 教程》笔记/22.Class 的继承.md b/docs/《ES6 教程》笔记/22.Class 的继承.md
index 5f1c7e9..4284cf5 100644
--- a/docs/《ES6 教程》笔记/22.Class 的继承.md
+++ b/docs/《ES6 教程》笔记/22.Class 的继承.md
@@ -3,10 +3,10 @@ title: Class 的继承
date: 2020-02-09 16:00:29
permalink: /pages/83f8c3a0cd87dd83
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Class 的继承
@@ -274,7 +274,7 @@ b.m() // 2
```javascript
class A {
constructor() {
- this.x = 1;
+ this.x = 1;
}
}
diff --git a/docs/《ES6 教程》笔记/23.Module 的语法.md b/docs/《ES6 教程》笔记/23.Module 的语法.md
index 5f05a13..095b69a 100644
--- a/docs/《ES6 教程》笔记/23.Module 的语法.md
+++ b/docs/《ES6 教程》笔记/23.Module 的语法.md
@@ -3,10 +3,10 @@ title: Module 的语法
date: 2020-02-09 16:00:29
permalink: /pages/efe2fb04eb8ac5fb
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Module 的语法
@@ -810,4 +810,3 @@ async function main() {
}
main();
```
-
diff --git a/docs/《ES6 教程》笔记/24.Module 的加载实现.md b/docs/《ES6 教程》笔记/24.Module 的加载实现.md
index f462366..26cccb7 100644
--- a/docs/《ES6 教程》笔记/24.Module 的加载实现.md
+++ b/docs/《ES6 教程》笔记/24.Module 的加载实现.md
@@ -3,10 +3,10 @@ title: Module 的加载实现
date: 2020-02-09 16:00:29
permalink: /pages/a79ca2e64ceae213
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Module 的加载实现
@@ -840,4 +840,3 @@ $ node
> m.even(10)
TypeError: even is not a function
```
-
diff --git a/docs/《ES6 教程》笔记/25.编程风格.md b/docs/《ES6 教程》笔记/25.编程风格.md
index 04296b3..5d72364 100644
--- a/docs/《ES6 教程》笔记/25.编程风格.md
+++ b/docs/《ES6 教程》笔记/25.编程风格.md
@@ -3,10 +3,10 @@ title: 编程风格
date: 2020-02-09 16:00:29
permalink: /pages/984bf549204bb266
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 编程风格
diff --git a/docs/《ES6 教程》笔记/26.读懂 ECMAScript 规格.md b/docs/《ES6 教程》笔记/26.读懂 ECMAScript 规格.md
index 896bd26..145bfa4 100644
--- a/docs/《ES6 教程》笔记/26.读懂 ECMAScript 规格.md
+++ b/docs/《ES6 教程》笔记/26.读懂 ECMAScript 规格.md
@@ -3,10 +3,10 @@ title: 读懂 ECMAScript 规格
date: 2020-02-09 16:00:29
permalink: /pages/32c35f7651d6e58e
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 读懂 ECMAScript 规格
diff --git a/docs/《ES6 教程》笔记/27.异步遍历器.md b/docs/《ES6 教程》笔记/27.异步遍历器.md
index d26d90b..bf649d8 100644
--- a/docs/《ES6 教程》笔记/27.异步遍历器.md
+++ b/docs/《ES6 教程》笔记/27.异步遍历器.md
@@ -3,10 +3,10 @@ title: 异步遍历器
date: 2020-02-09 16:00:29
permalink: /pages/16121351be68691b
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 异步遍历器
@@ -482,4 +482,3 @@ async function* gen2() {
// a
// b
```
-
diff --git a/docs/《ES6 教程》笔记/28.ArrayBuffer.md b/docs/《ES6 教程》笔记/28.ArrayBuffer.md
index bf50a1a..27548d0 100644
--- a/docs/《ES6 教程》笔记/28.ArrayBuffer.md
+++ b/docs/《ES6 教程》笔记/28.ArrayBuffer.md
@@ -3,10 +3,10 @@ title: ArrayBuffer
date: 2020-02-09 16:00:29
permalink: /pages/a2ba314746bfdbdd
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# ArrayBuffer
diff --git a/docs/《ES6 教程》笔记/29.最新提案.md b/docs/《ES6 教程》笔记/29.最新提案.md
index ce71e9a..92fd06a 100644
--- a/docs/《ES6 教程》笔记/29.最新提案.md
+++ b/docs/《ES6 教程》笔记/29.最新提案.md
@@ -3,10 +3,10 @@ title: 最新提案
date: 2020-02-09 16:00:30
permalink: /pages/7188882b8d65af1b
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 最新提案
@@ -641,4 +641,3 @@ new URL('data.txt', import.meta.url)
import.meta.scriptElement.dataset.foo
// "abc"
```
-
diff --git a/docs/《ES6 教程》笔记/30.装饰器.md b/docs/《ES6 教程》笔记/30.装饰器.md
index 891f63c..4a4d278 100644
--- a/docs/《ES6 教程》笔记/30.装饰器.md
+++ b/docs/《ES6 教程》笔记/30.装饰器.md
@@ -3,10 +3,10 @@ title: 装饰器
date: 2020-02-09 16:00:30
permalink: /pages/e97bc1e5626b082c
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 装饰器
@@ -811,4 +811,3 @@ class MyClass {}
@traits(TExample::as({excludes:['foo', 'bar'], alias: {baz: 'exampleBaz'}}))
class MyClass {}
```
-
diff --git a/docs/《ES6 教程》笔记/31.函数式编程.md b/docs/《ES6 教程》笔记/31.函数式编程.md
index e2ece18..02ae29f 100644
--- a/docs/《ES6 教程》笔记/31.函数式编程.md
+++ b/docs/《ES6 教程》笔记/31.函数式编程.md
@@ -3,10 +3,10 @@ title: 函数式编程
date: 2020-02-09 16:00:30
permalink: /pages/1cf50330655efc69
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 函数式编程
diff --git a/docs/《ES6 教程》笔记/32.Mixin.md b/docs/《ES6 教程》笔记/32.Mixin.md
index 67e7e54..2043c1f 100644
--- a/docs/《ES6 教程》笔记/32.Mixin.md
+++ b/docs/《ES6 教程》笔记/32.Mixin.md
@@ -3,10 +3,10 @@ title: Mixin
date: 2020-02-09 16:00:30
permalink: /pages/6a8e2dc558da1b39
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# Mixin
diff --git a/docs/《ES6 教程》笔记/33.SIMD.md b/docs/《ES6 教程》笔记/33.SIMD.md
index 864b79a..2b633f6 100644
--- a/docs/《ES6 教程》笔记/33.SIMD.md
+++ b/docs/《ES6 教程》笔记/33.SIMD.md
@@ -3,10 +3,10 @@ title: SIMD
date: 2020-02-09 16:00:30
permalink: /pages/8e8f80f69b775a56
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# SIMD
diff --git a/docs/《ES6 教程》笔记/34.参考链接.md b/docs/《ES6 教程》笔记/34.参考链接.md
index 37c6782..3a965e2 100644
--- a/docs/《ES6 教程》笔记/34.参考链接.md
+++ b/docs/《ES6 教程》笔记/34.参考链接.md
@@ -3,10 +3,10 @@ title: 参考链接
date: 2020-02-09 16:00:30
permalink: /pages/ea6f3b870f6dab69
author: 阮一峰
-categories:
+categories:
- 《ES6 教程》笔记
-tags:
- -
+tags:
+ - ES6
---
# 参考链接
diff --git a/docs/《Git》学习笔记/10.手册/00.常用Git命令清单.md b/docs/《Git》学习笔记/10.手册/00.常用Git命令清单.md
index bb4cead..74b57f8 100644
--- a/docs/《Git》学习笔记/10.手册/00.常用Git命令清单.md
+++ b/docs/《Git》学习笔记/10.手册/00.常用Git命令清单.md
@@ -5,7 +5,7 @@ permalink: /pages/8292d8/
categories:
- 《Git》学习笔记
tags:
- -
+ - Git
---
# 常用Git命令清单
diff --git a/docs/《Git》学习笔记/10.手册/03.Git变基合并.md b/docs/《Git》学习笔记/10.手册/03.Git变基合并.md
index f07bc77..fd8d2d5 100644
--- a/docs/《Git》学习笔记/10.手册/03.Git变基合并.md
+++ b/docs/《Git》学习笔记/10.手册/03.Git变基合并.md
@@ -5,7 +5,7 @@ permalink: /pages/c10281/
categories:
- 《Git》学习笔记
tags:
- -
+ - Git
---
# rebase分支合并
diff --git a/docs/《Git》学习笔记/10.手册/06.Git命令思维导图.md b/docs/《Git》学习笔记/10.手册/06.Git命令思维导图.md
index 8092db4..2987b83 100644
--- a/docs/《Git》学习笔记/10.手册/06.Git命令思维导图.md
+++ b/docs/《Git》学习笔记/10.手册/06.Git命令思维导图.md
@@ -2,9 +2,9 @@
title: Git命令思维导图
date: 2020-11-18 17:46:22
permalink: /pages/4cbc21/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
-
\ No newline at end of file
+
diff --git a/docs/《Git》学习笔记/20.文档笔记/10.Git基础与命令.md b/docs/《Git》学习笔记/20.文档笔记/10.Git基础与命令.md
index 995461b..b4d32fa 100644
--- a/docs/《Git》学习笔记/20.文档笔记/10.Git基础与命令.md
+++ b/docs/《Git》学习笔记/20.文档笔记/10.Git基础与命令.md
@@ -2,10 +2,10 @@
title: Git基础与命令
date: 2020-11-18 17:43:57
permalink: /pages/635088/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git基础与命令
@@ -45,7 +45,7 @@ git help
# 获取特定命令的详细版帮助手册 (两个命令是等价的)
git help <某个命令>
git <某个命令> --help # 两个横杠
-
+
# 获取特定命令的简明版帮助手册
git <某个命令> -h # 一个横杠
```
@@ -528,6 +528,3 @@ Date: Tue Aug 26 19:48:51 2008 +0800
```sh
$ git config --global alias.visual '!gitk'
```
-
-
-
diff --git a/docs/《Git》学习笔记/20.文档笔记/100.Git工具-重写历史.md b/docs/《Git》学习笔记/20.文档笔记/100.Git工具-重写历史.md
index 8d4ab14..9e3f349 100644
--- a/docs/《Git》学习笔记/20.文档笔记/100.Git工具-重写历史.md
+++ b/docs/《Git》学习笔记/20.文档笔记/100.Git工具-重写历史.md
@@ -2,10 +2,10 @@
title: Git工具-重写历史
date: 2020-11-18 17:43:57
permalink: /pages/1832fe/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git 工具 - 重写历史
@@ -293,4 +293,4 @@ $ git filter-branch --commit-filter '
fi' HEAD
```
-这会遍历并重写每一个提交来包含你的新邮箱地址。 因为提交包含了它们父提交的 SHA-1 校验和,这个命令会修改你的历史中的每一个提交的 SHA-1 校验和, 而不仅仅只是那些匹配邮箱地址的提交。
\ No newline at end of file
+这会遍历并重写每一个提交来包含你的新邮箱地址。 因为提交包含了它们父提交的 SHA-1 校验和,这个命令会修改你的历史中的每一个提交的 SHA-1 校验和, 而不仅仅只是那些匹配邮箱地址的提交。
diff --git a/docs/《Git》学习笔记/20.文档笔记/110.Git工具-重置揭密.md b/docs/《Git》学习笔记/20.文档笔记/110.Git工具-重置揭密.md
index d265c88..6fe83d6 100644
--- a/docs/《Git》学习笔记/20.文档笔记/110.Git工具-重置揭密.md
+++ b/docs/《Git》学习笔记/20.文档笔记/110.Git工具-重置揭密.md
@@ -2,10 +2,10 @@
title: Git工具-重置揭密
date: 2020-11-18 17:43:57
permalink: /pages/d9e9c6/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git 工具 - 重置揭密
@@ -251,4 +251,4 @@ $ tree
| `checkout ` | HEAD | YES | YES | YES |
| **File Level** | | | | |
| `reset [commit] ` | NO | YES | NO | YES |
-| `checkout [commit] ` | NO | YES | YES | **NO** |
\ No newline at end of file
+| `checkout [commit] ` | NO | YES | YES | **NO** |
diff --git a/docs/《Git》学习笔记/20.文档笔记/20.Git分支-分支原理.md b/docs/《Git》学习笔记/20.文档笔记/20.Git分支-分支原理.md
index 61a9fba..cc6449b 100644
--- a/docs/《Git》学习笔记/20.文档笔记/20.Git分支-分支原理.md
+++ b/docs/《Git》学习笔记/20.文档笔记/20.Git分支-分支原理.md
@@ -2,10 +2,10 @@
title: Git分支-分支原理
date: 2020-11-18 17:43:57
permalink: /pages/4bef1a/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git分支-分支原理
@@ -176,5 +176,5 @@ $ git log --oneline --decorate --graph --all
通常我们会在创建一个新分支后立即切换过去,可以使用如下命令:
```sh
-git checkout -b
+git checkout -b
```
diff --git a/docs/《Git》学习笔记/20.文档笔记/30.Git分支的新建与合并-分支操作.md b/docs/《Git》学习笔记/20.文档笔记/30.Git分支的新建与合并-分支操作.md
index a0f78ab..e42b620 100644
--- a/docs/《Git》学习笔记/20.文档笔记/30.Git分支的新建与合并-分支操作.md
+++ b/docs/《Git》学习笔记/20.文档笔记/30.Git分支的新建与合并-分支操作.md
@@ -2,10 +2,10 @@
title: Git分支的新建与合并-分支操作
date: 2020-11-18 17:43:57
permalink: /pages/ea5a8c/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git分支的新建与合并-分支操作
@@ -52,7 +52,7 @@ $ git checkout master
$ git checkout -b hotfix
# 中间过程在hotfix上修改了代码并提交
-$ echo 'test' > ./hotfix.txt
+$ echo 'test' > ./hotfix.txt
$ git add .
$ git commit -m 'fixed'
```
@@ -128,4 +128,3 @@ Automatic merge failed; fix conflicts and then commit the result.
你需要**手动解决冲突**,解决了所有文件里的冲突之后,对每个文件**使用 `git add` 命令**来将其标记为冲突已解决。 **一旦暂存这些原本有冲突的文件,Git 就会将它们标记为冲突已解决**。
如果你对结果感到满意,并且确定之前有冲突的的文件都已经暂存了,这时你可以输入 `git commit` 来完成合并提交。
-
diff --git a/docs/《Git》学习笔记/20.文档笔记/40.Git分支管理-查看分支.md b/docs/《Git》学习笔记/20.文档笔记/40.Git分支管理-查看分支.md
index c0b526e..29021de 100644
--- a/docs/《Git》学习笔记/20.文档笔记/40.Git分支管理-查看分支.md
+++ b/docs/《Git》学习笔记/20.文档笔记/40.Git分支管理-查看分支.md
@@ -2,10 +2,10 @@
title: Git分支管理-查看分支
date: 2020-11-18 17:43:57
permalink: /pages/a399b3/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git分支管理-查看分支
@@ -58,7 +58,7 @@ error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.
```
-强制删除未合并的分支:
+强制删除未合并的分支:
```sh
$ git branch -D testing
@@ -78,4 +78,4 @@ $ git branch -D testing
$ git branch --no-merged testing
topicA
featureB
-```
\ No newline at end of file
+```
diff --git a/docs/《Git》学习笔记/20.文档笔记/50.Git分支开发工作流.md b/docs/《Git》学习笔记/20.文档笔记/50.Git分支开发工作流.md
index 64c44c2..91de1bd 100644
--- a/docs/《Git》学习笔记/20.文档笔记/50.Git分支开发工作流.md
+++ b/docs/《Git》学习笔记/20.文档笔记/50.Git分支开发工作流.md
@@ -2,10 +2,10 @@
title: Git分支开发工作流
date: 2020-11-18 17:43:57
permalink: /pages/49ee30/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git分支开发工作流
@@ -33,7 +33,7 @@ tags:
### 主题分支 (短期分支)
-**主题分支对任何规模的项目都适用**。 主题分支是一种**短期分支**,它被**用来实现单一特性或其相关工作**。
+**主题分支对任何规模的项目都适用**。 主题分支是一种**短期分支**,它被**用来实现单一特性或其相关工作**。
你已经在上一节中你创建的 `iss53` 和 `hotfix` 主题分支中看到过这种用法。 你在上一节用到的主题分支(`iss53` 和 `hotfix` 分支)中提交了一些更新,并且在它们合并入主干分支之后,你又删除了它们。 这项技术能使你快速并且完整地进行上下文切换(context-switch)——因为你的工作被分散到不同的流水线中,在不同的流水线中**每个分支都仅与其目标特性相关**,因此,**在做代码审查之类的工作的时候就能更加容易地看出你做了哪些改动**。 你可以把做出的改动在主题分支中保留几分钟、几天甚至几个月,等它们成熟之后再合并,而不用在乎它们建立的顺序或工作进度。
@@ -53,4 +53,4 @@ tags:
我们将会在 [分布式 Git](https://git-scm.com/book/zh/v2/ch00/ch05-distributed-git) 中向你揭示更多有关分支工作流的细节, 因此,请确保你阅读完那个章节之后,再来决定你的下个项目要使用什么样的分支策略(branching scheme)。
-请牢记,当你做这么多操作的时候,这些分支全部都存于本地。 当你新建和合并分支的时候,所有这一切都只发生在你本地的 Git 版本库中 —— 没有与服务器发生交互。
\ No newline at end of file
+请牢记,当你做这么多操作的时候,这些分支全部都存于本地。 当你新建和合并分支的时候,所有这一切都只发生在你本地的 Git 版本库中 —— 没有与服务器发生交互。
diff --git a/docs/《Git》学习笔记/20.文档笔记/60.Git分支-远程分支.md b/docs/《Git》学习笔记/20.文档笔记/60.Git分支-远程分支.md
index c49c4e5..a691911 100644
--- a/docs/《Git》学习笔记/20.文档笔记/60.Git分支-远程分支.md
+++ b/docs/《Git》学习笔记/20.文档笔记/60.Git分支-远程分支.md
@@ -2,14 +2,14 @@
title: Git分支-远程分支
date: 2020-11-18 17:43:57
permalink: /pages/574d62/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git分支-远程分支
-**远程引用是对远程仓库的引用(指针)**,包括分支、标签等等。
+**远程引用是对远程仓库的引用(指针)**,包括分支、标签等等。
> 远程分支本质上也是一个指针,指向远程地址
@@ -83,7 +83,7 @@ To https://github.com/schacon/simplegit
* [new branch] serverfix -> serverfix
```
-这里有些工作被简化了。 **Git 自动将 `serverfix` 分支名字展开为 `refs/heads/serverfix:refs/heads/serverfix`,** 那意味着,“推送本地的 `serverfix` 分支来更新远程仓库上的 `serverfix` 分支。” 我们将会详细学习 [Git 内部原理](https://git-scm.com/book/zh/v2/ch00/ch10-git-internals) 的 `refs/heads/` 部分, 但是现在可以先把它放在儿。你也可以运行 `git push origin serverfix:serverfix`, 它会做同样的事——也就是说“**推送本地的 `serverfix` 分支,将其作为远程仓库的 `serverfix` 分支**” 可以通过这种格式来推送本地分支到一个命名不相同的远程分支。
+这里有些工作被简化了。 **Git 自动将 `serverfix` 分支名字展开为 `refs/heads/serverfix:refs/heads/serverfix`,** 那意味着,“推送本地的 `serverfix` 分支来更新远程仓库上的 `serverfix` 分支。” 我们将会详细学习 [Git 内部原理](https://git-scm.com/book/zh/v2/ch00/ch10-git-internals) 的 `refs/heads/` 部分, 但是现在可以先把它放在儿。你也可以运行 `git push origin serverfix:serverfix`, 它会做同样的事——也就是说“**推送本地的 `serverfix` 分支,将其作为远程仓库的 `serverfix` 分支**” 可以通过这种格式来推送本地分支到一个命名不相同的远程分支。
#### 重命名远程仓库上的分支名
@@ -196,4 +196,4 @@ To https://github.com/schacon/simplegit
- [deleted] serverfix
```
-基本上这个命令做的只是从服务器上移除这个指针。 Git 服务器通常会保留数据一段时间直到垃圾回收运行,所以如果不小心删除掉了,通常是很容易恢复的。
\ No newline at end of file
+基本上这个命令做的只是从服务器上移除这个指针。 Git 服务器通常会保留数据一段时间直到垃圾回收运行,所以如果不小心删除掉了,通常是很容易恢复的。
diff --git a/docs/《Git》学习笔记/20.文档笔记/70.Git分支-变基.md b/docs/《Git》学习笔记/20.文档笔记/70.Git分支-变基.md
index 4326f8e..8a7e7b7 100644
--- a/docs/《Git》学习笔记/20.文档笔记/70.Git分支-变基.md
+++ b/docs/《Git》学习笔记/20.文档笔记/70.Git分支-变基.md
@@ -2,10 +2,10 @@
title: Git分支-变基
date: 2020-11-18 17:43:57
permalink: /pages/3a3247/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git分支-变基
@@ -276,4 +276,4 @@ $ git branch -d server
现在,让我们回到之前的问题上来,到底合并还是变基好?希望你能明白,这并没有一个简单的答案。 Git 是一个非常强大的工具,它允许你对提交历史做许多事情,但每个团队、每个项目对此的需求并不相同。 既然你已经分别学习了两者的用法,相信你能够根据实际情况作出明智的选择。
-**总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。**
\ No newline at end of file
+**总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。**
diff --git a/docs/《Git》学习笔记/20.文档笔记/80.Git工具-查看修订版本.md b/docs/《Git》学习笔记/20.文档笔记/80.Git工具-查看修订版本.md
index 6eea424..efbef22 100644
--- a/docs/《Git》学习笔记/20.文档笔记/80.Git工具-查看修订版本.md
+++ b/docs/《Git》学习笔记/20.文档笔记/80.Git工具-查看修订版本.md
@@ -2,10 +2,10 @@
title: Git工具-查看修订版本
date: 2020-11-18 17:43:57
permalink: /pages/c984d1/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git工具-查看修订版本
@@ -309,4 +309,4 @@ $ git log --left-right master...experiment
> C
```
-有了这些工具,你就可以十分方便地查看你 Git 仓库中的提交。
\ No newline at end of file
+有了这些工具,你就可以十分方便地查看你 Git 仓库中的提交。
diff --git a/docs/《Git》学习笔记/20.文档笔记/90.Git工具-交互式暂存.md b/docs/《Git》学习笔记/20.文档笔记/90.Git工具-交互式暂存.md
index d778637..efda7a3 100644
--- a/docs/《Git》学习笔记/20.文档笔记/90.Git工具-交互式暂存.md
+++ b/docs/《Git》学习笔记/20.文档笔记/90.Git工具-交互式暂存.md
@@ -2,10 +2,10 @@
title: Git工具-交互式暂存
date: 2020-11-18 17:43:57
permalink: /pages/76d859/
-categories:
+categories:
- 《Git》学习笔记
-tags:
- -
+tags:
+ - Git
---
# Git工具-交互式暂存
@@ -181,4 +181,4 @@ What now> 1
也可以不必在交互式添加模式中做部分文件暂存——可以在命令行中使用 `git add -p` 或 `git add --patch` 来启动同样的脚本。
-更进一步地,可以使用 `git reset --patch` 命令的补丁模式来部分重置文件, 通过 `git checkout --patch` 命令来部分检出文件与 `git stash save --patch` 命令来部分暂存文件。 我们将会在接触这些命令的高级使用方法时了解更多详细信息。
\ No newline at end of file
+更进一步地,可以使用 `git reset --patch` 命令的补丁模式来部分重置文件, 通过 `git checkout --patch` 命令来部分检出文件与 `git stash save --patch` 命令来部分暂存文件。 我们将会在接触这些命令的高级使用方法时了解更多详细信息。
diff --git a/docs/《JavaScript教程》笔记/01.基础.md b/docs/《JavaScript教程》笔记/01.基础.md
index 9f71f1b..6d7c9e7 100644
--- a/docs/《JavaScript教程》笔记/01.基础.md
+++ b/docs/《JavaScript教程》笔记/01.基础.md
@@ -2,11 +2,11 @@
title: 基础
date: 2020-01-12 11:49:16
permalink: /pages/0796ba76b4b55368
-categories:
+categories:
- 《JavaScript教程》笔记
-tags:
- - null
-author:
+tags:
+ - JavaScript
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -36,7 +36,7 @@ author:
* 可以读取函数内部变量
* 让这些变量始终保持在内存中,即闭包可以使得它诞生的环境一直存在。
-* 封装对象的私有属性和私有方法
+* 封装对象的私有属性和私有方法
@@ -90,7 +90,7 @@ prototype原型对象都有一个constructor属性,默认指向prototype对象
### 1、强制(手动)转换
- 强制转换主要指使用`Number()`、`String()`和`Boolean()`三个函数,手动将各种类型的值,分别转换成**数字、字符串、布尔值**。
+ 强制转换主要指使用`Number()`、`String()`和`Boolean()`三个函数,手动将各种类型的值,分别转换成**数字、字符串、布尔值**。
#### Number()
@@ -174,7 +174,7 @@ Boolean(' ') // true // 注意字符串内有个空格
123 + 'abc' // "123abc"
```
- 第二种情况,**对非布尔值类型的数据求布尔值**。
+ 第二种情况,**对非布尔值类型的数据求布尔值**。
```js
if ('abc') {
@@ -182,7 +182,7 @@ if ('abc') {
} // "hello"
```
- 第三种情况,**对非数值类型的值使用一元运算符(即`+`和`-`)**。
+ 第三种情况,**对非数值类型的值使用一元运算符(即`+`和`-`)**。
```js
+ {foo: 'bar'} // NaN
@@ -254,7 +254,7 @@ JavaScript 遇到预期为字符串的地方,就会将非字符串的值自动
'5' + null // "5null"
```
-#####
+#####
这种自动转换不注意的话很容易出错。
@@ -347,7 +347,7 @@ if (err.name) {
}
```
- `stack`属性用来查看错误发生时的堆栈。
+ `stack`属性用来查看错误发生时的堆栈。
```js
function throwit() {
@@ -371,20 +371,20 @@ catchit()
// 堆栈信息说明
// Error 错误
-// at throwit 在throwit方法 (~/examples/throwcatch.js:9:11) 文件名:第几行:第几个字符
+// at throwit 在throwit方法 (~/examples/throwcatch.js:9:11) 文件名:第几行:第几个字符
// at catchit 在catchit方法 (~/examples/throwcatch.js:3:9) 文件名:第几行:第几个字符
// at repl:1:5 // 函数的运行环境
```
- 上面代码中,错误堆栈的最内层是`throwit`函数,然后是`catchit`函数,最后是函数的运行环境。
+ 上面代码中,错误堆栈的最内层是`throwit`函数,然后是`catchit`函数,最后是函数的运行环境。
### 2、原生错误类型
- `Error`实例对象是最一般的错误类型,在它的基础上,JavaScript 还定义了其他6种错误对象。也就是说,存在`Error`的6个派生对象。
+ `Error`实例对象是最一般的错误类型,在它的基础上,JavaScript 还定义了其他6种错误对象。也就是说,存在`Error`的6个派生对象。
#### SyntaxError 对象(语法错误)
- `SyntaxError`对象是解析代码时发生的**语法错误**。
+ `SyntaxError`对象是解析代码时发生的**语法错误**。
```js
// 变量名错误
@@ -404,7 +404,7 @@ console.log 'hello');
#### ReferenceError 对象(引用错误)
- `ReferenceError`对象是**引用一个不存在的变量时发生的错误**。
+ `ReferenceError`对象是**引用一个不存在的变量时发生的错误**。
```js
// 使用一个不存在的变量
@@ -433,7 +433,7 @@ this = 1
#### RangeError 对象(范围错误)
- `RangeError`对象是一个值**超出有效范围时发生的错误**。主要有几种情况,一是数组长度为负数,二是`Number`对象的方法参数超出范围,以及函数堆栈超过最大值。
+ `RangeError`对象是一个值**超出有效范围时发生的错误**。主要有几种情况,一是数组长度为负数,二是`Number`对象的方法参数超出范围,以及函数堆栈超过最大值。
```js
// 数组长度不得为负数
@@ -446,7 +446,7 @@ new Array(-1)
#### TypeError 对象(类型错误)
- `TypeError`对象是**变量或参数不是预期类型时发生的错误**。比如,对字符串、布尔值、数值等原始类型的值使用`new`命令,就会抛出这种错误,因为`new`命令的参数应该是一个构造函数。
+ `TypeError`对象是**变量或参数不是预期类型时发生的错误**。比如,对字符串、布尔值、数值等原始类型的值使用`new`命令,就会抛出这种错误,因为`new`命令的参数应该是一个构造函数。
```js
new 123
@@ -498,7 +498,7 @@ err3.message // "出错了,变量类型无效!"
### 3、自定义错误
- 除了 JavaScript 原生提供的七种错误对象,还可以定义自己的错误对象。
+ 除了 JavaScript 原生提供的七种错误对象,还可以定义自己的错误对象。
```js
function UserError(message) {
@@ -519,7 +519,7 @@ new UserError('这是自定义的错误!');
### 4、throw 语句 (中断程序并抛出错误)
- `throw`语句的作用是**手动中断程序执行,抛出一个错误**。
+ `throw`语句的作用是**手动中断程序执行,抛出一个错误**。
```js
var x = 0;
@@ -529,7 +529,7 @@ if (x <= 0) {
// Uncaught Error: x 必须为正数
```
- 上面代码中,如果变量`x`小于等于`0`,就手动抛出一个错误,告诉用户`x`的值不正确,整个程序就会在这里中断执行。可以看到,`throw`抛出的错误就是它的参数,这里是一个`Error`实例。
+ 上面代码中,如果变量`x`小于等于`0`,就手动抛出一个错误,告诉用户`x`的值不正确,整个程序就会在这里中断执行。可以看到,`throw`抛出的错误就是它的参数,这里是一个`Error`实例。
```js
function UserError(message) {
@@ -541,7 +541,7 @@ throw new UserError('出错了!');
// Uncaught UserError {message: "出错了!", name: "UserError"}
```
- 上面代码中,`throw`抛出的是一个`UserError`实例。
+ 上面代码中,`throw`抛出的是一个`UserError`实例。
实际上,`throw`可以抛出任何类型的值。也就是说,它的参数可以是任何值。
@@ -567,11 +567,11 @@ throw {
// Uncaught {toString: ƒ}
```
- 对于 JavaScript 引擎来说,**遇到`throw`语句,程序就中止了**。引擎会接收到`throw`抛出的信息,可能是一个错误实例,也可能是其他类型的值。
+ 对于 JavaScript 引擎来说,**遇到`throw`语句,程序就中止了**。引擎会接收到`throw`抛出的信息,可能是一个错误实例,也可能是其他类型的值。
### 5、try...catch 结构(捕获错误,对错误进行处理,不中断)
- 一旦发生错误,程序就中止执行了。JavaScript 提供了`try...catch`结构,**允许对错误进行处理**,选择是否往下执行。
+ 一旦发生错误,程序就中止执行了。JavaScript 提供了`try...catch`结构,**允许对错误进行处理**,选择是否往下执行。
```js
try {
@@ -652,7 +652,7 @@ try {
### 6、finally 代码块(在try..catch最后,必执行的)
- `try...catch`结构允许在最后添加一个`finally`代码块,表示**不管是否出现错误,都必需在最后运行的语句**。
+ `try...catch`结构允许在最后添加一个`finally`代码块,表示**不管是否出现错误,都必需在最后运行的语句**。
```js
function cleansUp() {
@@ -667,7 +667,7 @@ function cleansUp() {
cleansUp()
// 完成清理工作
-// Uncaught Error: 出错了……
+// Uncaught Error: 出错了……
// at cleansUp (:3:11)
// at :10:1
@@ -675,7 +675,7 @@ cleansUp()
// 如果有catch语句则会执行catch内的代码块,而不会打印错误信息。且不会中断代码。
```
- 上面代码中,由于没有`catch`语句块,一旦发生错误,代码就会中断执行。中断执行之前,会先执行`finally`代码块,然后再向用户提示报错信息。
+ 上面代码中,由于没有`catch`语句块,一旦发生错误,代码就会中断执行。中断执行之前,会先执行`finally`代码块,然后再向用户提示报错信息。
```js
function idle(x) {
@@ -833,4 +833,4 @@ console.timeEnd('Array initialize');
## 文档
-学习文档:
\ No newline at end of file
+学习文档:
diff --git a/docs/《JavaScript教程》笔记/02.内置对象.md b/docs/《JavaScript教程》笔记/02.内置对象.md
index dd82df3..26fe714 100644
--- a/docs/《JavaScript教程》笔记/02.内置对象.md
+++ b/docs/《JavaScript教程》笔记/02.内置对象.md
@@ -2,11 +2,11 @@
title: 内置对象
date: 2020-01-12 11:49:16
permalink: /pages/74d2ab3fbfeaaa68
-categories:
+categories:
- 《JavaScript教程》笔记
-tags:
- - null
-author:
+tags:
+ - JavaScript
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -123,7 +123,7 @@ obj === fn // true
利用这一点,可以写一个**判断变量是否为对象**的函数。
-```
+```
function isObject(value){
return value === Object(value)
}
@@ -611,14 +611,14 @@ Object.getOwnPropertyNames(Object.prototype)
/*[
"constructor", // 构造函数
"__defineGetter__",
- "__defineSetter__",
+ "__defineSetter__",
"hasOwnProperty", // 检测属性名
- "__lookupGetter__",
- "__lookupSetter__",
- "isPrototypeOf",
- "propertyIsEnumerable",
+ "__lookupGetter__",
+ "__lookupSetter__",
+ "isPrototypeOf",
+ "propertyIsEnumerable",
"toString", // 返回类型字符串
- "valueOf",
+ "valueOf",
"__proto__", // 原型链
"toLocaleString"
]
@@ -1547,7 +1547,7 @@ var queue = []
queue.push('1')
queue.push('2')
queue.push('3')
-queue.shift()
+queue.shift()
queue // ['2','3']
```
@@ -2111,7 +2111,7 @@ arr.every(fn,obj) // true
// 最终结果 15
```
- 上面代码中,`reduce`方法求出数组所有成员的和。第一次执行,`a`是数组的第一个成员`1`,`b`是数组的第二个成员`2`。第二次执行,`a`为上一轮的返回值`3`,`b`为第三个成员`3`。第三次执行,`a`为上一轮的返回值`6`,`b`为第四个成员`4`。第四次执行,`a`为上一轮返回值`10`,`b`为第五个成员`5`。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值`15`。
+ 上面代码中,`reduce`方法求出数组所有成员的和。第一次执行,`a`是数组的第一个成员`1`,`b`是数组的第二个成员`2`。第二次执行,`a`为上一轮的返回值`3`,`b`为第三个成员`3`。第三次执行,`a`为上一轮的返回值`6`,`b`为第四个成员`4`。第四次执行,`a`为上一轮返回值`10`,`b`为第五个成员`5`。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值`15`。
```js
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
@@ -2131,7 +2131,7 @@ arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue]
- 如果要对累积变量指定初值,可以把它放在`reduce`方法和`reduceRight`方法的第二个参数。
+ 如果要对累积变量指定初值,可以把它放在`reduce`方法和`reduceRight`方法的第二个参数。
```js
[1, 2, 3, 4, 5].reduce(function (a, b) {
@@ -2210,12 +2210,12 @@ function groupBy(objectArray, property) {
var groupedPeople = groupBy(people, 'age');
// groupedPeople is:
-// {
+// {
// 20: [
-// { name: 'Max', age: 20 },
+// { name: 'Max', age: 20 },
// { name: 'Jane', age: 20 }
-// ],
-// 21: [{ name: 'Alice', age: 21 }]
+// ],
+// 21: [{ name: 'Alice', age: 21 }]
// }
```
@@ -2223,7 +2223,7 @@ var groupedPeople = groupBy(people, 'age');
### indexOf() 搜索成员第一个出现的位置,lastIndexOf() 搜索成员最后出现的位置
- `indexOf`方法返回**给定元素在数组中第一次出现的位置**,如果**没有则返回`-1`**。
+ `indexOf`方法返回**给定元素在数组中第一次出现的位置**,如果**没有则返回`-1`**。
@@ -2241,7 +2241,7 @@ a.indexOf(6) // -1 6在数组a中没有出现,返回-1
- `indexOf`方法还可以接受第二个参数,表示搜索的开始位置。
+ `indexOf`方法还可以接受第二个参数,表示搜索的开始位置。
```js
['a', 'b', 'c'].indexOf('a', 1) // -1 从1位置开始搜索a,没有搜索到
@@ -2259,12 +2259,12 @@ a.indexOf(6) // -1 6在数组a中没有出现,返回-1
arr.lastIndexOf(searchElement[, fromIndex = arr.length - 1])
```
- `lastIndexOf`方法返回**给定元素在数组中最后一次出现的位置**,如果没有则返回`-1`。
+ `lastIndexOf`方法返回**给定元素在数组中最后一次出现的位置**,如果没有则返回`-1`。
```js
var a = [2,3,4,2]
a.lastIndexOf(2) //3 2在数组a中最后一次出现的位置为3
-a.lastIndexOf(5) //-1
+a.lastIndexOf(5) //-1
```
@@ -2313,7 +2313,7 @@ users
对象是JavaScript语言中最主要的数据类型,三种原始类型的值——数字、字符串、布尔值 在一定条件下,也会自动转为对象,也就是原始类型的**包装对象**(wrapper)
- 所谓“包装对象”,**指的是与数字、字符串、布尔值分别相对应的`Number`、`String`、`Boolean`三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象**。
+ 所谓“包装对象”,**指的是与数字、字符串、布尔值分别相对应的`Number`、`String`、`Boolean`三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象**。
@@ -2337,7 +2337,7 @@ v3 === true // false
- `Number`、`String`和`Boolean`这三个原生对象,如果不作为构造函数调用(即调用时不加`new`),而是作为普通函数调用,常常用于将任意类型的值转为数值、字符串和布尔值。
+ `Number`、`String`和`Boolean`这三个原生对象,如果不作为构造函数调用(即调用时不加`new`),而是作为普通函数调用,常常用于将任意类型的值转为数值、字符串和布尔值。
```js
// 字符串转为数值
@@ -2352,19 +2352,19 @@ Boolean(123) // true
上面这种**数据类型的转换**,详见《数据类型转换》一节。
- 总结一下,这三个对象作为构造函数使用(带有`new`)时,可以将原始类型的值转为对象;作为普通函数使用时(不带有`new`),可以将任意类型的值,转为原始类型的值。
+ 总结一下,这三个对象作为构造函数使用(带有`new`)时,可以将原始类型的值转为对象;作为普通函数使用时(不带有`new`),可以将任意类型的值,转为原始类型的值。
## 2、实例方法
- 三种包装对象各自提供了许多实例方法,详见后文。这里介绍两种它们共同具有、从`Object`对象**继承的方法**:`valueOf()`和`toString()`。
+ 三种包装对象各自提供了许多实例方法,详见后文。这里介绍两种它们共同具有、从`Object`对象**继承的方法**:`valueOf()`和`toString()`。
### 2.1 valueOf()
- `valueOf()`方法返回包装对象实例对应的原始类型的值。
+ `valueOf()`方法返回包装对象实例对应的原始类型的值。
```js
new Number(123).valueOf() // 123
@@ -2410,9 +2410,9 @@ var strObj = new String(str)
strObj.length // 3
```
- 上面代码中,字符串`abc`的包装对象提供了多个属性,`length`只是其中之一。
+ 上面代码中,字符串`abc`的包装对象提供了多个属性,`length`只是其中之一。
- 自动转换生成的包装对象是只读的,无法修改。所以,字符串无法添加新属性。
+ 自动转换生成的包装对象是只读的,无法修改。所以,字符串无法添加新属性。
```js
var s = 'Hello World';
@@ -2420,9 +2420,9 @@ s.x = 123;
s.x // undefined
```
- 上面代码为字符串`s`添加了一个`x`属性,结果无效,总是返回`undefined`。
+ 上面代码为字符串`s`添加了一个`x`属性,结果无效,总是返回`undefined`。
- 另一方面,调用结束后,包装对象实例会自动销毁。这意味着,下一次调用字符串的属性时,实际是调用一个新生成的对象,而不是上一次调用时生成的那个对象,所以取不到赋值在上一个对象的属性。如果要为字符串添加属性,只有在它的原型对象`String.prototype`上定义(参见《面向对象编程》章节)。
+ 另一方面,调用结束后,包装对象实例会自动销毁。这意味着,下一次调用字符串的属性时,实际是调用一个新生成的对象,而不是上一次调用时生成的那个对象,所以取不到赋值在上一个对象的属性。如果要为字符串添加属性,只有在它的原型对象`String.prototype`上定义(参见《面向对象编程》章节)。
@@ -2447,7 +2447,7 @@ Number.prototype.double = function () {
(123).double() // 246 // 不加括号时点运算符会被解释成小数点
```
- 上面代码在`String`和`Number`这两个对象的原型上面,分别自定义了一个方法,从而可以在所有实例对象上调用。注意,最后一张的`123`外面必须要加上圆括号,否则后面的点运算符(`.`)会被解释成小数点。
+ 上面代码在`String`和`Number`这两个对象的原型上面,分别自定义了一个方法,从而可以在所有实例对象上调用。注意,最后一张的`123`外面必须要加上圆括号,否则后面的点运算符(`.`)会被解释成小数点。
@@ -2455,7 +2455,7 @@ Number.prototype.double = function () {
## 1、概述
- `Boolean`对象是 JavaScript 的三个包装对象之一。作为构造函数,它主要用于生成布尔值的包装对象实例。
+ `Boolean`对象是 JavaScript 的三个包装对象之一。作为构造函数,它主要用于生成布尔值的包装对象实例。
```js
var b = new Boolean(true)
@@ -2463,9 +2463,9 @@ typeof b // object
b.valueOf() // true
```
-上面代码的变量`b`是一个`Boolean`对象的实例,它的类型是对象,值为布尔值`true`。
+上面代码的变量`b`是一个`Boolean`对象的实例,它的类型是对象,值为布尔值`true`。
-注意,`false`对应的包装对象实例,布尔运算结果也是`true`。
+注意,`false`对应的包装对象实例,布尔运算结果也是`true`。
```js
if (new Boolean(false)) { // 返回的是一个对象,所有对象对应的布尔值都是true
@@ -2559,9 +2559,9 @@ typeof n // object
n.valueOf() // 1
```
- 上面代码中,`Number`对象作为构造函数使用,返回一个值为`1`的对象。
+ 上面代码中,`Number`对象作为构造函数使用,返回一个值为`1`的对象。
- 作为工具函数时,它可以将任何类型的值转为数值。
+ 作为工具函数时,它可以将任何类型的值转为数值。
```js
Number(true) // 1
@@ -2577,13 +2577,13 @@ Number(undefined) // NaN
Number('123')// 123
```
- 上面代码将布尔值`true`转为数值`1`。`Number`作为工具函数的用法,详见《数据类型转换》一章。
+ 上面代码将布尔值`true`转为数值`1`。`Number`作为工具函数的用法,详见《数据类型转换》一章。
## 2、静态属性
- `Number`对象拥有以下一些静态属性(即直接定义在`Number`对象上的属性,而不是定义在实例上的属性)。
+ `Number`对象拥有以下一些静态属性(即直接定义在`Number`对象上的属性,而不是定义在实例上的属性)。
- `Number.POSITIVE_INFINITY`:正的无限,指向`Infinity`。
- `Number.NEGATIVE_INFINITY`:负的无限,指向`-Infinity`。
@@ -2614,7 +2614,7 @@ Number.MIN_SAFE_INTEGER // -9007199254740991
## 3、实例方法
- `Number`对象有**4个实例方法**,都跟**将数值转换成指定格式有关**。
+ `Number`对象有**4个实例方法**,都跟**将数值转换成指定格式有关**。
### 3.1 Number.prototype.toString() 可转成多种进制字符串
@@ -2884,7 +2884,7 @@ String(['1','2']) // '1,2'
-## 2、静态方法
+## 2、静态方法
### String.fromCharCode()
@@ -3186,10 +3186,10 @@ one + two + three // "33"
`match`方法**用于确定原字符串是否匹配某个子字符串,返回一个数组,成员为匹配的第一个字符串**。如果没有找到匹配,则返回`null`。
```js
-'cat, bat, sat, fat'.match('at') // ["at"]
+'cat, bat, sat, fat'.match('at') // ["at"]
// ["at", index: 1, input: "cat, bat, sat, fat", groups: undefined]
-'catbatsatbat'.match('bat') // ["bat"]
+'catbatsatbat'.match('bat') // ["bat"]
//["bat", index: 3, input: "catbatsatbat", groups: undefined]
// index属性为bat首次出现的索引
@@ -3320,7 +3320,7 @@ str.replace('c','b') // 'aaa' 匹配不到返回原字符串
## 八、Math对象
- `Math`是 JavaScript 的原生对象,提供各种**数学**功能。该对象**不是构造函数,不能生成实例**,所有的属性和方法都必须在`Math`对象上调用。
+ `Math`是 JavaScript 的原生对象,提供各种**数学**功能。该对象**不是构造函数,不能生成实例**,所有的属性和方法都必须在`Math`对象上调用。
## 1、静态属性
@@ -3566,7 +3566,7 @@ Math.atan(1) // 0.7853981633974483
## 九、Date对象
- `Date`对象是 JavaScript 原生的时间库。它以国际标准时间(UTC)1970年1月1日00:00:00作为时间的零点,可以表示的时间范围是前后各1亿天(单位为毫秒)。
+ `Date`对象是 JavaScript 原生的时间库。它以国际标准时间(UTC)1970年1月1日00:00:00作为时间的零点,可以表示的时间范围是前后各1亿天(单位为毫秒)。
## 1、普通函数的用法
@@ -3781,7 +3781,7 @@ Date.UTC(2011, 0, 1, 2, 3, 4, 567)
-## 5、实例方法
+## 5、实例方法
`Date`的实例对象,有几十个自己的方法,除了`valueOf`和`toString`,可以分为以下三类。
@@ -4126,7 +4126,7 @@ d // Sun Jan 06 2013 06:00:00 GMT+0800 (CST)
## 十、RegExp 对象
- `RegExp`对象提供正则表达式的功能。
+ `RegExp`对象提供正则表达式的功能。
## 1、概述
@@ -4464,8 +4464,8 @@ str.replace(/^\s+|\s+$/g, '')
$n 用于组内容,$2为匹配到的第二组,即world; $1为匹配到的第一组,即hello
*/
-'abc'.replace('b', '[$`-$&-$\'-$$]')
-// "a[a-b-c-$]c"
+'abc'.replace('b', '[$`-$&-$\'-$$]')
+// "a[a-b-c-$]c"
/*说明:
$`为匹配结果 b 前面的文本,即 a
$&为匹配的子字符串,即 b
@@ -4590,7 +4590,7 @@ str.split(separator, [limit])
-正则表达式的规则很复杂,下面一一介绍这些规则。
+正则表达式的规则很复杂,下面一一介绍这些规则。
### 5.1 字面量字符和元字符
@@ -4716,7 +4716,7 @@ str.split(separator, [limit])
- `\uhhhh` 匹配一个以四位十六进制数(`\u0000`-`\uFFFF`)表示的 Unicode 字符。
-
+
### 5.4 字符类
@@ -4755,7 +4755,7 @@ s.match(/yes[^]*day/) // [ 'yes\nmake my day']
> 注意,脱字符只有在字符类的第一个位置才有特殊含义,否则就是字面含义。
-##### (2)连字符(- 字符连续范围)
+##### (2)连字符(- 字符连续范围)
某些情况下,对于连续序列的字符,连字符(`-`)用来提供简写形式,表示**字符的连续范围**。比如,`[abc]`可以写成`[a-c]`,`[0123456789]`可以写成`[0-9]`,同理`[A-Z]`表示26个大写字母。
@@ -5422,7 +5422,7 @@ JSON.stringify({ p1: 1, p2: 2 }, null, 2);
-JSON.stringify({ p1:1, p2:2 }, null, '|-');
+JSON.stringify({ p1:1, p2:2 }, null, '|-');
/*
"{
|-"p1": 1,
@@ -5561,4 +5561,4 @@ JSON.parse('{"a": 1, "b": 2}', f)
## 文档
-学习文档:
\ No newline at end of file
+学习文档:
diff --git a/docs/《JavaScript教程》笔记/03.面向对象.md b/docs/《JavaScript教程》笔记/03.面向对象.md
index 2e31275..3543434 100644
--- a/docs/《JavaScript教程》笔记/03.面向对象.md
+++ b/docs/《JavaScript教程》笔记/03.面向对象.md
@@ -2,11 +2,11 @@
title: 面向对象
date: 2020-01-12 11:49:16
permalink: /pages/659b5af5e2e704e0
-categories:
+categories:
- 《JavaScript教程》笔记
-tags:
- - null
-author:
+tags:
+ - JavaScript
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -91,7 +91,7 @@ var Vehicle = function () {
#### 基本用法
- `new`命令的作用:**执行构造函数,返回一个实例对象**。
+ `new`命令的作用:**执行构造函数,返回一个实例对象**。
```js
var Vehicle = function () {
@@ -102,9 +102,9 @@ var v = new Vehicle(); // new 执行一个构造函数,返回一个实例对
v.price // 1000
```
-上面代码通过`new`命令,让构造函数`Vehicle`生成一个实例对象,保存在变量`v`中。这个新生成的实例对象,从构造函数`Vehicle`得到了`price`属性。`new`命令执行时,构造函数内部的`this`,就代表了新生成的实例对象,`this.price`表示实例对象有一个`price`属性,值是1000。
+上面代码通过`new`命令,让构造函数`Vehicle`生成一个实例对象,保存在变量`v`中。这个新生成的实例对象,从构造函数`Vehicle`得到了`price`属性。`new`命令执行时,构造函数内部的`this`,就代表了新生成的实例对象,`this.price`表示实例对象有一个`price`属性,值是1000。
- 使用`new`命令时,根据需要,**构造函数也可以接受参数**。
+ 使用`new`命令时,根据需要,**构造函数也可以接受参数**。
```js
var Vehicle = function (p) {
@@ -152,9 +152,9 @@ Fubar()
// TypeError: Cannot set property '_foo' of undefined
```
- 上面代码的`Fubar`为构造函数,`use strict`命令保证了该函数在严格模式下运行。由于**严格模式中,函数内部的`this`不能指向全局对象**,默认等于`undefined`,导致不加`new`调用会报错(JavaScript 不允许对`undefined`添加属性)。
+ 上面代码的`Fubar`为构造函数,`use strict`命令保证了该函数在严格模式下运行。由于**严格模式中,函数内部的`this`不能指向全局对象**,默认等于`undefined`,导致不加`new`调用会报错(JavaScript 不允许对`undefined`添加属性)。
- **另一个解决办法**,构造函数内部判断是否使用`new`命令,如果发现没有使用,则直接返回一个实例对象。
+ **另一个解决办法**,构造函数内部判断是否使用`new`命令,如果发现没有使用,则直接返回一个实例对象。
```js
function Fubar(foo, bar) {
@@ -190,9 +190,9 @@ Fubar(1, 2)._foo // 1
5. 返回实例对象(或自定义对象)
-
-也就是说,构造函数内部,`this`指的是一个新生成的空对象,**所有针对`this`的操作,都会发生在这个空对象上**。构造函数之所以叫“构造函数”,就是说这个函数的目的,就是操作一个空对象(即`this`对象),将其“构造”为需要的样子。
+
+也就是说,构造函数内部,`this`指的是一个新生成的空对象,**所有针对`this`的操作,都会发生在这个空对象上**。构造函数之所以叫“构造函数”,就是说这个函数的目的,就是操作一个空对象(即`this`对象),将其“构造”为需要的样子。
如果构造函数内部有`return`语句,而且`return`后面跟着一个对象,`new`命令会返回`return`语句指定的对象;否则,就会不管`return`语句,返回`this`对象。
@@ -200,7 +200,7 @@ Fubar(1, 2)._foo // 1
var Vehicle = function () {
this.price = 1000;
return 1000; // 1000 非对象,被忽略,返回的是this对象;如果是return {},则会返回{}
-
+
};
(new Vehicle()) === 1000
@@ -236,7 +236,7 @@ msg // {}
typeof msg // "object"
```
- 上面代码中,`getMessage`是一个普通函数,返回一个字符串。对它使用`new`命令,会得到一个空对象。这是因为**`new`命令总是返回一个对象,要么是实例对象,要么是`return`语句指定的对象**。本例中,`return`语句返回的是字符串,所以`new`命令就忽略了该语句。
+ 上面代码中,`getMessage`是一个普通函数,返回一个字符串。对它使用`new`命令,会得到一个空对象。这是因为**`new`命令总是返回一个对象,要么是实例对象,要么是`return`语句指定的对象**。本例中,`return`语句返回的是字符串,所以`new`命令就忽略了该语句。
`new`命令简化的内部流程,可以用下面的代码表示。
@@ -470,7 +470,7 @@ function validate(obj, lowval, hival){
上面代码是一个文本输入框,每当用户输入一个值,就会调用`onChange`回调函数,验证这个值是否在指定范围。浏览器会向回调函数传入当前对象,因此`this`就代表传入当前对象(即文本框),然后就可以从`this.value`上面读到用户的输入值。
- 总结一下,**JavaScript 语言之中,一切皆对象,运行环境也是对象,所以函数都是在某个对象之中运行,`this`就是函数运行时所在的对象(环境)**。这本来并不会让用户糊涂,但是 JavaScript 支持运行环境动态切换,也就是说,`this`的指向是动态的,没有办法事先确定到底指向哪个对象,这才是最让初学者感到困惑的地方。
+ 总结一下,**JavaScript 语言之中,一切皆对象,运行环境也是对象,所以函数都是在某个对象之中运行,`this`就是函数运行时所在的对象(环境)**。这本来并不会让用户糊涂,但是 JavaScript 支持运行环境动态切换,也就是说,`this`的指向是动态的,没有办法事先确定到底指向哪个对象,这才是最让初学者感到困惑的地方。
@@ -499,7 +499,7 @@ var obj = { foo: 5 };
注意,`foo`属性的值保存在属性描述对象的`value`属性里面。
- 这样的结构是很清晰的,问题在于属性的值可能是一个函数。
+ 这样的结构是很清晰的,问题在于属性的值可能是一个函数。
```js
var obj = { foo: function () {} };
@@ -571,7 +571,7 @@ obj.f() // 2 f方法当前运行环境为obj对象
### 3、使用场合
- `this`主要有以下几个使用场合。
+ `this`主要有以下几个使用场合。
#### (1)全局环境
@@ -604,7 +604,7 @@ o.p // "Hello World!"
-#### (3)对象的方法
+#### (3)对象的方法
如果对象的方法里面包含`this`,`this`的指向就是方法运行时所在的对象。该方法赋值给另一个对象,就会改变`this`的指向。
@@ -734,7 +734,7 @@ hello.m() // Hello this指向不变
#### (1)避免多层 this
- 由于`this`的指向是不确定的,所以切勿在函数中包含多层的`this`。
+ 由于`this`的指向是不确定的,所以切勿在函数中包含多层的`this`。
```js
var o = {
@@ -825,7 +825,7 @@ o.f()
// undefined a2
```
- 上面代码中,`foreach`方法的回调函数中的`this`,其实是指向`window`对象,因此取不到`o.v`的值。原因跟上一段的多层`this`是一样的,就是内层的`this`不指向外部,而指向顶层对象。
+ 上面代码中,`foreach`方法的回调函数中的`this`,其实是指向`window`对象,因此取不到`o.v`的值。原因跟上一段的多层`this`是一样的,就是内层的`this`不指向外部,而指向顶层对象。
解决这个问题的一种方法,就是前面提到的,使用中间变量固定`this`。
@@ -904,7 +904,7 @@ $('#button').on('click', o.f);
### 5、绑定 this 的方法
- `this`的动态切换,固然为 JavaScript 创造了巨大的灵活性,但也使得编程变得困难和模糊。有时,需要把`this`固定下来,避免出现意想不到的情况。JavaScript 提供了`call`、`apply`、`bind`这三个方法,来切换/固定`this`的指向。
+ `this`的动态切换,固然为 JavaScript 创造了巨大的灵活性,但也使得编程变得困难和模糊。有时,需要把`this`固定下来,避免出现意想不到的情况。JavaScript 提供了`call`、`apply`、`bind`这三个方法,来切换/固定`this`的指向。
#### Function.prototype.call()
@@ -943,7 +943,7 @@ a.call(window) // 123
a.call(obj) // 456
```
- 上面代码中,`a`函数中的`this`关键字,如果指向全局对象,返回结果为`123`。如果使用`call`方法将`this`关键字指向`obj`对象,返回结果为`456`。可以看到,如果`call`方法没有参数,或者参数为`null`或`undefined`,则等同于指向全局对象。
+ 上面代码中,`a`函数中的`this`关键字,如果指向全局对象,返回结果为`123`。如果使用`call`方法将`this`关键字指向`obj`对象,返回结果为`456`。可以看到,如果`call`方法没有参数,或者参数为`null`或`undefined`,则等同于指向全局对象。
如果`call`方法的参数是一个原始值,那么这个**原始值会自动转成对应的包装对象**,然后传入`call`方法。
@@ -982,7 +982,7 @@ add.call(this, 1, 2) // 3
##### 应用:调用对象的原生方法
- `call`方法的一个应用是调用对象的原生方法。
+ `call`方法的一个应用是调用对象的原生方法。
```JS
var obj = {};
@@ -1041,7 +1041,7 @@ func.apply(thisValue, [arg1, arg2, ...])
// 第二个参数为一个数组,数组每一项为传入函数的参数
```
- `apply`方法的第一个参数也是`this`所要指向的那个对象,如果设为`null`或`undefined`,则等同于指定全局对象。第二个参数则是一个数组,该数组的所有成员依次作为参数,传入原函数。原函数的参数,在`call`方法中必须一个个添加,但是在`apply`方法中,必须以数组形式添加。
+ `apply`方法的第一个参数也是`this`所要指向的那个对象,如果设为`null`或`undefined`,则等同于指定全局对象。第二个参数则是一个数组,该数组的所有成员依次作为参数,传入原函数。原函数的参数,在`call`方法中必须一个个添加,但是在`apply`方法中,必须以数组形式添加。
```js
function f(x, y){
@@ -1077,7 +1077,7 @@ var a = [10, 2, 4, 15, 9];
Math.min.apply(null, a) // 15 null等于绑定全局对象
```
-##### (2)将数组的空元素变为`undefined`
+##### (2)将数组的空元素变为`undefined`
通过`apply`方法,利用`Array`构造函数将数组的空元素变成`undefined`。
@@ -1105,7 +1105,7 @@ Array.apply(null, a).forEach(print)
// b
```
-##### (3)转换类似数组的对象
+##### (3)转换类似数组的对象
另外,利用数组对象的`slice`方法,可以将一个类似数组的对象(比如`arguments`对象)转为真正的数组。
@@ -1165,7 +1165,7 @@ var print = d.getTime;
print() // Uncaught TypeError: this is not a Date object.
```
- 上面代码中,我们将`d.getTime`方法赋给变量`print`,然后调用`print`就报错了。这是因为`getTime`方法内部的`this`,绑定`Date`对象的实例,赋给变量`print`以后,内部的`this`已经不指向`Date`对象的实例了。
+ 上面代码中,我们将`d.getTime`方法赋给变量`print`,然后调用`print`就报错了。这是因为`getTime`方法内部的`this`,绑定`Date`对象的实例,赋给变量`print`以后,内部的`this`已经不指向`Date`对象的实例了。
`bind`方法可以解决这个问题。
@@ -1176,7 +1176,7 @@ print() // 1481869925657
上面代码中,`bind`方法将`getTime`方法内部的`this`绑定到`d`对象,这时就可以安全地将这个方法赋值给其他变量了。
- `bind`方法的参数就是所要绑定`this`的对象,下面是一个更清晰的例子。
+ `bind`方法的参数就是所要绑定`this`的对象,下面是一个更清晰的例子。
```js
var counter = {
@@ -1246,7 +1246,7 @@ plus5(10) // 15 传入的参数为add内的y
##### bind要注意的点:
-##### (1)每一次返回一个新函数
+##### (1)每一次返回一个新函数
`bind`方法**每运行一次,就返回一个新函数**,这会产生一些问题。比如,监听事件的时候,不能写成下面这样。
@@ -1416,7 +1416,7 @@ ES6 引入了 class 语法,基于 class 的继承不在这个教程介绍,
### 1、原型对象概述
-#### (1)构造函数的缺点
+#### (1)构造函数的缺点
JavaScript 通过构造函数生成新对象,因此**构造函数可以视为对象的模板**。实例对象的属性和方法,可以定义在构造函数内部。
@@ -1480,7 +1480,7 @@ typeof f.prototype // "object"
上面代码中,函数`f`默认具有`prototype`属性,指向一个对象。
- **对于普通函数来说,该属性基本无用**。但是,**对于构造函数来说,生成实例的时候,该属性会自动成为实例对象的原型**。
+ **对于普通函数来说,该属性基本无用**。但是,**对于构造函数来说,生成实例的时候,该属性会自动成为实例对象的原型**。
```js
function Animal(name) {
@@ -1505,7 +1505,7 @@ Animal.prototype.color = 'yellow';
// color属性并非实例对象cat1/cat2本身的属性,只是当实例本身没有该属性或方法时,它会到原型对象去寻找该属性或方法
-cat1.color // "yellow"
+cat1.color // "yellow"
cat2.color // "yellow"
```
@@ -1570,7 +1570,7 @@ mine instanceof Array // true 判断实例对象mine是否为构造函数Array
上面代码中,`mine`是构造函数`MyArray`的实例对象,由于`MyArray.prototype`指向一个数组实例,使得`mine`可以调用数组方法(这些方法定义在数组实例的`prototype`对象上面)。最后那行`instanceof`表达式,用来比较一个对象是否为某个构造函数的实例,结果就是证明`mine`为`Array`的实例,`instanceof`运算符的详细解释详见后文。
- 上面代码还出现了原型对象的`constructor`属性,这个属性的含义下一节就来解释。
+ 上面代码还出现了原型对象的`constructor`属性,这个属性的含义下一节就来解释。
#### (4)constructor 属性
@@ -1642,7 +1642,7 @@ Person.prototype = { // 修改了原型对象,但没有修改原型下的constru
};
// 由于原型对象已被修改,原型下的constructor也被修改
-Person.prototype.constructor === Person // false
+Person.prototype.constructor === Person // false
Person.prototype.constructor === Object // true // 普通对象的constructor指向object构造函数
```
@@ -1680,7 +1680,7 @@ f.constructor.name // "Foo"
### 2、instanceof 运算符
- `instanceof`运算符,**判断对象是否为某个构造函数的实例,返回一个布尔值**。
+ `instanceof`运算符,**判断对象是否为某个构造函数的实例,返回一个布尔值**。
#### 语法
@@ -1819,7 +1819,7 @@ Sub.prototype.method = '...';
- **另外一种写法**是`Sub.prototype`等于一个父类实例。
+ **另外一种写法**是`Sub.prototype`等于一个父类实例。
```js
Sub.prototype = new Super();// 这个写法会继承父类实例的方法,不推荐
@@ -1882,7 +1882,7 @@ ClassB.prototype.print = function() {// 单个方法的继承
### 4、多重继承
- JavaScript 不提供多重继承功能,即不允许一个对象同时继承多个对象。但是,可以通过变通方法,实现这个功能。
+ JavaScript 不提供多重继承功能,即不允许一个对象同时继承多个对象。但是,可以通过变通方法,实现这个功能。
```js
function M1() { // 构造函数M1
@@ -2099,7 +2099,7 @@ var module1 = (function ($, YAHOO) {
## 四、Object 对象的相关方法
- JavaScript 在`Object`对象上面,提供了很多相关方法,处理面向对象编程的相关操作。本章介绍这些方法。
+ JavaScript 在`Object`对象上面,提供了很多相关方法,处理面向对象编程的相关操作。本章介绍这些方法。
### 1、Object.getPrototypeOf() 获取原型对象
@@ -2131,7 +2131,7 @@ Object.getPrototypeOf(f) === Function.prototype // true
### 2、Object.setPrototypeOf() 设置原型对象
- `Object.setPrototypeOf`方法为参数对象**设置原型**,**返回该参数对象**。它接受两个参数,第一个是现有对象,第二个是原型对象。
+ `Object.setPrototypeOf`方法为参数对象**设置原型**,**返回该参数对象**。它接受两个参数,第一个是现有对象,第二个是原型对象。
```js
var a = {};
@@ -2157,7 +2157,7 @@ var f = Object.setPrototypeOf({}, F.prototype); // 模拟new命令
F.call(f);
```
-上面代码中,`new`命令新建实例对象,其实可以分成两步。第一步,将一个空对象的原型设为构造函数的`prototype`属性(上例是`F.prototype`);第二步,将构造函数内部的`this`绑定这个空对象,然后执行构造函数,使得定义在`this`上面的方法和属性(上例是`this.foo`),都转移到这个空对象上。
+上面代码中,`new`命令新建实例对象,其实可以分成两步。第一步,将一个空对象的原型设为构造函数的`prototype`属性(上例是`F.prototype`);第二步,将构造函数内部的`this`绑定这个空对象,然后执行构造函数,使得定义在`this`上面的方法和属性(上例是`this.foo`),都转移到这个空对象上。
### 3、 Object.create() 创建实例对象,指向目标对象的原型
@@ -2218,7 +2218,7 @@ obj.valueOf()
// TypeError: Object [object Object] has no method 'valueOf'
```
- 上面代码中,对象`obj`的原型是`null`,它就不具备一些定义在`Object.prototype`对象上面的属性,比如`valueOf`方法。
+ 上面代码中,对象`obj`的原型是`null`,它就不具备一些定义在`Object.prototype`对象上面的属性,比如`valueOf`方法。
使用`Object.create`方法的时候,必须提供对象原型,即**参数不能为空,或者不是对象,否则会报错**。
@@ -2241,7 +2241,7 @@ obj2.p // 2 obj2的原型指向obj1,当访问obj2上的p属性时,js引擎
上面代码中,修改对象原型`obj1`会影响到实例对象`obj2`。
- 除了对象的原型,`Object.create`方法还可以接受**第二个参数。该参数是一个属性描述对象,它所描述的对象属性,会添加到实例对象,作为该对象自身的属性**。
+ 除了对象的原型,`Object.create`方法还可以接受**第二个参数。该参数是一个属性描述对象,它所描述的对象属性,会添加到实例对象,作为该对象自身的属性**。
```js
var obj = Object.create({}, {
@@ -2306,7 +2306,7 @@ Object.prototype.isPrototypeOf(Object.create(null)) // false
### 5、Object.prototype.\_\_proto\_\_ 返回该对象的原型,可读写
- 实例对象的`__proto__`**属性**(前后各两个下划线),**返回该对象的原型。该属性可读写**。
+ 实例对象的`__proto__`**属性**(前后各两个下划线),**返回该对象的原型。该属性可读写**。
```js
var obj = Object.create({x:1}) // 创建实例对象obj,其原型指定为{x:1}
@@ -2327,7 +2327,7 @@ obj.__proto__ === Object.getPrototypeOf(obj) //true
上面代码通过`__proto__`属性,将`p`对象设为`obj`对象的原型。
- 根据语言标准,`__proto__`属性只有浏览器才需要部署,其他环境可以没有这个属性。它前后的两根下划线,表明它本质是一个内部属性,不应该对使用者暴露。**因此,应该尽量少用这个属性,而是用`Object.getPrototypeOf()`和`Object.setPrototypeOf()`,进行原型对象的读写操作**。
+ 根据语言标准,`__proto__`属性只有浏览器才需要部署,其他环境可以没有这个属性。它前后的两根下划线,表明它本质是一个内部属性,不应该对使用者暴露。**因此,应该尽量少用这个属性,而是用`Object.getPrototypeOf()`和`Object.setPrototypeOf()`,进行原型对象的读写操作**。
原型链可以用`__proto__`很直观地表示。
@@ -2402,7 +2402,7 @@ C.prototype = p;
C.prototype.constructor = C; // 如在构造函数的继承中就使用到这个操作
var c = new C();
-c.constructor.prototype === p // true
+c.constructor.prototype === p // true
```
因此,**推荐使用第三种`Object.getPrototypeOf`方法,获取原型对象**。
@@ -2466,7 +2466,7 @@ var o2 = Object.create(o1, { // o2的原型指向o1,并且在o2上定义一个
for (p in o2) {
console.info(p);
}
-// p2
+// p2
// p1 继承的属性
```
@@ -2526,7 +2526,7 @@ inheritedPropertyNames(Date)
```js
function copyObject(orig) { // 拷贝对象函数
// 创建一个新对象,新对象的原型指向旧对象的原型
- var copy = Object.create(Object.getPrototypeOf(orig));
+ var copy = Object.create(Object.getPrototypeOf(orig));
copyOwnPropertiesFrom(copy, orig);
return copy;
}
@@ -2586,9 +2586,4 @@ function copyObject(orig) {
## 文档
-学习文档:
-
-
-
-
-
+学习文档:
diff --git a/docs/《JavaScript教程》笔记/04.异步操作.md b/docs/《JavaScript教程》笔记/04.异步操作.md
index 67c6ca0..acd1b7a 100644
--- a/docs/《JavaScript教程》笔记/04.异步操作.md
+++ b/docs/《JavaScript教程》笔记/04.异步操作.md
@@ -2,11 +2,11 @@
title: 异步操作
date: 2020-01-12 11:49:16
permalink: /pages/d61b1cb4cdac1f63
-categories:
+categories:
- 《JavaScript教程》笔记
-tags:
- - null
-author:
+tags:
+ - JavaScript
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -62,7 +62,7 @@ JavaScript 引擎怎么知道异步任务有没有结果,能不能进入主线
#### (1)回调函数
- 回调函数**是异步操作最基本的方法。**
+ 回调函数**是异步操作最基本的方法。**
下面是两个函数`f1`和`f2`,编程的意图是`f2`必须等到`f1`执行完成,才能执行。
@@ -105,7 +105,7 @@ f1(f2);
#### (2)事件监听
- 另一种思路是采用事件驱动模式。**异步任务的执行不取决于代码的顺序,而取决于某个事件是否发生**。
+ 另一种思路是采用事件驱动模式。**异步任务的执行不取决于代码的顺序,而取决于某个事件是否发生**。
还是以`f1`和`f2`为例。首先,为`f1`绑定一个事件(这里采用的 jQuery 的[写法](https://api.jquery.com/on/))。
diff --git a/docs/《JavaScript教程》笔记/05.DOM.md b/docs/《JavaScript教程》笔记/05.DOM.md
index 77eda4d..0ef742b 100644
--- a/docs/《JavaScript教程》笔记/05.DOM.md
+++ b/docs/《JavaScript教程》笔记/05.DOM.md
@@ -2,11 +2,11 @@
title: DOM
date: 2020-01-12 11:49:16
permalink: /pages/7d961b8030c6099e
-categories:
+categories:
- 《JavaScript教程》笔记
-tags:
- - null
-author:
+tags:
+ - JavaScript
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -69,7 +69,7 @@ DOM 提供操作接口,用来获取这三种关系的节点。比如,子节
## 二、Node接口
- **所有 DOM 节点对象都继承了 Node 接口,拥有一些共同的属性和方法**。这是 DOM 操作的基础。
+ **所有 DOM 节点对象都继承了 Node 接口,拥有一些共同的属性和方法**。这是 DOM 操作的基础。
### 1、属性
@@ -659,7 +659,7 @@ p1.isSameNode(p2) // false
p1.isSameNode(p1) // true
```
-#### 2.10 Node.prototype.normalize() 将当前节点和它的后代节点”规范化“
+#### 2.10 Node.prototype.normalize() 将当前节点和它的后代节点”规范化“
`normalize`方法 **将当前节点和它的后代节点”规范化“** 。在一个"规范化"后的DOM树中,不存在一个空的文本节点,或者两个相邻的文本节点。
@@ -905,22 +905,22 @@ document.images.pic === pic // true
```
@@ -969,7 +969,7 @@ document.images.namedItem('pic') === pic // true
## 四、ParentNode 接口(父节点接口),ChildNode 接口(子节点接口)
- 节点对象除了继承 Node 接口以外,还会继承其他接口。`ParentNode`接口**表示当前节点是一个父节点,提供一些处理子节点的方法**。`ChildNode`接口**表示当前节点是一个子节点,提供一些相关方法。**
+ 节点对象除了继承 Node 接口以外,还会继承其他接口。`ParentNode`接口**表示当前节点是一个父节点,提供一些处理子节点的方法**。`ChildNode`接口**表示当前节点是一个子节点,提供一些相关方法。**
@@ -1176,7 +1176,7 @@ doctype.name // "html"
-##### (4)document.body 指向\,document.head 指向 \
+##### (4)document.body 指向\,document.head 指向 \
`document.body`属性指向` `节点,`document.head`属性指向` `节点。
@@ -1221,7 +1221,7 @@ if (document.fullscreenElement.nodeName == 'VIDEO') {
#### 2.2 节点集合属性 (文档内部特定元素的集合,返HTMLCollection实例)
-以下属性**返回一个`HTMLCollection`实例**,表示文档内部特定元素的集合。这些集合都是**动态的**,原节点有任何变化,立刻会反映在集合中。
+以下属性**返回一个`HTMLCollection`实例**,表示文档内部特定元素的集合。这些集合都是**动态的**,原节点有任何变化,立刻会反映在集合中。
##### (1)document.links 返回所有含href属性的和
@@ -1420,7 +1420,7 @@ document.referrer
`document.dir`返回**一个字符串,表示文字方向**。它**只有两个可能**的值:`rtl`表示文字从右到左,阿拉伯文是这种方式;`ltr`表示文字从左到右,包括英语和汉语在内的大多数文字采用这种方式。
-> 注: 第一次调用该属性时,可能返回空字符串""
+> 注: 第一次调用该属性时,可能返回空字符串""
@@ -2037,10 +2037,10 @@ var nodeIterator = document.createNodeIterator(document.body);
var pars = [];
var currentNode;
-while (currentNode = nodeIterator.nextNode()) {
+while (currentNode = nodeIterator.nextNode()) {
// js中所有运算符都有返回值,为运算结果。这里面即给currentNode赋值了,还会自动调用Boolean()进行布尔运算。
// 每次调用NodeFilter实例的nextNode()方法都会返回下一个节点
-
+
pars.push(currentNode);
}
```
@@ -2098,9 +2098,9 @@ while(treeWalker.nextNode()) {
##### (1)document.execCommand() 执行命令(实现复制文本等功能,富文本编辑器大量使用此方法)
-概念一: **当一个HTML文档切换到设计模式时,`document`暴露 `execCommand` 方法,该方法允许运行命令来操纵[可编辑内容区域](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/contenteditable)的元素。**
+概念一: **当一个HTML文档切换到设计模式时,`document`暴露 `execCommand` 方法,该方法允许运行命令来操纵[可编辑内容区域](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Global_attributes/contenteditable)的元素。**
-概念二: **execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令。处理Html数据时常用**
+概念二: **execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令。处理Html数据时常用**
@@ -2139,159 +2139,159 @@ if (url) {
###### 命令列表
```css
-1. 2D-Position 允许通过拖曳移动绝对定位的对象。
+1. 2D-Position 允许通过拖曳移动绝对定位的对象。
-2. AbsolutePosition 设定元素的 position 属性为“absolute”(绝对)。
+2. AbsolutePosition 设定元素的 position 属性为“absolute”(绝对)。
-3. BackColor 设置或获取当前选中区的背景颜色。
+3. BackColor 设置或获取当前选中区的背景颜色。
-4. BlockDirLTR 目前尚未支持。
+4. BlockDirLTR 目前尚未支持。
-5. BlockDirRTL 目前尚未支持。
+5. BlockDirRTL 目前尚未支持。
-6. Bold 切换当前选中区的粗体显示与否。
+6. Bold 切换当前选中区的粗体显示与否。
-7. BrowseMode 目前尚未支持。
+7. BrowseMode 目前尚未支持。
-8. Copy 将当前选中区复制到剪贴板。
+8. Copy 将当前选中区复制到剪贴板。
-9. CreateBookmark 创建一个书签锚或获取当前选中区或插入点的书签锚的名称。
+9. CreateBookmark 创建一个书签锚或获取当前选中区或插入点的书签锚的名称。
-10.CreateLink 在当前选中区上插入超级链接,或显示一个对话框允许用户指定要为当前选中区插入的超级链接的 URL。
+10.CreateLink 在当前选中区上插入超级链接,或显示一个对话框允许用户指定要为当前选中区插入的超级链接的 URL。
-11.Cut 将当前选中区复制到剪贴板并删除之。
+11.Cut 将当前选中区复制到剪贴板并删除之。
-12.Delete 删除当前选中区。
+12.Delete 删除当前选中区。
-13.DirLTR 目前尚未支持。
+13.DirLTR 目前尚未支持。
-14.DirRTL 目前尚未支持。
+14.DirRTL 目前尚未支持。
-15.EditMode 目前尚未支持。
+15.EditMode 目前尚未支持。
-16.FontName 设置或获取当前选中区的字体。
+16.FontName 设置或获取当前选中区的字体。
-17.FontSize 设置或获取当前选中区的字体大小。
+17.FontSize 设置或获取当前选中区的字体大小。
-18.ForeColor 设置或获取当前选中区的前景(文本)颜色。
+18.ForeColor 设置或获取当前选中区的前景(文本)颜色。
-19.FormatBlock 设置当前块格式化标签。
+19.FormatBlock 设置当前块格式化标签。
-20.Indent 增加选中文本的缩进。
+20.Indent 增加选中文本的缩进。
-21.InlineDirLTR 目前尚未支持。
+21.InlineDirLTR 目前尚未支持。
-22.InlineDirRTL 目前尚未支持。
+22.InlineDirRTL 目前尚未支持。
-23.InsertButton 用按钮控件覆盖当前选中区。
+23.InsertButton 用按钮控件覆盖当前选中区。
-24.InsertFieldset 用方框覆盖当前选中区。
+24.InsertFieldset 用方框覆盖当前选中区。
-25.InsertHorizontalRule 用水平线覆盖当前选中区。
+25.InsertHorizontalRule 用水平线覆盖当前选中区。
-26.InsertIFrame 用内嵌框架覆盖当前选中区。
+26.InsertIFrame 用内嵌框架覆盖当前选中区。
-27.InsertImage 用图像覆盖当前选中区。
+27.InsertImage 用图像覆盖当前选中区。
-28.InsertInputButton 用按钮控件覆盖当前选中区。
+28.InsertInputButton 用按钮控件覆盖当前选中区。
-29.InsertInputCheckbox 用复选框控件覆盖当前选中区。
+29.InsertInputCheckbox 用复选框控件覆盖当前选中区。
-30.InsertInputFileUpload 用文件上载控件覆盖当前选中区。
+30.InsertInputFileUpload 用文件上载控件覆盖当前选中区。
-31.InsertInputHidden 插入隐藏控件覆盖当前选中区。
+31.InsertInputHidden 插入隐藏控件覆盖当前选中区。
-32.InsertInputImage 用图像控件覆盖当前选中区。
+32.InsertInputImage 用图像控件覆盖当前选中区。
-33.InsertInputPassword 用密码控件覆盖当前选中区。
+33.InsertInputPassword 用密码控件覆盖当前选中区。
-34.InsertInputRadio 用单选钮控件覆盖当前选中区。
+34.InsertInputRadio 用单选钮控件覆盖当前选中区。
-35.InsertInputReset 用重置控件覆盖当前选中区。
+35.InsertInputReset 用重置控件覆盖当前选中区。
-36.InsertInputSubmit 用提交控件覆盖当前选中区。
+36.InsertInputSubmit 用提交控件覆盖当前选中区。
-37.InsertInputText 用文本控件覆盖当前选中区。
+37.InsertInputText 用文本控件覆盖当前选中区。
-38.InsertMarquee 用空字幕覆盖当前选中区。
+38.InsertMarquee 用空字幕覆盖当前选中区。
-39.InsertOrderedList 切换当前选中区是编号列表还是常规格式化块。
+39.InsertOrderedList 切换当前选中区是编号列表还是常规格式化块。
-40.InsertParagraph 用换行覆盖当前选中区。
+40.InsertParagraph 用换行覆盖当前选中区。
-41.InsertSelectDropdown 用下拉框控件覆盖当前选中区。
+41.InsertSelectDropdown 用下拉框控件覆盖当前选中区。
-42.InsertSelectListbox 用列表框控件覆盖当前选中区。
+42.InsertSelectListbox 用列表框控件覆盖当前选中区。
-43.InsertTextArea 用多行文本输入控件覆盖当前选中区。
+43.InsertTextArea 用多行文本输入控件覆盖当前选中区。
-44.InsertUnorderedList 切换当前选中区是项目符号列表还是常规格式化块。
+44.InsertUnorderedList 切换当前选中区是项目符号列表还是常规格式化块。
-45.Italic 切换当前选中区斜体显示与否。
+45.Italic 切换当前选中区斜体显示与否。
-46.JustifyCenter 将当前选中区在所在格式化块置中。
+46.JustifyCenter 将当前选中区在所在格式化块置中。
-47.JustifyFull 目前尚未支持。
+47.JustifyFull 目前尚未支持。
-48.JustifyLeft 将当前选中区所在格式化块左对齐。
+48.JustifyLeft 将当前选中区所在格式化块左对齐。
-49.JustifyNone 目前尚未支持。
+49.JustifyNone 目前尚未支持。
-50.JustifyRight 将当前选中区所在格式化块右对齐。
+50.JustifyRight 将当前选中区所在格式化块右对齐。
-51.LiveResize 迫使 MSHTML 编辑器在缩放或移动过程中持续更新元素外观,而不是只在移动或缩放完成后更新。
+51.LiveResize 迫使 MSHTML 编辑器在缩放或移动过程中持续更新元素外观,而不是只在移动或缩放完成后更新。
-52.MultipleSelection 允许当用户按住 Shift 或 Ctrl 键时一次选中多于一个站点可选元素。
+52.MultipleSelection 允许当用户按住 Shift 或 Ctrl 键时一次选中多于一个站点可选元素。
-53.Open 打开。
+53.Open 打开。
-54.Outdent 减少选中区所在格式化块的缩进。
+54.Outdent 减少选中区所在格式化块的缩进。
-55.OverWrite 切换文本状态的插入和覆盖。
+55.OverWrite 切换文本状态的插入和覆盖。
-56.Paste 用剪贴板内容覆盖当前选中区。
+56.Paste 用剪贴板内容覆盖当前选中区。
-57.PlayImage 目前尚未支持。
+57.PlayImage 目前尚未支持。
-58.Print 打开打印对话框以便用户可以打印当前页。
+58.Print 打开打印对话框以便用户可以打印当前页。
-59.Redo 重做。
+59.Redo 重做。
-60.Refresh 刷新当前文档。
+60.Refresh 刷新当前文档。
-61.RemoveFormat 从当前选中区中删除格式化标签。
+61.RemoveFormat 从当前选中区中删除格式化标签。
-62.RemoveParaFormat 目前尚未支持。
+62.RemoveParaFormat 目前尚未支持。
-63.SaveAs 将当前 Web 页面保存为文件。
+63.SaveAs 将当前 Web 页面保存为文件。
-64.SelectAll 选中整个文档。
+64.SelectAll 选中整个文档。
-65.SizeToControl 目前尚未支持。
+65.SizeToControl 目前尚未支持。
-66.SizeToControlHeight 目前尚未支持。
+66.SizeToControlHeight 目前尚未支持。
-67.SizeToControlWidth 目前尚未支持。
+67.SizeToControlWidth 目前尚未支持。
-68.Stop 停止。
+68.Stop 停止。
-69.StopImage 目前尚未支持。
+69.StopImage 目前尚未支持。
-70.StrikeThrough 目前尚未支持。
+70.StrikeThrough 目前尚未支持。
-71.Subscript 目前尚未支持。
+71.Subscript 目前尚未支持。
-72.Superscript 目前尚未支持。
+72.Superscript 目前尚未支持。
-73.UnBookmark 从当前选中区中删除全部书签。
+73.UnBookmark 从当前选中区中删除全部书签。
-74.Underline 切换当前选中区的下划线显示与否。
+74.Underline 切换当前选中区的下划线显示与否。
-75.Undo 撤消。
+75.Undo 撤消。
-76.Unlink 从当前选中区中删除全部超级链接。
+76.Unlink 从当前选中区中删除全部超级链接。
-77.Unselect 清除当前选中区的选中状态。
+77.Unselect 清除当前选中区的选中状态。
```
@@ -3125,7 +3125,7 @@ element.dispatchEvent(event);
-#### 2.9 Element.scrollIntoView() 让元素滚动到浏览器可视区
+#### 2.9 Element.scrollIntoView() 让元素滚动到浏览器可视区
`Element.scrollIntoView`方法**让当前的元素滚动到浏览器窗口的可视区域内** ,类似于设置`window.location.hash`的效果。
@@ -3350,8 +3350,8 @@ HTML 元素包括标签名和若干个键值对,这个键值对就称为“属
NamedNodeMap {0: id, 1: href, id: id, href: href, length: 2}
// 这两个访问方法都是返回一个id的属性节点对象
-// NamedNodeMap[0]
-// NamedNodeMap.id
+// NamedNodeMap[0]
+// NamedNodeMap.id
{
baseURI: "file:///C:/Users/dell/Desktop/test.html"
@@ -3434,7 +3434,7 @@ HTML 元素的标准属性(即**在标准中定义的属性**),会**自动
var a = document.getElementById('test');
// a是节点对象,id和href自动成为a节点的属性
-a.id // "aId"
+a.id // "aId"
a.href // "http://www.example.com/"
a.className // "aClass"
```
@@ -3883,7 +3883,7 @@ function reverse(n) {
## 八、CSS 操作
- CSS 与 JavaScript 是两个有着明确分工的领域,前者负责页面的视觉效果,后者负责与用户的行为互动。但是,它们毕竟同属网页开发的前端,因此不可避免有着交叉和互相配合。本章介绍如何**通过 JavaScript 操作 CSS**。
+ CSS 与 JavaScript 是两个有着明确分工的领域,前者负责页面的视觉效果,后者负责与用户的行为互动。但是,它们毕竟同属网页开发的前端,因此不可避免有着交叉和互相配合。本章介绍如何**通过 JavaScript 操作 CSS**。
@@ -4178,7 +4178,7 @@ isPropertySupported('background-clip')
`CSS.escape`方法就用来转义那些特殊字符。
```js
-document.querySelector('#' + CSS.escape('foo#bar'))
+document.querySelector('#' + CSS.escape('foo#bar'))
//CSS.escape('foo#bar')转义成foo\#bar
```
@@ -4335,14 +4335,14 @@ myStyleSheet instanceof StyleSheet // true
\ No newline at end of file
+
diff --git a/docs/《Vue》笔记/02.组件/80.动态组件与 v-once 指令.md b/docs/《Vue》笔记/02.组件/80.动态组件与 v-once 指令.md
index 3bae151..70a8a60 100644
--- a/docs/《Vue》笔记/02.组件/80.动态组件与 v-once 指令.md
+++ b/docs/《Vue》笔记/02.组件/80.动态组件与 v-once 指令.md
@@ -2,12 +2,12 @@
title: 动态组件与 v-once 指令
date: 2020-02-16 15:52:19
permalink: /pages/636ca33122e9a64b
-categories:
+categories:
- 《Vue》笔记
- 组件
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -109,8 +109,3 @@ Vue.component('terms-of-service', {
再说一次,试着不要过度使用这个模式。当你需要渲染大量静态内容时,极少数的情况下它会给你带来便利,除非你非常留意渲染变慢了,不然它完全是没有必要的——再加上它在后期会带来很多困惑。例如,设想另一个开发者并不熟悉 `v-once` 或漏看了它在模板中,他们可能会花很多个小时去找出模板为什么无法正确更新。
:::
-
-
-
-
-
diff --git a/docs/《Vue》笔记/02.组件/90.vue父子组件的生命周期顺序.md b/docs/《Vue》笔记/02.组件/90.vue父子组件的生命周期顺序.md
index ba78981..dd10735 100644
--- a/docs/《Vue》笔记/02.组件/90.vue父子组件的生命周期顺序.md
+++ b/docs/《Vue》笔记/02.组件/90.vue父子组件的生命周期顺序.md
@@ -2,12 +2,12 @@
title: vue父子组件的生命周期顺序
date: 2020-02-18 16:39:33
permalink: /pages/e6cec47efa42d7f1
-categories:
+categories:
- 《Vue》笔记
- 组件
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -38,8 +38,3 @@ author:
```repl
父beforeDestroy -> 子beforeDestroy -> 子destroyed -> 父destroyed
```
-
-
-
-
-
diff --git a/docs/《Vue》笔记/03.过渡&动画/110.transition过渡&动画.md b/docs/《Vue》笔记/03.过渡&动画/110.transition过渡&动画.md
index 5d3d623..4b1dfb7 100644
--- a/docs/《Vue》笔记/03.过渡&动画/110.transition过渡&动画.md
+++ b/docs/《Vue》笔记/03.过渡&动画/110.transition过渡&动画.md
@@ -2,12 +2,12 @@
title: transition过渡&动画
date: 2020-02-04 13:16:19
permalink: /pages/184a96b493a97078
-categories:
+categories:
- 《Vue》笔记
- 过渡&动画
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -67,7 +67,7 @@ author:
...
-
+
```
@@ -78,4 +78,3 @@ author:
&.slide-enter, &.slide-leave-to
transform: translate3d(100%, 0, 0)
```
-
diff --git a/docs/《Vue》笔记/03.过渡&动画/112.使用animate库.md b/docs/《Vue》笔记/03.过渡&动画/112.使用animate库.md
index 2816efd..1053bb4 100644
--- a/docs/《Vue》笔记/03.过渡&动画/112.使用animate库.md
+++ b/docs/《Vue》笔记/03.过渡&动画/112.使用animate库.md
@@ -2,12 +2,12 @@
title: 使用animate库
date: 2020-02-17 16:05:52
permalink: /pages/3b0a20e70805fcea
-categories:
+categories:
- 《Vue》笔记
- 过渡&动画
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
diff --git a/docs/《Vue》笔记/03.过渡&动画/120.transition-group列表过渡.md b/docs/《Vue》笔记/03.过渡&动画/120.transition-group列表过渡.md
index a649a27..9a7c11e 100644
--- a/docs/《Vue》笔记/03.过渡&动画/120.transition-group列表过渡.md
+++ b/docs/《Vue》笔记/03.过渡&动画/120.transition-group列表过渡.md
@@ -2,12 +2,12 @@
title: transition-group列表过渡
date: 2020-02-04 13:17:42
permalink: /pages/0aa92922ace6bb5e
-categories:
+categories:
- 《Vue》笔记
- 过渡&动画
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -63,4 +63,4 @@ author:
vue列表过渡&排序过渡 by xugaoyi (@xugaoyi)
on CodePen.
-
\ No newline at end of file
+
diff --git a/docs/《Vue》笔记/04.可复用性&组合/01.Mixin混入.md b/docs/《Vue》笔记/04.可复用性&组合/01.Mixin混入.md
index 2921595..f2503b9 100644
--- a/docs/《Vue》笔记/04.可复用性&组合/01.Mixin混入.md
+++ b/docs/《Vue》笔记/04.可复用性&组合/01.Mixin混入.md
@@ -2,12 +2,12 @@
title: Mixin混入
date: 2020-02-19 15:22:41
permalink: /pages/bd36a3c1bc3e0821
-categories:
+categories:
- 《Vue》笔记
- 可复用性&组合
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -184,4 +184,3 @@ export default {
}
}
```
-
diff --git a/docs/《Vue》笔记/05.工具/10.Vue CLi v3 创建项目使用记录.md b/docs/《Vue》笔记/05.工具/10.Vue CLi v3 创建项目使用记录.md
index 9b21d8a..38bd6ca 100644
--- a/docs/《Vue》笔记/05.工具/10.Vue CLi v3 创建项目使用记录.md
+++ b/docs/《Vue》笔记/05.工具/10.Vue CLi v3 创建项目使用记录.md
@@ -2,12 +2,12 @@
title: Vue CLi v3 创建项目使用记录
date: 2020-02-20 17:24:29
permalink: /pages/d00311f8174119b2
-categories:
+categories:
- 《Vue》笔记
- 工具
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -61,7 +61,7 @@ Vue CLI v3.11.0
Vue CLI v3.11.0
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Router, CSS Pre-processors, Linter
-? Use history mode for router? (Requires proper server setup for index fallback in production) (Y/n)
+? Use history mode for router? (Requires proper server setup for index fallback in production) (Y/n)
```
5. 选择css预处理器
@@ -75,7 +75,7 @@ Vue CLI v3.11.0
Sass/SCSS (with dart-sass)
Sass/SCSS (with node-sass)
Less
-> Stylus
+> Stylus
```
6. 选择ESLint配置
@@ -90,7 +90,7 @@ Vue CLI v3.11.0
ESLint with error prevention only
ESLint + Airbnb config
> ESLint + Standard config (标准配置)
- ESLint + Prettier
+ ESLint + Prettier
```
7. 选择附加的lint特性?
@@ -127,7 +127,7 @@ Vue CLI v3.11.0
? Pick a linter / formatter config: Standard
? Pick additional lint features: (Press to select, to toggle all, to invert selection)Lint on save
? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? In dedicated config files
-? Save this as a preset for future projects? (y/N)
+? Save this as a preset for future projects? (y/N)
```
> ~/.vuerc
@@ -145,4 +145,3 @@ vue ui
```
> 图形化界面有中文系统,直观的功能界面,以及特性的介绍等。
-
diff --git a/docs/《Vue》笔记/06.规模化/100.vuex操作相关.md b/docs/《Vue》笔记/06.规模化/100.vuex操作相关.md
index 1e52868..d810441 100644
--- a/docs/《Vue》笔记/06.规模化/100.vuex操作相关.md
+++ b/docs/《Vue》笔记/06.规模化/100.vuex操作相关.md
@@ -2,12 +2,12 @@
title: vuex操作相关
date: 2020-02-04 13:15:19
permalink: /pages/d9d62d6ab8ff99a6
-categories:
+categories:
- 《Vue》笔记
- 规模化
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -29,7 +29,7 @@ methods: {
...mapActions([ // 提交actions修改数据,内部为数组 因为actions文件已对方法进行了封装所有是数组类型
'saveSearchHistory' // 相当于在methods绑定了事件saveSearchHistory
]),
-
+
某方法() {
this.setFullScreen(传入值)
},
@@ -39,4 +39,3 @@ methods: {
}
```
-
diff --git a/docs/《Vue》笔记/06.规模化/140.路由懒加载.md b/docs/《Vue》笔记/06.规模化/140.路由懒加载.md
index c1cb4b7..1d228e7 100644
--- a/docs/《Vue》笔记/06.规模化/140.路由懒加载.md
+++ b/docs/《Vue》笔记/06.规模化/140.路由懒加载.md
@@ -2,12 +2,12 @@
title: 路由懒加载
date: 2020-02-04 13:20:20
permalink: /pages/38ecac9a9b92f037
-categories:
+categories:
- 《Vue》笔记
- 规模化
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -39,4 +39,3 @@ const UserCenter = () => import('@/components/user-center/user-center')
```
使用路由懒加载可使app.js文件变小,进入不同路由在分别加载该路由的js。
-
diff --git a/docs/《Vue》笔记/99.其他/80.Vue中的防抖函数封装和使用.md b/docs/《Vue》笔记/99.其他/80.Vue中的防抖函数封装和使用.md
index cfc2cd6..93bcd19 100644
--- a/docs/《Vue》笔记/99.其他/80.Vue中的防抖函数封装和使用.md
+++ b/docs/《Vue》笔记/99.其他/80.Vue中的防抖函数封装和使用.md
@@ -2,12 +2,12 @@
title: Vue中的防抖函数封装和使用
date: 2020-02-04 13:10:19
permalink: /pages/fb08e252dfd8fdfd
-categories:
+categories:
- 《Vue》笔记
- 其他
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -52,4 +52,3 @@ created() {
### 相关文章
[防抖与节流函数](https://xugaoyi.com/pages/0f6a0ac99b62ede5/)
-
diff --git a/docs/《Vue》笔记/99.其他/90.操作本地缓存.md b/docs/《Vue》笔记/99.其他/90.操作本地缓存.md
index 18ba2f3..99929ab 100644
--- a/docs/《Vue》笔记/99.其他/90.操作本地缓存.md
+++ b/docs/《Vue》笔记/99.其他/90.操作本地缓存.md
@@ -2,12 +2,12 @@
title: 操作本地缓存
date: 2020-02-04 13:14:19
permalink: /pages/30a94dbe96873b33
-categories:
+categories:
- 《Vue》笔记
- 其他
-tags:
- - null
-author:
+tags:
+ - Vue
+author:
name: xugaoyi
link: https://github.com/xugaoyi
---
@@ -16,6 +16,3 @@ author:
操作 sessionStorage 和 localStorage 。
-
-
-