{"size": 397609, "ext": "js", "max_stars_repo_path": ".temp/internal/siteData.js", "max_stars_repo_name": "Mr0v0Feng/blog", "max_stars_repo_stars_event_min_datetime": null, "max_stars_repo_stars_event_max_datetime": null, "max_issues_repo_path": ".temp/internal/siteData.js", "max_issues_repo_name": "Mr0v0Feng/blog", "max_issues_repo_issues_event_min_datetime": "2020-07-13T05:30:50.000Z", "max_issues_repo_issues_event_max_datetime": "2020-07-13T08:57:22.000Z", "max_forks_repo_path": ".temp/internal/siteData.js", "max_forks_repo_name": "Mr0v0Feng/blog", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": null, "max_issues_count": 4, "max_forks_count": null, "avg_line_length": 28.6296802995, "max_line_length": 3093, "alphanum_fraction": 0.4277141614}
/**
 * Generated by "@vuepress/internal-site-data"
 */
export const siteData = {
  "title": "F.Y blog",
  "description": "web前端技术博客,简洁至上,专注web前端学习与总结。JavaScript,js,ES6,TypeScript,vue,python,css3,html5,Node,git,github等技术文章。",
  "base": "/my-blog/",
  "headTags": [
    [
      "link",
      {
        "rel": "icon",
        "href": "/my-blog/img/favicon.ico"
      }
    ],
    [
      "meta",
      {
        "name": "keywords",
        "content": "前端博客,个人技术博客,前端,前端开发,前端框架,web前端,前端面试题,技术文档,学习,面试,JavaScript,js,ES6,TypeScript,vue,python,css3,html5,Node,git,github,markdown"
      }
    ],
    [
      "meta",
      {
        "name": "baidu-site-verification",
        "content": "7F55weZDDc"
      }
    ],
    [
      "meta",
      {
        "name": "theme-color",
        "content": "#11a8cd"
      }
    ]
  ],
  "pages": [
    {
      "title": "前端",
      "frontmatter": {
        "pageComponent": {
          "name": "Catalogue",
          "data": {
            "key": "01.前端",
            "imgUrl": "/img/web.png",
            "description": "JavaScript、ES6、Vue框架等前端技术"
          }
        },
        "title": "前端",
        "date": "2020-03-11T21:50:53.000Z",
        "permalink": "/web",
        "sidebar": false,
        "article": false,
        "comment": false,
        "editLink": false
      },
      "regularPath": "/00.%E7%9B%AE%E5%BD%95%E9%A1%B5/01.%E5%89%8D%E7%AB%AF.html",
      "relativePath": "00.目录页/01.前端.md",
      "key": "v-6e533db4",
      "path": "/web/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "页面",
      "frontmatter": {
        "pageComponent": {
          "name": "Catalogue",
          "data": {
            "key": "02.页面",
            "imgUrl": "/img/ui.png",
            "description": "html(5)/css(3)，前端页面相关技术"
          }
        },
        "title": "页面",
        "date": "2020-03-11T21:50:54.000Z",
        "permalink": "/ui",
        "sidebar": false,
        "article": false,
        "comment": false,
        "editLink": false
      },
      "regularPath": "/00.%E7%9B%AE%E5%BD%95%E9%A1%B5/02.%E9%A1%B5%E9%9D%A2.html",
      "relativePath": "00.目录页/02.页面.md",
      "key": "v-c8711056",
      "path": "/ui/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "技术",
      "frontmatter": {
        "pageComponent": {
          "name": "Catalogue",
          "data": {
            "key": "03.技术",
            "imgUrl": "/img/other.png",
            "description": "技术文档、教程、技巧、总结等文章"
          }
        },
        "title": "技术",
        "date": "2020-03-11T21:50:55.000Z",
        "permalink": "/technology",
        "sidebar": false,
        "article": false,
        "comment": false,
        "editLink": false
      },
      "regularPath": "/00.%E7%9B%AE%E5%BD%95%E9%A1%B5/03.%E6%8A%80%E6%9C%AF.html",
      "relativePath": "00.目录页/03.技术.md",
      "key": "v-2fbfc9ec",
      "path": "/technology/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "更多",
      "frontmatter": {
        "pageComponent": {
          "name": "Catalogue",
          "data": {
            "key": "04.更多",
            "imgUrl": "/img/more.png",
            "description": "学习、面试、在线工具等更多文章和页面"
          }
        },
        "title": "更多",
        "date": "2020-03-11T21:50:56.000Z",
        "permalink": "/more",
        "sidebar": false,
        "article": false,
        "comment": false,
        "editLink": false
      },
      "regularPath": "/00.%E7%9B%AE%E5%BD%95%E9%A1%B5/04.%E6%9B%B4%E5%A4%9A.html",
      "relativePath": "00.目录页/04.更多.md",
      "key": "v-0dc88b58",
      "path": "/more/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "new命令原理",
      "frontmatter": {
        "title": "new命令原理",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/8143cc480faf9a11",
        "categories": [
          "前端",
          "JavaScript文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/25.JavaScript%E6%96%87%E7%AB%A0/02.new%E5%91%BD%E4%BB%A4%E5%8E%9F%E7%90%86.html",
      "relativePath": "01.前端/25.JavaScript文章/02.new命令原理.md",
      "key": "v-b700b1da",
      "path": "/pages/8143cc480faf9a11/",
      "excerpt": "<h1 id=\"new命令原理\"><a class=\"header-anchor\" href=\"#new命令原理\">#</a> new命令原理</h1>\n<p>使用new命令时，它后面的函数依次执行下面的步骤：</p>\n<ol>\n<li>创建一个空对象，作为将要返回的实例对象。</li>\n<li>将这个空对象的原型，指向构造函数的prototype属性。</li>\n<li>将这个空对象赋值给函数内部的this关键字。</li>\n<li>开始执行构造函数内部的代码。</li>\n<li>如果构造函数内有返回值且为对象类型，则返回该对象，否则返回上面创建的实例对象。</li>\n</ol>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "ES5面向对象",
      "frontmatter": {
        "title": "ES5面向对象",
        "date": "2020-02-22T10:35:43.000Z",
        "permalink": "/pages/b1af5cb8996363c5",
        "categories": [
          "前端",
          "JavaScript文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/25.JavaScript%E6%96%87%E7%AB%A0/03.ES5%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1.html",
      "relativePath": "01.前端/25.JavaScript文章/03.ES5面向对象.md",
      "key": "v-0575a1c2",
      "path": "/pages/b1af5cb8996363c5/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "ES6面向对象",
      "frontmatter": {
        "title": "ES6面向对象",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/1f4123be6f45abcd",
        "categories": [
          "前端",
          "JavaScript文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/25.JavaScript%E6%96%87%E7%AB%A0/04.ES6%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1.html",
      "relativePath": "01.前端/25.JavaScript文章/04.ES6面向对象.md",
      "key": "v-7b12af84",
      "path": "/pages/1f4123be6f45abcd/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "JS随机打乱数组",
      "frontmatter": {
        "title": "JS随机打乱数组",
        "date": "2020-02-08T17:42:03.000Z",
        "permalink": "/pages/40b4db2d38ba85f2",
        "categories": [
          "前端",
          "JavaScript文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/25.JavaScript%E6%96%87%E7%AB%A0/50.js%E9%9A%8F%E6%9C%BA%E6%89%93%E4%B9%B1%E6%95%B0%E7%BB%84.html",
      "relativePath": "01.前端/25.JavaScript文章/50.js随机打乱数组.md",
      "key": "v-f5257b4e",
      "path": "/pages/40b4db2d38ba85f2/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "多种数组去重性能对比",
      "frontmatter": {
        "title": "多种数组去重性能对比",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/e808fba1fa8fbab2",
        "categories": [
          "前端",
          "JavaScript文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/25.JavaScript%E6%96%87%E7%AB%A0/06.%E5%A4%9A%E7%A7%8D%E6%95%B0%E7%BB%84%E5%8E%BB%E9%87%8D%E6%80%A7%E8%83%BD%E5%AF%B9%E6%AF%94.html",
      "relativePath": "01.前端/25.JavaScript文章/06.多种数组去重性能对比.md",
      "key": "v-5109b27e",
      "path": "/pages/e808fba1fa8fbab2/",
      "headers": [
        {
          "level": 2,
          "title": "测试模板",
          "slug": "测试模板"
        },
        {
          "level": 2,
          "title": "测试代码",
          "slug": "测试代码"
        },
        {
          "level": 2,
          "title": "结论",
          "slug": "结论"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "比typeof运算符更准确的类型判断",
      "frontmatter": {
        "title": "比typeof运算符更准确的类型判断",
        "date": "2020-04-13T15:56:54.000Z",
        "permalink": "/pages/fd4a16d56b83c1bc",
        "categories": [
          "前端",
          "JavaScript文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/25.JavaScript%E6%96%87%E7%AB%A0/100.%E6%AF%94typeof%E8%BF%90%E7%AE%97%E7%AC%A6%E6%9B%B4%E5%87%86%E7%A1%AE%E7%9A%84%E7%B1%BB%E5%9E%8B%E5%88%A4%E6%96%AD.html",
      "relativePath": "01.前端/25.JavaScript文章/100.比typeof运算符更准确的类型判断.md",
      "key": "v-1a35216a",
      "path": "/pages/fd4a16d56b83c1bc/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "判断是否为移动端浏览器",
      "frontmatter": {
        "title": "判断是否为移动端浏览器",
        "date": "2020-01-04T15:25:11.000Z",
        "permalink": "/pages/40f623be692cf8bc",
        "categories": [
          "前端",
          "JavaScript文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/25.JavaScript%E6%96%87%E7%AB%A0/60.%E5%88%A4%E6%96%AD%E6%98%AF%E5%90%A6%E4%B8%BA%E7%A7%BB%E5%8A%A8%E7%AB%AF%E6%B5%8F%E8%A7%88%E5%99%A8.html",
      "relativePath": "01.前端/25.JavaScript文章/60.判断是否为移动端浏览器.md",
      "key": "v-615d2d87",
      "path": "/pages/40f623be692cf8bc/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "将一维数组按指定长度转为二维数组",
      "frontmatter": {
        "title": "将一维数组按指定长度转为二维数组",
        "date": "2020-02-23T13:49:31.000Z",
        "permalink": "/pages/f1acb712033ac8da",
        "categories": [
          "前端",
          "JavaScript文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/25.JavaScript%E6%96%87%E7%AB%A0/70.%E5%B0%86%E4%B8%80%E7%BB%B4%E6%95%B0%E7%BB%84%E6%8C%89%E6%8C%87%E5%AE%9A%E9%95%BF%E5%BA%A6%E8%BD%AC%E4%B8%BA%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84.html",
      "relativePath": "01.前端/25.JavaScript文章/70.将一维数组按指定长度转为二维数组.md",
      "key": "v-ed359b98",
      "path": "/pages/f1acb712033ac8da/",
      "headers": [
        {
          "level": 2,
          "title": "应用场景示例",
          "slug": "应用场景示例"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "防抖与节流函数",
      "frontmatter": {
        "title": "防抖与节流函数",
        "date": "2020-02-29T15:07:47.000Z",
        "permalink": "/pages/0f6a0ac99b62ede5",
        "categories": [
          "前端",
          "JavaScript文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/25.JavaScript%E6%96%87%E7%AB%A0/80.%E9%98%B2%E6%8A%96%E4%B8%8E%E8%8A%82%E6%B5%81%E5%87%BD%E6%95%B0.html",
      "relativePath": "01.前端/25.JavaScript文章/80.防抖与节流函数.md",
      "key": "v-2b73cc08",
      "path": "/pages/0f6a0ac99b62ede5/",
      "headers": [
        {
          "level": 2,
          "title": "防抖函数",
          "slug": "防抖函数"
        },
        {
          "level": 3,
          "title": "封装",
          "slug": "封装"
        },
        {
          "level": 2,
          "title": "节流函数",
          "slug": "节流函数"
        },
        {
          "level": 3,
          "title": "封装",
          "slug": "封装-2"
        },
        {
          "level": 2,
          "title": "应用场景",
          "slug": "应用场景"
        },
        {
          "level": 3,
          "title": "防抖应用场景",
          "slug": "防抖应用场景"
        },
        {
          "level": 3,
          "title": "节流的应用场景",
          "slug": "节流的应用场景"
        },
        {
          "level": 2,
          "title": "示例",
          "slug": "示例"
        }
      ],
      "excerpt": "<h1 id=\"防抖与节流函数\"><a class=\"header-anchor\" href=\"#防抖与节流函数\">#</a> 防抖与节流函数</h1>\n<p>防抖和节流的作用都是在高频事件中防止函数被多次调用，是一种性能优化的方案。</p>\n<p>区别在于，防抖函数只会在高频事件结束后n毫秒调用一次函数，节流函数会在高频事件触发过程当中每隔n毫秒调用一次函数。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Vue项目开发前的一些准备工作",
      "frontmatter": {
        "title": "Vue项目开发前的一些准备工作",
        "date": "2020-02-21T14:40:19.000Z",
        "permalink": "/pages/802a1ca6f7b71c59",
        "categories": [
          "前端",
          "Vue文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/30.Vue%E6%96%87%E7%AB%A0/10.Vue%E9%A1%B9%E7%9B%AE%E5%BC%80%E5%8F%91%E5%89%8D%E7%9A%84%E4%B8%80%E4%BA%9B%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C.html",
      "relativePath": "01.前端/30.Vue文章/10.Vue项目开发前的一些准备工作.md",
      "key": "v-d87fce96",
      "path": "/pages/802a1ca6f7b71c59/",
      "headers": [
        {
          "level": 2,
          "title": "修改",
          "slug": "meta-修改"
        },
        {
          "level": 2,
          "title": "重置样式表",
          "slug": "重置样式表"
        },
        {
          "level": 2,
          "title": "解决移动端点击300ms延迟",
          "slug": "解决移动端点击300ms延迟"
        }
      ],
      "excerpt": "<h1 id=\"vue项目开发前的一些准备工作\"><a class=\"header-anchor\" href=\"#vue项目开发前的一些准备工作\">#</a> Vue项目开发前的一些准备工作</h1>\n<p>在使用Vue CLi创建一个项目之后，正式进入开发前可能需要做一些工作，比如引入重置样式表、解决移动端点击300ms延迟等等。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Vue CLi3 修改webpack配置",
      "frontmatter": {
        "title": "Vue CLi3 修改webpack配置",
        "date": "2020-02-22T15:00:36.000Z",
        "permalink": "/pages/5d463fbdb172d43b",
        "categories": [
          "前端",
          "Vue文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/30.Vue%E6%96%87%E7%AB%A0/20.Vue%20CLi3%20%E4%BF%AE%E6%94%B9webpack%E9%85%8D%E7%BD%AE.html",
      "relativePath": "01.前端/30.Vue文章/20.Vue CLi3 修改webpack配置.md",
      "key": "v-d1210d26",
      "path": "/pages/5d463fbdb172d43b/",
      "headers": [
        {
          "level": 2,
          "title": "审查项目的 webpack 配置",
          "slug": "审查项目的-webpack-配置"
        },
        {
          "level": 2,
          "title": "修改webpack配置",
          "slug": "修改webpack配置"
        },
        {
          "level": 2,
          "title": "参考",
          "slug": "参考"
        }
      ],
      "excerpt": "<h1 id=\"vue-cli3-修改webpack配置\"><a class=\"header-anchor\" href=\"#vue-cli3-修改webpack配置\">#</a> Vue CLi3 修改webpack配置</h1>\n<h2 id=\"审查项目的-webpack-配置\"><a class=\"header-anchor\" href=\"#审查项目的-webpack-配置\">#</a> 审查项目的 webpack 配置</h2>\n<p>因为 <code>@vue/cli-service</code> 对 webpack 配置进行了抽象，当你想查看webpack的配置时可以使用 <code>inspect</code>命令：</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Vue中的scoped和scoped穿透",
      "frontmatter": {
        "title": "Vue中的scoped和scoped穿透",
        "date": "2020-02-23T10:54:23.000Z",
        "permalink": "/pages/c80d2751cf1f4268",
        "categories": [
          "前端",
          "Vue文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/30.Vue%E6%96%87%E7%AB%A0/30.Vue%E4%B8%AD%E7%9A%84scoped%E5%92%8Cscoped%E7%A9%BF%E9%80%8F.html",
      "relativePath": "01.前端/30.Vue文章/30.Vue中的scoped和scoped穿透.md",
      "key": "v-33af99f4",
      "path": "/pages/c80d2751cf1f4268/",
      "headers": [
        {
          "level": 2,
          "title": "什么是scoped？",
          "slug": "什么是scoped？"
        },
        {
          "level": 2,
          "title": "scoped的实现原理",
          "slug": "scoped的实现原理"
        },
        {
          "level": 2,
          "title": "scoped穿透",
          "slug": "scoped穿透"
        },
        {
          "level": 2,
          "title": "在组件中修改第三方组件库样式的其它方法",
          "slug": "在组件中修改第三方组件库样式的其它方法"
        }
      ],
      "excerpt": "<h1 id=\"vue中的scoped和scoped穿透\"><a class=\"header-anchor\" href=\"#vue中的scoped和scoped穿透\">#</a> Vue中的scoped和scoped穿透</h1>\n<h2 id=\"什么是scoped？\"><a class=\"header-anchor\" href=\"#什么是scoped？\">#</a> 什么是scoped？</h2>\n<p>在Vue文件中的style标签上有一个特殊的属性<code>scoped</code>。当一个style标签拥有<code>scoped</code>属性时候，它的css样式只能用于当前的Vue组件，可以使组件的样式不相互污染。如果一个项目的所有style标签都加上了<code>scoped</code>属性，相当于实现了样式的模块化。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "JS获取和修改url参数",
      "frontmatter": {
        "title": "JS获取和修改url参数",
        "date": "2020-03-05T12:45:37.000Z",
        "permalink": "/pages/7a91be2d502346ce",
        "categories": [
          "前端",
          "JavaScript文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/25.JavaScript%E6%96%87%E7%AB%A0/90.JS%E8%8E%B7%E5%8F%96%E5%92%8C%E4%BF%AE%E6%94%B9url%E5%8F%82%E6%95%B0.html",
      "relativePath": "01.前端/25.JavaScript文章/90.JS获取和修改url参数.md",
      "key": "v-c61f99c0",
      "path": "/pages/7a91be2d502346ce/",
      "headers": [
        {
          "level": 2,
          "title": "获取url参数",
          "slug": "获取url参数"
        },
        {
          "level": 2,
          "title": "修改url参数",
          "slug": "修改url参数"
        },
        {
          "level": 2,
          "title": "不刷新页面修改url参数",
          "slug": "不刷新页面修改url参数"
        },
        {
          "level": 2,
          "title": "URL 的编码和解码",
          "slug": "url-的编码和解码"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Vue项目使用mock数据的几种方式",
      "frontmatter": {
        "title": "Vue项目使用mock数据的几种方式",
        "date": "2020-02-26T14:06:58.000Z",
        "permalink": "/pages/bd1af2f75fd361fc",
        "categories": [
          "前端",
          "Vue文章"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/30.Vue%E6%96%87%E7%AB%A0/40.Vue%E9%A1%B9%E7%9B%AE%E4%BD%BF%E7%94%A8mock%E6%95%B0%E6%8D%AE%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E5%BC%8F.html",
      "relativePath": "01.前端/30.Vue文章/40.Vue项目使用mock数据的几种方式.md",
      "key": "v-43aa496b",
      "path": "/pages/bd1af2f75fd361fc/",
      "headers": [
        {
          "level": 2,
          "title": "方式一：使用mockjs插件实现本地mock数据",
          "slug": "方式一：使用mockjs插件实现本地mock数据"
        },
        {
          "level": 2,
          "title": "方式二：在public文件夹放mock数据（无需使用mockjs插件）",
          "slug": "方式二：在public文件夹放mock数据（无需使用mockjs插件）"
        },
        {
          "level": 2,
          "title": "方式三：前端本地启动一个nodejs服务，vue项目向nodejs服务请求mock数据",
          "slug": "方式三：前端本地启动一个nodejs服务，vue项目向nodejs服务请求mock数据"
        },
        {
          "level": 2,
          "title": "总结",
          "slug": "总结"
        },
        {
          "level": 2,
          "title": "相关文章",
          "slug": "相关文章"
        }
      ],
      "excerpt": "<h1 id=\"vue项目使用mock数据的几种方式\"><a class=\"header-anchor\" href=\"#vue项目使用mock数据的几种方式\">#</a> Vue项目使用mock数据的几种方式</h1>\n<p>本文是基于vue/cli 3.0创建的项目进行讲解</p>\n<p>首先我们来说一说vue/cli 3.0 与 2.0 的一些不同：</p>\n<ol>\n<li>3.0 移除了 static 文件目录，新增了 public 目录，这个目录下的静态资源不会经过 webpack 的处理，会被直接拷贝，所以我们能够直接访问到该目录下的资源，静态数据（如json数据、图片等）需要存放在这里。</li>\n</ol>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "《JavaScript教程》笔记",
      "frontmatter": {
        "pageComponent": {
          "name": "Catalogue",
          "data": {
            "key": "《JavaScript教程》笔记",
            "imgUrl": "https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200112120340.png",
            "description": "本章内容为博主在原教程基础上添加学习笔记，教程版权归原作者所有。来源：<a href='https://wangdoc.com/javascript/' target='_blank'>JavaScript教程</a>"
          }
        },
        "title": "《JavaScript教程》笔记",
        "date": "2020-01-12T11:51:53.000Z",
        "permalink": "/note/javascript",
        "article": false,
        "comment": false,
        "editLink": false
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/40.%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/00.%E3%80%8AJavaScript%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0.html",
      "relativePath": "01.前端/40.学习笔记/00.《JavaScript教程》笔记.md",
      "key": "v-0242740b",
      "path": "/note/javascript/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "《ES6 教程》笔记",
      "frontmatter": {
        "pageComponent": {
          "name": "Catalogue",
          "data": {
            "key": "《ES6 教程》笔记",
            "imgUrl": "https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200112160453.png",
            "description": "本章内容为博主在原教程基础上添加学习笔记，教程版权归原作者所有。来源：<a href='https://es6.ruanyifeng.com/' target='_blank'>ES6教程</a>"
          }
        },
        "title": "《ES6 教程》笔记",
        "date": "2020-01-12T15:49:22.000Z",
        "permalink": "/note/es6",
        "article": false,
        "comment": false,
        "editLink": false
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/40.%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/10.%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0.html",
      "relativePath": "01.前端/40.学习笔记/10.《ES6 教程》笔记.md",
      "key": "v-47ea480e",
      "path": "/note/es6/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "《Vue》笔记",
      "frontmatter": {
        "pageComponent": {
          "name": "Catalogue",
          "data": {
            "key": "《Vue》笔记",
            "imgUrl": "https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200204143633.png",
            "description": "本章内容是博主的Vue学习笔记，以官方文档为准。"
          }
        },
        "title": "《Vue》笔记",
        "date": "2020-02-04T12:16:12.000Z",
        "permalink": "/note/vue",
        "article": false,
        "comment": false,
        "editLink": false
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/40.%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/20.%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0.html",
      "relativePath": "01.前端/40.学习笔记/20.《Vue》笔记.md",
      "key": "v-d098a356",
      "path": "/note/vue/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Typescript入门笔记",
      "frontmatter": {
        "title": "Typescript入门笔记",
        "date": "2020-07-09T11:18:44.000Z",
        "permalink": "/note/typescript-basic",
        "categories": [
          "前端",
          "学习笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/40.%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/50.Typescript%E5%85%A5%E9%97%A8%E7%AC%94%E8%AE%B0.html",
      "relativePath": "01.前端/40.学习笔记/50.Typescript入门笔记.md",
      "key": "v-5a549eaa",
      "path": "/note/typescript-basic/",
      "headers": [
        {
          "level": 2,
          "title": "布尔值（boolean）",
          "slug": "布尔值（boolean）"
        },
        {
          "level": 2,
          "title": "数字（number）",
          "slug": "数字（number）"
        },
        {
          "level": 2,
          "title": "字符串（string）",
          "slug": "字符串（string）"
        },
        {
          "level": 2,
          "title": "数组（array）",
          "slug": "数组（array）"
        },
        {
          "level": 2,
          "title": "元组（tuple） 属于数组的一种",
          "slug": "元组（tuple）-属于数组的一种"
        },
        {
          "level": 2,
          "title": "枚举（enum)",
          "slug": "枚举（enum"
        },
        {
          "level": 2,
          "title": "类型（any）",
          "slug": "类型（any）"
        },
        {
          "level": 2,
          "title": "void",
          "slug": "void"
        },
        {
          "level": 2,
          "title": "null 和 undefined",
          "slug": "null-和-undefined"
        },
        {
          "level": 2,
          "title": "never",
          "slug": "never"
        },
        {
          "level": 2,
          "title": "object",
          "slug": "object"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "《TypeScript 从零实现 axios》",
      "frontmatter": {
        "pageComponent": {
          "name": "Catalogue",
          "data": {
            "key": "《TypeScript 从零实现 axios》",
            "imgUrl": "https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200105104632.png",
            "description": "学习使用 TypeScript 从零实现 axios 库"
          }
        },
        "title": "《TypeScript 从零实现 axios》",
        "date": "2020-01-05T10:40:48.000Z",
        "permalink": "/note/typescript-axios",
        "article": false,
        "comment": false,
        "editLink": false
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/40.%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/30.%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B.html",
      "relativePath": "01.前端/40.学习笔记/30.《TypeScript 从零实现 axios》.md",
      "key": "v-40e11413",
      "path": "/note/typescript-axios/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "flex布局案例-基础",
      "frontmatter": {
        "title": "flex布局案例-基础",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/ea6db1530c42ad51",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/02.flex%E5%B8%83%E5%B1%80%E6%A1%88%E4%BE%8B-%E5%9F%BA%E7%A1%80.html",
      "relativePath": "02.页面/20.CSS/02.flex布局案例-基础.md",
      "key": "v-c57f3c30",
      "path": "/pages/ea6db1530c42ad51/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "flex布局案例-骰子",
      "frontmatter": {
        "title": "flex布局案例-骰子",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/eff61bc8b4f4695d",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/03.flex%E5%B8%83%E5%B1%80%E6%A1%88%E4%BE%8B-%E9%AA%B0%E5%AD%90.html",
      "relativePath": "02.页面/20.CSS/03.flex布局案例-骰子.md",
      "key": "v-975c9250",
      "path": "/pages/eff61bc8b4f4695d/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "flex布局案例-圣杯布局",
      "frontmatter": {
        "title": "flex布局案例-圣杯布局",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/df9e7c7214fa5046",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/04.flex%E5%B8%83%E5%B1%80%E6%A1%88%E4%BE%8B-%E5%9C%A3%E6%9D%AF%E5%B8%83%E5%B1%80.html",
      "relativePath": "02.页面/20.CSS/04.flex布局案例-圣杯布局.md",
      "key": "v-5c01066c",
      "path": "/pages/df9e7c7214fa5046/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "flex布局案例-网格布局",
      "frontmatter": {
        "title": "flex布局案例-网格布局",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/85b5a3fe218a34b7",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/05.flex%E5%B8%83%E5%B1%80%E6%A1%88%E4%BE%8B-%E7%BD%91%E6%A0%BC%E5%B8%83%E5%B1%80.html",
      "relativePath": "02.页面/20.CSS/05.flex布局案例-网格布局.md",
      "key": "v-0155b363",
      "path": "/pages/85b5a3fe218a34b7/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "flex布局案例-输入框布局",
      "frontmatter": {
        "title": "flex布局案例-输入框布局",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/05cc577fb51c7998",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/06.flex%E5%B8%83%E5%B1%80%E6%A1%88%E4%BE%8B-%E8%BE%93%E5%85%A5%E6%A1%86%E5%B8%83%E5%B1%80.html",
      "relativePath": "02.页面/20.CSS/06.flex布局案例-输入框布局.md",
      "key": "v-eebe7670",
      "path": "/pages/05cc577fb51c7998/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "CSS3之transition过渡",
      "frontmatter": {
        "title": "CSS3之transition过渡",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/02d7f59d98d87409",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/07.CSS3%E4%B9%8Btransition%E8%BF%87%E6%B8%A1.html",
      "relativePath": "02.页面/20.CSS/07.CSS3之transition过渡.md",
      "key": "v-9119f0fc",
      "path": "/pages/02d7f59d98d87409/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "CSS3之animation动画",
      "frontmatter": {
        "title": "CSS3之animation动画",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/c2c0432138f6e042",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/08.CSS3%E4%B9%8Banimation%E5%8A%A8%E7%94%BB.html",
      "relativePath": "02.页面/20.CSS/08.CSS3之animation动画.md",
      "key": "v-7bd984f7",
      "path": "/pages/c2c0432138f6e042/",
      "headers": [
        {
          "level": 3,
          "title": "贝塞尔曲线 cubic-bezier(x1,y1,x2,y2)",
          "slug": "贝塞尔曲线-cubic-bezier-x1-y1-x2-y2"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "文字在一行或两行时超出显示省略号",
      "frontmatter": {
        "title": "文字在一行或两行时超出显示省略号",
        "date": "2020-02-23T15:07:08.000Z",
        "permalink": "/pages/42b66999cc27dc25",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/30.%E6%96%87%E5%AD%97%E5%9C%A8%E4%B8%80%E8%A1%8C%E6%88%96%E4%B8%A4%E8%A1%8C%E6%97%B6%E8%B6%85%E5%87%BA%E6%98%BE%E7%A4%BA%E7%9C%81%E7%95%A5%E5%8F%B7.html",
      "relativePath": "02.页面/20.CSS/30.文字在一行或两行时超出显示省略号.md",
      "key": "v-24aaa865",
      "path": "/pages/42b66999cc27dc25/",
      "headers": [
        {
          "level": 2,
          "title": "一行超出显示省略",
          "slug": "一行超出显示省略"
        },
        {
          "level": 2,
          "title": "两行（多行）超出显示省略号",
          "slug": "两行（多行）超出显示省略号"
        }
      ],
      "excerpt": "<h1 id=\"文字在一行或两行时超出显示省略号\"><a class=\"header-anchor\" href=\"#文字在一行或两行时超出显示省略号\">#</a> 文字在一行或两行时超出显示省略号</h1>\n<h2 id=\"一行超出显示省略\"><a class=\"header-anchor\" href=\"#一行超出显示省略\">#</a> 一行超出显示省略</h2>\n<!--beforebegin--><div class=\"language-css line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-css\"><code><span class=\"token property\">overflow</span><span class=\"token punctuation\">:</span> hidden<span class=\"token punctuation\">;</span>\n<span class=\"token property\">white-space</span><span class=\"token punctuation\">:</span> nowrap<span class=\"token punctuation\">;</span>\n<span class=\"token property\">text-overflow</span><span class=\"token punctuation\">:</span> ellipsis<span class=\"token punctuation\">;</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "从box-sizing属性入手，了解盒子模型",
      "frontmatter": {
        "title": "从box-sizing属性入手，了解盒子模型",
        "date": "2020-02-27T17:08:48.000Z",
        "permalink": "/pages/20a978023139589d",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/35.%E4%BB%8Ebox-sizing%E5%B1%9E%E6%80%A7%E5%85%A5%E6%89%8B%EF%BC%8C%E4%BA%86%E8%A7%A3%E7%9B%92%E5%AD%90%E6%A8%A1%E5%9E%8B.html",
      "relativePath": "02.页面/20.CSS/35.从box-sizing属性入手，了解盒子模型.md",
      "key": "v-b9464b90",
      "path": "/pages/20a978023139589d/",
      "headers": [
        {
          "level": 2,
          "title": "背景",
          "slug": "背景"
        },
        {
          "level": 2,
          "title": "什么是CSS 盒模型?",
          "slug": "什么是css-盒模型"
        },
        {
          "level": 2,
          "title": "标准盒模型",
          "slug": "标准盒模型"
        },
        {
          "level": 2,
          "title": "代替（IE）盒模型",
          "slug": "代替（ie）盒模型"
        },
        {
          "level": 2,
          "title": "box-sizing属性",
          "slug": "box-sizing属性"
        }
      ],
      "excerpt": "<h1 id=\"从box-sizing属性入手，了解盒子模型\"><a class=\"header-anchor\" href=\"#从box-sizing属性入手，了解盒子模型\">#</a> 从box-sizing属性入手，了解盒子模型</h1>\n<h2 id=\"背景\"><a class=\"header-anchor\" href=\"#背景\">#</a> 背景</h2>\n<p>先声明一下运用的场景，假如项目布局使用的是<strong>自适应</strong>的布局方式，div给出的宽度是<strong>百分比</strong>的形式，即占窗口宽度的100%，但边框<code>border</code>和内边距<code>padding</code>是用像素来表示的，此时就会造成一个问题是div总宽度超过窗口宽度。为了避免这种问题，可以使用属性<code>box-sizing:border-box</code>来把 <strong>标准盒模型</strong> 变成 <strong>代替(IE)盒模型</strong> ，从而使div的总宽度依然是100%</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "水平垂直居中的几种方式-案例",
      "frontmatter": {
        "title": "水平垂直居中的几种方式-案例",
        "date": "2020-03-13T16:13:43.000Z",
        "permalink": "/pages/cb7cb251adba4bf7",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/40.%E6%B0%B4%E5%B9%B3%E5%9E%82%E7%9B%B4%E5%B1%85%E4%B8%AD%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E5%BC%8F-%E6%A1%88%E4%BE%8B.html",
      "relativePath": "02.页面/20.CSS/40.水平垂直居中的几种方式-案例.md",
      "key": "v-fdc5c35c",
      "path": "/pages/cb7cb251adba4bf7/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "「布局技巧」图片未加载前自动撑开元素高度",
      "frontmatter": {
        "title": "「布局技巧」图片未加载前自动撑开元素高度",
        "date": "2020-02-22T16:37:10.000Z",
        "permalink": "/pages/3d52574260725aea",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/20.%E3%80%8C%E5%B8%83%E5%B1%80%E6%8A%80%E5%B7%A7%E3%80%8D%E5%9B%BE%E7%89%87%E6%9C%AA%E5%8A%A0%E8%BD%BD%E5%89%8D%E8%87%AA%E5%8A%A8%E6%92%91%E5%BC%80%E5%85%83%E7%B4%A0%E9%AB%98%E5%BA%A6.html",
      "relativePath": "02.页面/20.CSS/20.「布局技巧」图片未加载前自动撑开元素高度.md",
      "key": "v-6e88aaa2",
      "path": "/pages/3d52574260725aea/",
      "excerpt": "<h1 id=\"「布局技巧」图片未加载前自动撑开元素高度\"><a class=\"header-anchor\" href=\"#「布局技巧」图片未加载前自动撑开元素高度\">#</a> 「布局技巧」图片未加载前自动撑开元素高度</h1>\n<p>在移动端开发中，有一些元素是根据图片高度来自动撑开的 ，高度不能写死（如轮播图的外层元素）。在网络较慢的情况下，图片加载需要一些时间，此时该元素的高度没有被撑开，在网页布局上会有一些不想看到的效果。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "如何根据系统主题自动响应CSS深色模式",
      "frontmatter": {
        "title": "如何根据系统主题自动响应CSS深色模式",
        "date": "2020-03-31T14:06:26.000Z",
        "permalink": "/pages/5dde351274f1e39d",
        "sticky": 1,
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          "css"
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/45.%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E7%B3%BB%E7%BB%9F%E4%B8%BB%E9%A2%98%E8%87%AA%E5%8A%A8%E5%93%8D%E5%BA%94CSS%E6%B7%B1%E8%89%B2%E6%A8%A1%E5%BC%8F.html",
      "relativePath": "02.页面/20.CSS/45.如何根据系统主题自动响应CSS深色模式.md",
      "key": "v-cebd3712",
      "path": "/pages/5dde351274f1e39d/",
      "headers": [
        {
          "level": 2,
          "title": "CSS 深色模式 (Dark Mode)",
          "slug": "css-深色模式-dark-mode"
        },
        {
          "level": 2,
          "title": "添加深色模式自动响应",
          "slug": "添加深色模式自动响应"
        },
        {
          "level": 2,
          "title": "JS判断深色模式",
          "slug": "js判断深色模式"
        },
        {
          "level": 2,
          "title": "结论",
          "slug": "结论"
        }
      ],
      "excerpt": "<h1 id=\"如何根据系统主题自动响应css深色模式\"><a class=\"header-anchor\" href=\"#如何根据系统主题自动响应css深色模式\">#</a> 如何根据系统主题自动响应CSS深色模式</h1>\n<p align=\"center\">\n  <img src=\"https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200427163531.jpg\" width=\"500\">\n</p>\n<p>很多人喜欢选择APP或网站中的深色模式，也许他们更喜欢这样的外观，或者他们想让自己的眼睛免受疲劳。这篇文章将告诉你如何在网站中实现一个自动的CSS深色模式，根据访客的系统主题来自动响应。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "「css技巧」使用hover和attr()定制悬浮提示",
      "frontmatter": {
        "title": "「css技巧」使用hover和attr()定制悬浮提示",
        "date": "2020-04-18T12:14:09.000Z",
        "permalink": "/pages/941581927b4a38f8",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/50.%E3%80%8Ccss%E6%8A%80%E5%B7%A7%E3%80%8D%E4%BD%BF%E7%94%A8hover%E5%92%8Cattr()%E5%AE%9A%E5%88%B6%E6%82%AC%E6%B5%AE%E6%8F%90%E7%A4%BA.html",
      "relativePath": "02.页面/20.CSS/50.「css技巧」使用hover和attr()定制悬浮提示.md",
      "key": "v-3e9383d3",
      "path": "/pages/941581927b4a38f8/",
      "excerpt": "<h1 id=\"「css技巧」使用hover和attr-定制悬浮提示-demo\"><a class=\"header-anchor\" href=\"#「css技巧」使用hover和attr-定制悬浮提示-demo\">#</a> 「css技巧」使用hover和attr()定制悬浮提示-demo</h1>\n<iframe height=\"400\" style=\"width: 100%;\" scrolling=\"no\" title=\"【CSS：行为】使用:hover和attr()定制悬浮提示\" src=\"https://codepen.io/xugaoyi/embed/vYNKNaq?height=400&theme-id=light&default-tab=css,result\" frameborder=\"no\" allowtransparency=\"true\" allowfullscreen=\"true\" loading=\"lazy\">\n  See the Pen <a href='https://codepen.io/xugaoyi/pen/vYNKNaq'>【CSS：行为】使用:hover和attr()定制悬浮提示</a> by xugaoyi\n  (<a href='https://codepen.io/xugaoyi'>@xugaoyi</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "CSS-function汇总",
      "frontmatter": {
        "title": "CSS-function汇总",
        "date": "2020-05-12T09:36:44.000Z",
        "permalink": "/pages/3da0d7",
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/60.CSS-function%E6%B1%87%E6%80%BB.html",
      "relativePath": "02.页面/20.CSS/60.CSS-function汇总.md",
      "key": "v-fd823de6",
      "path": "/pages/3da0d7/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "混入(Mixins)",
      "frontmatter": {
        "title": "混入(Mixins)",
        "date": "2020-02-23T15:47:03.000Z",
        "permalink": "/pages/9f15c1a281d8bedb",
        "categories": [
          "页面",
          "stylus"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/25.stylus/10.%E6%B7%B7%E5%85%A5(Mixins).html",
      "relativePath": "02.页面/25.stylus/10.混入(Mixins).md",
      "key": "v-6163223f",
      "path": "/pages/9f15c1a281d8bedb/",
      "headers": [
        {
          "level": 2,
          "title": "混入(Mixins)",
          "slug": "混入-mixins"
        }
      ],
      "excerpt": "<h1 id=\"stylus混入-mixins\"><a class=\"header-anchor\" href=\"#stylus混入-mixins\">#</a> stylus混入(Mixins)</h1>\n<h2 id=\"混入-mixins\"><a class=\"header-anchor\" href=\"#混入-mixins\">#</a> 混入(Mixins)</h2>\n<p>混入和函数定义方法一致，但是应用却大相径庭。</p>\n<p>一个简单的混入应用，定义一个超出显示省略号的<code>ellipsis()</code>方法，在需要用到的地方只需插入这个方法，其样式会扩展并复制到选择器中。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "npm常用命令",
      "frontmatter": {
        "title": "npm常用命令",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/61f2f95fd7da14fd",
        "categories": [
          "技术",
          "技术文档"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/01.%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/03.npm%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.html",
      "relativePath": "03.技术/01.技术文档/03.npm常用命令.md",
      "key": "v-7aef9912",
      "path": "/pages/61f2f95fd7da14fd/",
      "headers": [
        {
          "level": 2,
          "title": "简介",
          "slug": "简介"
        },
        {
          "level": 2,
          "title": "常用命令",
          "slug": "常用命令"
        },
        {
          "level": 2,
          "title": "使用技巧",
          "slug": "使用技巧"
        },
        {
          "level": 2,
          "title": "npm发布包教程",
          "slug": "npm发布包教程"
        },
        {
          "level": 2,
          "title": "nrm的作用与使用",
          "slug": "nrm的作用与使用"
        }
      ],
      "excerpt": "<h1 id=\"npm常用命令\"><a class=\"header-anchor\" href=\"#npm常用命令\">#</a> npm常用命令</h1>\n<h2 id=\"简介\"><a class=\"header-anchor\" href=\"#简介\">#</a> 简介</h2>\n<p>npm是跟随node一起安装的包（模块）管理器。常见的使用场景有以下几种：</p>\n<ul>\n<li>允许用户从npm服务器下载别人编写的第三方包到本地使用。</li>\n<li>允许用户从npm服务器下载并安装别人编写的命令行程序到本地使用。</li>\n<li>允许用户将自己编写的包或命令行程序上传到npm服务器供别人使用。</li>\n</ul>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "yaml语言教程",
      "frontmatter": {
        "title": "yaml语言教程",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/4e8444e2d534d14f",
        "categories": [
          "技术",
          "技术文档"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/01.%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/15.yaml%E8%AF%AD%E8%A8%80%E6%95%99%E7%A8%8B.html",
      "relativePath": "03.技术/01.技术文档/15.yaml语言教程.md",
      "key": "v-42e37b31",
      "path": "/pages/4e8444e2d534d14f/",
      "headers": [
        {
          "level": 2,
          "title": "简介",
          "slug": "简介"
        },
        {
          "level": 2,
          "title": "基本语法",
          "slug": "基本语法"
        },
        {
          "level": 2,
          "title": "数据类型",
          "slug": "数据类型"
        },
        {
          "level": 2,
          "title": "YAML 对象",
          "slug": "yaml-对象"
        },
        {
          "level": 2,
          "title": "YAML 数组",
          "slug": "yaml-数组"
        },
        {
          "level": 2,
          "title": "复合结构（对象和数组组合）",
          "slug": "复合结构（对象和数组组合）"
        },
        {
          "level": 2,
          "title": "纯量",
          "slug": "纯量"
        },
        {
          "level": 2,
          "title": "转换数据格式",
          "slug": "转换数据格式"
        },
        {
          "level": 2,
          "title": "锚点引用",
          "slug": "锚点引用"
        }
      ],
      "excerpt": "<h1 id=\"yaml语言教程\"><a class=\"header-anchor\" href=\"#yaml语言教程\">#</a> yaml语言教程</h1>\n<h2 id=\"简介\"><a class=\"header-anchor\" href=\"#简介\">#</a> 简介</h2>\n<p>YAML 是 &quot;YAML Ain't a Markup Language&quot;（YAML 不是一种标记语言）的递归缩写。在开发的这种语言时，YAML 的意思其实是：&quot;Yet Another Markup Language&quot;（仍是一种标记语言）。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "GitHub高级搜索技巧",
      "frontmatter": {
        "title": "GitHub高级搜索技巧",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/4c778760be26d8b3",
        "categories": [
          "技术",
          "GitHub技巧"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/02.GitHub%E6%8A%80%E5%B7%A7/01.GitHub%E9%AB%98%E7%BA%A7%E6%90%9C%E7%B4%A2%E6%8A%80%E5%B7%A7.html",
      "relativePath": "03.技术/02.GitHub技巧/01.GitHub高级搜索技巧.md",
      "key": "v-1f80f9bd",
      "path": "/pages/4c778760be26d8b3/",
      "excerpt": "<h1 id=\"github高级搜索技巧\"><a class=\"header-anchor\" href=\"#github高级搜索技巧\">#</a> GitHub高级搜索技巧</h1>\n<p><code>in:name &lt;关键字&gt;</code>\n仓库名称带关键字查询</p>\n<p><code>in:description &lt;关键字&gt;</code>\n仓库描述带关键字查询</p>\n<p><code>in:readme &lt;关键字&gt;</code>\nREADME文件带关键字查询</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "GitHub Actions 定时运行代码：每天定时百度链接推送",
      "frontmatter": {
        "title": "GitHub Actions 定时运行代码：每天定时百度链接推送",
        "date": "2019-12-30T21:23:00.000Z",
        "permalink": "/pages/f44d2f9ad04ab8d3",
        "categories": [
          "技术",
          "GitHub技巧"
        ],
        "tags": [
          "github",
          "博客"
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/02.GitHub%E6%8A%80%E5%B7%A7/03.GitHub%20Actions%20%E5%AE%9A%E6%97%B6%E8%BF%90%E8%A1%8C%E4%BB%A3%E7%A0%81%EF%BC%9A%E6%AF%8F%E5%A4%A9%E5%AE%9A%E6%97%B6%E7%99%BE%E5%BA%A6%E9%93%BE%E6%8E%A5%E6%8E%A8%E9%80%81.html",
      "relativePath": "03.技术/02.GitHub技巧/03.GitHub Actions 定时运行代码：每天定时百度链接推送.md",
      "key": "v-5e4c5cf3",
      "path": "/pages/f44d2f9ad04ab8d3/",
      "headers": [
        {
          "level": 2,
          "title": "百度主动链接推送",
          "slug": "百度主动链接推送"
        },
        {
          "level": 2,
          "title": "自动生成urls.txt",
          "slug": "自动生成urls-txt"
        },
        {
          "level": 2,
          "title": "GitHub Actions 定时运行代码",
          "slug": "github-actions-定时运行代码"
        },
        {
          "level": 3,
          "title": "配置 GitHub Actions",
          "slug": "配置-github-actions"
        },
        {
          "level": 3,
          "title": "baiduPush命令在package.json配置",
          "slug": "baidupush命令在package-json配置"
        },
        {
          "level": 3,
          "title": "baiduPush.sh执行百度推送命令",
          "slug": "baidupush-sh执行百度推送命令"
        },
        {
          "level": 2,
          "title": "相关文章",
          "slug": "相关文章"
        }
      ],
      "excerpt": "<h1 id=\"github-actions-定时运行代码：每天定时百度链接推送\"><a class=\"header-anchor\" href=\"#github-actions-定时运行代码：每天定时百度链接推送\">#</a> GitHub Actions 定时运行代码：每天定时百度链接推送</h1>\n<p>博客上线已经有些日子了，却发现百度迟迟没有收录我的博客页面，在百度推送工具当中除了有自动推送的代码嵌入网站之外，还有一个实时的主动推送更高效。</p>\n<p>最近刚好了解到GitHub Actions的定时运行代码功能，可以用它来每天自动运行命令生成所有博客链接并进行一次性推送给百度。</p>\n<p>GitHub Actions 是一个 CI/CD（持续集成/持续部署）工具，但也可用作代码运行环境。<strong>功能非常强大，能够玩出许多花样。</strong></p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "GitHub Actions 实现自动部署静态博客",
      "frontmatter": {
        "title": "GitHub Actions 实现自动部署静态博客",
        "date": "2019-12-27T11:44:41.000Z",
        "permalink": "/pages/6b9d359ec5aa5019",
        "categories": [
          "技术",
          "GitHub技巧"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/02.GitHub%E6%8A%80%E5%B7%A7/02.GitHub%20Actions%20%E5%AE%9E%E7%8E%B0%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%E9%9D%99%E6%80%81%E5%8D%9A%E5%AE%A2.html",
      "relativePath": "03.技术/02.GitHub技巧/02.GitHub Actions 实现自动部署静态博客.md",
      "key": "v-2ae8f06d",
      "path": "/pages/6b9d359ec5aa5019/",
      "headers": [
        {
          "level": 2,
          "title": "前言",
          "slug": "前言"
        },
        {
          "level": 2,
          "title": "实现",
          "slug": "实现"
        },
        {
          "level": 2,
          "title": "相关文章",
          "slug": "相关文章"
        }
      ],
      "excerpt": "<h1 id=\"github-actions-实现自动部署静态博客\"><a class=\"header-anchor\" href=\"#github-actions-实现自动部署静态博客\">#</a> GitHub Actions 实现自动部署静态博客</h1>\n<h2 id=\"前言\"><a class=\"header-anchor\" href=\"#前言\">#</a> 前言</h2>\n<p>我使用vuepress搭建了一个静态博客，挂在了Github pages和<a href=\"https://dev.tencent.com/\" target=\"_blank\" rel=\"noopener noreferrer\">Coding pages<OutboundLink/></a>上面。</p>\n<p>coding pages在国内的访问速度比github pages要快很多，而且还可以被百度收录。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "GitHub加速下载项目的方法",
      "frontmatter": {
        "title": "GitHub加速下载项目的方法",
        "date": "2020-03-09T10:28:09.000Z",
        "permalink": "/pages/95331c6a9613faf8",
        "categories": [
          "技术",
          "GitHub技巧"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/02.GitHub%E6%8A%80%E5%B7%A7/10.GitHub%E5%8A%A0%E9%80%9F%E4%B8%8B%E8%BD%BD%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%96%B9%E6%B3%95.html",
      "relativePath": "03.技术/02.GitHub技巧/10.GitHub加速下载项目的方法.md",
      "key": "v-47a3b857",
      "path": "/pages/95331c6a9613faf8/",
      "headers": [
        {
          "level": 2,
          "title": "利用码云来转接做下载加速",
          "slug": "利用码云来转接做下载加速"
        }
      ],
      "excerpt": "<h1 id=\"github加速下载项目的方法\"><a class=\"header-anchor\" href=\"#github加速下载项目的方法\">#</a> GitHub加速下载项目的方法</h1>\n<p>国内在github上克隆项目总是异常的慢，据我多次克隆观察，下载速度最快就20k/s左右，特别是在克隆比较大的项目时简直慢得无法忍受！下面介绍一种加载克隆项目的方法。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "nodejs递归读取所有文件",
      "frontmatter": {
        "title": "nodejs递归读取所有文件",
        "date": "2019-12-26T15:57:32.000Z",
        "permalink": "/pages/117708e0af7f0bd9",
        "categories": [
          "技术",
          "Nodejs"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/03.Nodejs/01.nodejs%E9%80%92%E5%BD%92%E8%AF%BB%E5%8F%96%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6.html",
      "relativePath": "03.技术/03.Nodejs/01.nodejs递归读取所有文件.md",
      "key": "v-a16f8dc0",
      "path": "/pages/117708e0af7f0bd9/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "解决百度无法收录搭建在GitHub上的个人博客的问题",
      "frontmatter": {
        "title": "解决百度无法收录搭建在GitHub上的个人博客的问题",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/41f87d890d0a02af",
        "categories": [
          "技术",
          "博客搭建"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/04.%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/01.%E8%A7%A3%E5%86%B3%E7%99%BE%E5%BA%A6%E6%97%A0%E6%B3%95%E6%94%B6%E5%BD%95%E6%90%AD%E5%BB%BA%E5%9C%A8GitHub%E4%B8%8A%E7%9A%84%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2%E7%9A%84%E9%97%AE%E9%A2%98.html",
      "relativePath": "03.技术/04.博客搭建/01.解决百度无法收录搭建在GitHub上的个人博客的问题.md",
      "key": "v-a322eb70",
      "path": "/pages/41f87d890d0a02af/",
      "headers": [
        {
          "level": 2,
          "title": "背景",
          "slug": "背景"
        },
        {
          "level": 2,
          "title": "解决方案",
          "slug": "解决方案"
        },
        {
          "level": 3,
          "title": "如何知道百度有没有收录？",
          "slug": "如何知道百度有没有收录？"
        },
        {
          "level": 2,
          "title": "相关文章",
          "slug": "相关文章"
        }
      ],
      "excerpt": "<h1 id=\"解决百度无法收录搭建在github上的静态博客的问题\"><a class=\"header-anchor\" href=\"#解决百度无法收录搭建在github上的静态博客的问题\">#</a> 解决百度无法收录搭建在GitHub上的静态博客的问题</h1>\n<div class=\"custom-block warning\"><p class=\"custom-block-title\">注意</p>\n<p>如果你正在寻找本博客的搭建文档，博主建议您查看这个仓库的<a href=\"https://github.com/xugaoyi/vuepress-theme-vdoing\" target=\"_blank\" rel=\"noopener noreferrer\">README<OutboundLink/></a>。</p>\n</div>\n<h2 id=\"背景\"><a class=\"header-anchor\" href=\"#背景\">#</a> 背景</h2>\n<p>由于GitHub禁止百度爬虫访问，造成托管在GitHub Pages上的博客无法被百度收录。相关问题可以通过百度站长平台的<code>抓取诊断</code>再现，每次都是403 Forbidden的错误。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "使用Gitalk实现静态博客无后台评论系统",
      "frontmatter": {
        "title": "使用Gitalk实现静态博客无后台评论系统",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/1da0bf9a988eafe5",
        "categories": [
          "技术",
          "博客搭建"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/04.%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/02.%E4%BD%BF%E7%94%A8Gitalk%E5%AE%9E%E7%8E%B0%E9%9D%99%E6%80%81%E5%8D%9A%E5%AE%A2%E6%97%A0%E5%90%8E%E5%8F%B0%E8%AF%84%E8%AE%BA%E7%B3%BB%E7%BB%9F.html",
      "relativePath": "03.技术/04.博客搭建/02.使用Gitalk实现静态博客无后台评论系统.md",
      "key": "v-2de41b68",
      "path": "/pages/1da0bf9a988eafe5/",
      "headers": [
        {
          "level": 2,
          "title": "前言",
          "slug": "前言"
        },
        {
          "level": 2,
          "title": "准备",
          "slug": "准备"
        },
        {
          "level": 2,
          "title": "实现",
          "slug": "实现"
        },
        {
          "level": 3,
          "title": "安装",
          "slug": "安装"
        },
        {
          "level": 3,
          "title": "使用",
          "slug": "使用"
        },
        {
          "level": 3,
          "title": "BUG修复",
          "slug": "bug修复"
        }
      ],
      "excerpt": "<h1 id=\"使用gitalk实现静态博客无后台评论系统\"><a class=\"header-anchor\" href=\"#使用gitalk实现静态博客无后台评论系统\">#</a> 使用Gitalk实现静态博客无后台评论系统</h1>\n<h2 id=\"前言\"><a class=\"header-anchor\" href=\"#前言\">#</a> 前言</h2>\n<p>Gitalk，一个基于 Github Issue 和 Preact 开发的评论插件。</p>\n<p>下面我们来用它在vuepress搭建的博客中搭建评论区吧</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床",
      "frontmatter": {
        "title": "GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床",
        "date": "2020-01-03T12:55:43.000Z",
        "permalink": "/pages/a5f73af5185fdf0a",
        "categories": [
          "技术",
          "博客搭建"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/04.%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/03.GitHub%20+%20jsDelivr%20+%20TinyPNG+%20PicGo%20%E6%89%93%E9%80%A0%E7%A8%B3%E5%AE%9A%E5%BF%AB%E9%80%9F%E3%80%81%E9%AB%98%E6%95%88%E5%85%8D%E8%B4%B9%E5%9B%BE%E5%BA%8A.html",
      "relativePath": "03.技术/04.博客搭建/03.GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床.md",
      "key": "v-4543863e",
      "path": "/pages/a5f73af5185fdf0a/",
      "headers": [
        {
          "level": 2,
          "title": "前言",
          "slug": "前言"
        },
        {
          "level": 2,
          "title": "图床打造",
          "slug": "图床打造"
        }
      ],
      "excerpt": "<h1 id=\"github-jsdelivr-tinypng-picgo-打造稳定快速、高效免费图床\"><a class=\"header-anchor\" href=\"#github-jsdelivr-tinypng-picgo-打造稳定快速、高效免费图床\">#</a> GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床</h1>\n<h2 id=\"前言\"><a class=\"header-anchor\" href=\"#前言\">#</a> 前言</h2>\n<p><strong>Q：为什么要使用图床呢？什么是图床？</strong></p>\n<p>A：写博客文章时，图片的上传和存放是一个问题，有的朋友可能会把图片放到和博客同一个仓库当中，使用相对路径来引用，这样后期维护起来会比较麻烦。还有的朋友会在不同的平台发布同一篇文章，这样一来每个平台都要上传图片，为了解决这些问题，比较推荐的做法是把图片统一上传到一个在线的第三方静态资源库中，我们把这个资源库称为图床，其返回一个图片的URL，使用<code>markdown+图片url</code>的方式写作文章，一次编写，到处使用~</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "vdoing主题效果图",
      "frontmatter": {
        "title": "vdoing主题效果图",
        "date": "2020-04-08T11:27:22.000Z",
        "permalink": "/pages/d557b9a89a215d2e",
        "article": false
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/04.%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/10.vdoing%E4%B8%BB%E9%A2%98%E6%95%88%E6%9E%9C%E5%9B%BE.html",
      "relativePath": "03.技术/04.博客搭建/10.vdoing主题效果图.md",
      "key": "v-e657df1e",
      "path": "/pages/d557b9a89a215d2e/",
      "headers": [
        {
          "level": 2,
          "title": "PC端",
          "slug": "pc端"
        },
        {
          "level": 2,
          "title": "首页个性化大图",
          "slug": "首页个性化大图"
        },
        {
          "level": 2,
          "title": "深色模式和阅读模式",
          "slug": "深色模式和阅读模式"
        },
        {
          "level": 2,
          "title": "移动端",
          "slug": "移动端"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "提高记忆的技巧",
      "frontmatter": {
        "title": "提高记忆的技巧",
        "date": "2020-01-03T14:34:48.000Z",
        "permalink": "/pages/996822b2a2ca6e3b",
        "categories": [
          "更多",
          "学习"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/04.%E6%9B%B4%E5%A4%9A/01.%E5%AD%A6%E4%B9%A0/03.%E6%8F%90%E9%AB%98%E8%AE%B0%E5%BF%86%E7%9A%84%E6%8A%80%E5%B7%A7.html",
      "relativePath": "04.更多/01.学习/03.提高记忆的技巧.md",
      "key": "v-4105d9dd",
      "path": "/pages/996822b2a2ca6e3b/",
      "excerpt": "<h1 id=\"提高记忆的技巧\"><a class=\"header-anchor\" href=\"#提高记忆的技巧\">#</a> 提高记忆的技巧</h1>\n<ol>\n<li><strong>多个感官并用</strong>\n记忆时调用一切感官。没人的话可以大声阅读，有人的话可以默念，轻微摇晃手指等，有助于保持专注。</li>\n</ol>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "处理问题的思路",
      "frontmatter": {
        "title": "处理问题的思路",
        "date": "2020-01-03T14:36:02.000Z",
        "permalink": "/pages/9ba2b8fb13de1957",
        "categories": [
          "更多",
          "学习"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/04.%E6%9B%B4%E5%A4%9A/01.%E5%AD%A6%E4%B9%A0/05.%E5%A4%84%E7%90%86%E9%97%AE%E9%A2%98%E7%9A%84%E6%80%9D%E8%B7%AF.html",
      "relativePath": "04.更多/01.学习/05.处理问题的思路.md",
      "key": "v-d0428f1e",
      "path": "/pages/9ba2b8fb13de1957/",
      "headers": [
        {
          "level": 2,
          "title": "工作中遇到问题？",
          "slug": "工作中遇到问题？"
        },
        {
          "level": 2,
          "title": "这个问题我该怎么解决呢？",
          "slug": "这个问题我该怎么解决呢？"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "搜索引擎使用技巧",
      "frontmatter": {
        "title": "搜索引擎使用技巧",
        "date": "2020-05-24T11:44:19.000Z",
        "permalink": "/pages/ce818a",
        "categories": [
          "更多",
          "学习"
        ],
        "tags": [
          "搜索技巧"
        ]
      },
      "regularPath": "/04.%E6%9B%B4%E5%A4%9A/01.%E5%AD%A6%E4%B9%A0/10.%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7.html",
      "relativePath": "04.更多/01.学习/10.搜索引擎使用技巧.md",
      "key": "v-3ebb2ea8",
      "path": "/pages/ce818a/",
      "headers": [
        {
          "level": 3,
          "title": "技巧1：排除干扰项",
          "slug": "技巧1：排除干扰项"
        },
        {
          "level": 3,
          "title": "技巧2：精确搜索",
          "slug": "技巧2：精确搜索"
        },
        {
          "level": 3,
          "title": "技巧3：指定网站内搜索",
          "slug": "技巧3：指定网站内搜索"
        },
        {
          "level": 3,
          "title": "技巧4：指定文件格式",
          "slug": "技巧4：指定文件格式"
        },
        {
          "level": 3,
          "title": "技巧5：指定在标题搜索",
          "slug": "技巧5：指定在标题搜索"
        },
        {
          "level": 3,
          "title": "技巧6：指定在内容中搜索",
          "slug": "技巧6：指定在内容中搜索"
        },
        {
          "level": 3,
          "title": "技巧7：多种搜索技巧叠加使用",
          "slug": "技巧7：多种搜索技巧叠加使用"
        },
        {
          "level": 3,
          "title": "注意事项",
          "slug": "注意事项"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "自律小建议",
      "frontmatter": {
        "title": "自律小建议",
        "date": "2020-01-03T14:35:18.000Z",
        "permalink": "/pages/c3f302a03c8daf79",
        "categories": [
          "更多",
          "学习"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/04.%E6%9B%B4%E5%A4%9A/01.%E5%AD%A6%E4%B9%A0/04.%E8%87%AA%E5%BE%8B%E5%B0%8F%E5%BB%BA%E8%AE%AE.html",
      "relativePath": "04.更多/01.学习/04.自律小建议.md",
      "key": "v-4a5fa4c7",
      "path": "/pages/c3f302a03c8daf79/",
      "excerpt": "<h1 id=\"自律小建议\"><a class=\"header-anchor\" href=\"#自律小建议\">#</a> 自律小建议</h1>\n<ul>\n<li><strong>培养专注</strong>\n<ul>\n<li>练习冥想、瑜伽等</li>\n</ul>\n</li>\n<li><strong>排除外界干扰</strong>\n<ul>\n<li>手机调到勿扰，在图书馆学习等</li>\n</ul>\n</li>\n</ul>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "友情链接",
      "frontmatter": {
        "title": "友情链接",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/friends",
        "article": false,
        "sidebar": false
      },
      "regularPath": "/04.%E6%9B%B4%E5%A4%9A/99.%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5.html",
      "relativePath": "04.更多/99.友情链接.md",
      "key": "v-5ad206b8",
      "path": "/friends/",
      "headers": [
        {
          "level": 3,
          "title": "友链申请",
          "slug": "友链申请"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "关于",
      "frontmatter": {
        "title": "关于",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/about",
        "sidebar": false,
        "article": false
      },
      "regularPath": "/05.%E5%85%B3%E4%BA%8E/01.%E5%85%B3%E4%BA%8E.html",
      "relativePath": "05.关于/01.关于.md",
      "key": "v-085ea78e",
      "path": "/about/",
      "headers": [
        {
          "level": 3,
          "title": "📚Blog",
          "slug": "📚blog"
        },
        {
          "level": 3,
          "title": "🐐Me",
          "slug": "🐐me"
        },
        {
          "level": 2,
          "title": "✉️ 联系",
          "slug": "联系"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "英语基础",
      "frontmatter": {
        "title": "英语基础",
        "date": "2020-01-13T11:55:53.000Z",
        "permalink": "/pages/6f9525eecdd51d5a",
        "categories": [
          "更多",
          "英语"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/04.%E6%9B%B4%E5%A4%9A/04.%E8%8B%B1%E8%AF%AD/01.%E8%8B%B1%E8%AF%AD%E5%9F%BA%E7%A1%80.html",
      "relativePath": "04.更多/04.英语/01.英语基础.md",
      "key": "v-687ba3e8",
      "path": "/pages/6f9525eecdd51d5a/",
      "headers": [
        {
          "level": 2,
          "title": "1.基础",
          "slug": "_1-基础"
        },
        {
          "level": 3,
          "title": "拼法",
          "slug": "拼法"
        },
        {
          "level": 3,
          "title": "拥有",
          "slug": "拥有"
        },
        {
          "level": 3,
          "title": "你喜欢什么？",
          "slug": "你喜欢什么？"
        },
        {
          "level": 3,
          "title": "提问 or",
          "slug": "提问-or"
        },
        {
          "level": 3,
          "title": "英语发音 -er",
          "slug": "英语发音-er"
        },
        {
          "level": 2,
          "title": "2.介绍",
          "slug": "_2-介绍"
        },
        {
          "level": 3,
          "title": "动词 to be",
          "slug": "动词-to-be"
        },
        {
          "level": 2,
          "title": "3.问候",
          "slug": "_3-问候"
        },
        {
          "level": 3,
          "title": "首字母大写",
          "slug": "首字母大写"
        },
        {
          "level": 3,
          "title": "提问-改变to be词序",
          "slug": "提问-改变to-be词序"
        },
        {
          "level": 3,
          "title": "怎么样？",
          "slug": "怎么样？"
        },
        {
          "level": 2,
          "title": "4.餐厅",
          "slug": "_4-餐厅"
        },
        {
          "level": 3,
          "title": "I want a sandwich",
          "slug": "i-want-a-sandwich"
        },
        {
          "level": 3,
          "title": "Please",
          "slug": "please"
        },
        {
          "level": 2,
          "title": "5.家庭",
          "slug": "_5-家庭"
        },
        {
          "level": 3,
          "title": "兄弟姐妹",
          "slug": "兄弟姐妹"
        },
        {
          "level": 3,
          "title": "动词 （to be 代替 很）",
          "slug": "动词-（to-be-代替-很）"
        },
        {
          "level": 3,
          "title": "英语发音 r、v、th",
          "slug": "英语发音-r、v、th"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "一个完美主义者的自我救赎",
      "frontmatter": {
        "title": "一个完美主义者的自我救赎",
        "date": "2020-01-16T15:15:27.000Z",
        "permalink": "/pages/2d615df9a36a98ed",
        "categories": [
          "更多",
          "心情杂货"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/04.%E6%9B%B4%E5%A4%9A/05.%E5%BF%83%E6%83%85%E6%9D%82%E8%B4%A7/01.%E4%B8%80%E4%B8%AA%E5%AE%8C%E7%BE%8E%E4%B8%BB%E4%B9%89%E8%80%85%E7%9A%84%E8%87%AA%E6%88%91%E6%95%91%E8%B5%8E.html",
      "relativePath": "04.更多/05.心情杂货/01.一个完美主义者的自我救赎.md",
      "key": "v-75703d29",
      "path": "/pages/2d615df9a36a98ed/",
      "excerpt": "<h1 id=\"一个完美主义者的自我救赎\"><a class=\"header-anchor\" href=\"#一个完美主义者的自我救赎\">#</a> 一个完美主义者的自我救赎</h1>\n<p>最近，看到一个心理测试题是测试你是否有完美主义：</p>\n<blockquote>\n<p>（1）你是不是经常为自己设定目标，而且最终往往达不到那些目标？</p>\n<p>（2）当一件事件做得不够好时，你是否有再试一次的想法？</p>\n<p>（3）你是否休息时仍想着学习、工作、或者其他还没有解决的事？</p>\n<p>（4）如果遇到别人说话或打岔，破坏了你的注意力，你是否觉得不太高兴？</p>\n<p>（5）你是否常常会在事后想，如果当时能换成另一种方式来解决，也许会更加理想？</p>\n</blockquote>\n<p>如果上面的问题，你的回答大部分是肯定的，那么你就有完美主义倾向。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "资源",
      "frontmatter": {
        "title": "资源",
        "date": "2020-04-12T08:58:56.000Z",
        "permalink": "/pages/eee83a9211a70f9d",
        "article": false
      },
      "regularPath": "/06.%E6%94%B6%E8%97%8F%E5%A4%B9/02.%E8%B5%84%E6%BA%90.html",
      "relativePath": "06.收藏夹/02.资源.md",
      "key": "v-bafb2a26",
      "path": "/pages/eee83a9211a70f9d/",
      "headers": [
        {
          "level": 2,
          "title": "前端常用",
          "slug": "前端常用"
        },
        {
          "level": 2,
          "title": "Vue",
          "slug": "vue"
        },
        {
          "level": 2,
          "title": "移动端",
          "slug": "移动端"
        },
        {
          "level": 2,
          "title": "Node",
          "slug": "node"
        },
        {
          "level": 2,
          "title": "博客",
          "slug": "博客"
        },
        {
          "level": 2,
          "title": "vuepress插件",
          "slug": "vuepress插件"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "归档",
      "frontmatter": {
        "archivesPage": true,
        "title": "归档",
        "permalink": "/archives/",
        "article": false
      },
      "regularPath": "/@pages/archivesPage.html",
      "relativePath": "@pages/archivesPage.md",
      "key": "v-43bebef8",
      "path": "/archives/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "分类",
      "frontmatter": {
        "categoriesPage": true,
        "title": "分类",
        "permalink": "/categories/",
        "article": false
      },
      "regularPath": "/@pages/categoriesPage.html",
      "relativePath": "@pages/categoriesPage.md",
      "key": "v-10940464",
      "path": "/categories/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "你知道的越多，不知道的也就越多",
      "frontmatter": {
        "title": "你知道的越多，不知道的也就越多",
        "date": "2020-05-06T15:52:40.000Z",
        "permalink": "/pages/f2e63f",
        "sidebar": "auto",
        "categories": [
          "随笔"
        ],
        "tags": [
          "学习",
          "知识",
          "鸡汤"
        ]
      },
      "regularPath": "/_posts/%E9%9A%8F%E7%AC%94/%E4%BD%A0%E7%9F%A5%E9%81%93%E7%9A%84%E8%B6%8A%E5%A4%9A%EF%BC%8C%E4%B8%8D%E7%9F%A5%E9%81%93%E7%9A%84%E4%B9%9F%E5%B0%B1%E8%B6%8A%E5%A4%9A.html",
      "relativePath": "_posts/随笔/你知道的越多，不知道的也就越多.md",
      "key": "v-27f109ee",
      "path": "/pages/f2e63f/",
      "excerpt": "<p>不知道大家有没有发现，我们身边经常有这样的人，他们越是有能力的，越是有知识的，越是低调，越是谦逊，因为他们深知，知道的越多，不知道的也就越多。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "标签",
      "frontmatter": {
        "tagsPage": true,
        "title": "标签",
        "permalink": "/tags/",
        "article": false
      },
      "regularPath": "/@pages/tagsPage.html",
      "relativePath": "@pages/tagsPage.md",
      "key": "v-318e7504",
      "path": "/tags/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Home",
      "frontmatter": {
        "home": true,
        "heroText": "F.Y blog",
        "tagline": "Web前端技术博客，有吃有喝有电脑，致敬每个爱生活的你。",
        "features": [
          {
            "title": "前端",
            "details": "JavaScript、ES6、Vue框架等前端技术",
            "link": "/web/",
            "imgUrl": "/img/web.png"
          },
          {
            "title": "页面",
            "details": "html(5)/css(3)，前端页面相关技术",
            "link": "/ui/",
            "imgUrl": "/img/ui.png"
          },
          {
            "title": "技术",
            "details": "技术文档、教程、技巧、总结等文章",
            "link": "/technology/",
            "imgUrl": "/img/other.png"
          }
        ]
      },
      "regularPath": "/",
      "relativePath": "index.md",
      "key": "v-7fbc94f0",
      "path": "/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "拥抱生活，拥抱快乐",
      "frontmatter": {
        "title": "拥抱生活，拥抱快乐",
        "date": "2020-06-26T20:40:38.000Z",
        "permalink": "/pages/cd8bde/",
        "sidebar": "auto",
        "categories": [
          "随笔"
        ],
        "tags": [
          "鸡汤"
        ]
      },
      "regularPath": "/_posts/%E9%9A%8F%E7%AC%94/%E6%8B%A5%E6%8A%B1%E7%94%9F%E6%B4%BB%EF%BC%8C%E6%8B%A5%E6%8A%B1%E5%BF%AB%E4%B9%90.html",
      "relativePath": "_posts/随笔/拥抱生活，拥抱快乐.md",
      "key": "v-a070b0ee",
      "path": "/pages/cd8bde/",
      "excerpt": "<p>生活在后现代的今天，很多人都有一种虚无感，认为人生没有意义。但是，人生不可能没有意义，因为当你认为没有意义的时候，一定有一个与之相对应的概念叫有意义。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Mixin",
      "frontmatter": {
        "title": "Mixin",
        "date": "2020-02-09T16:00:30.000Z",
        "permalink": "/pages/6a8e2dc558da1b39",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/32.Mixin.html",
      "relativePath": "《ES6 教程》笔记/32.Mixin.md",
      "key": "v-5f8f7b0e",
      "path": "/pages/6a8e2dc558da1b39/",
      "headers": [
        {
          "level": 2,
          "title": "含义",
          "slug": "含义"
        },
        {
          "level": 2,
          "title": "Trait",
          "slug": "trait"
        }
      ],
      "excerpt": "<h1 id=\"mixin\"><a class=\"header-anchor\" href=\"#mixin\">#</a> Mixin</h1>\n<p>JavaScript 语言的设计是单一继承，即子类只能继承一个父类，不允许继承多个父类。这种设计保证了对象继承的层次结构是树状的，而不是复杂的<a href=\"https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem\" target=\"_blank\" rel=\"noopener noreferrer\">网状结构<OutboundLink/></a>。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "函数式编程",
      "frontmatter": {
        "title": "函数式编程",
        "date": "2020-02-09T16:00:30.000Z",
        "permalink": "/pages/1cf50330655efc69",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/31.%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B.html",
      "relativePath": "《ES6 教程》笔记/31.函数式编程.md",
      "key": "v-26de14be",
      "path": "/pages/1cf50330655efc69/",
      "headers": [
        {
          "level": 2,
          "title": "柯里化",
          "slug": "柯里化"
        },
        {
          "level": 2,
          "title": "函数合成",
          "slug": "函数合成"
        },
        {
          "level": 2,
          "title": "参数倒置",
          "slug": "参数倒置"
        },
        {
          "level": 2,
          "title": "执行边界",
          "slug": "执行边界"
        },
        {
          "level": 2,
          "title": "队列操作",
          "slug": "队列操作"
        },
        {
          "level": 2,
          "title": "合并操作",
          "slug": "合并操作"
        },
        {
          "level": 2,
          "title": "配对操作",
          "slug": "配对操作"
        },
        {
          "level": 2,
          "title": "参考链接",
          "slug": "参考链接"
        }
      ],
      "excerpt": "<h1 id=\"函数式编程\"><a class=\"header-anchor\" href=\"#函数式编程\">#</a> 函数式编程</h1>\n<p>JavaScript 语言从一诞生，就具有函数式编程的烙印。它将函数作为一种独立的数据类型，与其他数据类型处于完全平等的地位。在 JavaScript 语言中，你可以采用面向对象编程，也可以采用函数式编程。有人甚至说，JavaScript 是有史以来第一种被大规模采用的函数式编程语言。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "安装 TypeScript",
      "frontmatter": {
        "title": "安装 TypeScript",
        "date": "2020-01-05T10:15:07.000Z",
        "permalink": "/pages/064e0f7b6b6142c8",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "初识 TypeScript"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/01.%E5%88%9D%E8%AF%86%20TypeScript/02.%E5%AE%89%E8%A3%85%20TypeScript.html",
      "relativePath": "《TypeScript 从零实现 axios》/01.初识 TypeScript/02.安装 TypeScript.md",
      "key": "v-f5f82018",
      "path": "/pages/064e0f7b6b6142c8/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "编写第一个 TypeScript 程序",
      "frontmatter": {
        "title": "编写第一个 TypeScript 程序",
        "date": "2020-01-05T10:15:07.000Z",
        "permalink": "/pages/c85249f40e7a3517",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "初识 TypeScript"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/01.%E5%88%9D%E8%AF%86%20TypeScript/03.%E7%BC%96%E5%86%99%E7%AC%AC%E4%B8%80%E4%B8%AA%20TypeScript%20%E7%A8%8B%E5%BA%8F.html",
      "relativePath": "《TypeScript 从零实现 axios》/01.初识 TypeScript/03.编写第一个 TypeScript 程序.md",
      "key": "v-834b4678",
      "path": "/pages/c85249f40e7a3517/",
      "headers": [
        {
          "level": 2,
          "title": "编译代码",
          "slug": "编译代码"
        },
        {
          "level": 2,
          "title": "类型注解",
          "slug": "类型注解"
        },
        {
          "level": 2,
          "title": "接口",
          "slug": "接口"
        },
        {
          "level": 2,
          "title": "类",
          "slug": "类"
        },
        {
          "level": 2,
          "title": "总结",
          "slug": "总结"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "简介",
      "frontmatter": {
        "title": "简介",
        "date": "2020-01-05T10:15:07.000Z",
        "permalink": "/pages/e05dce83e5129785",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "初识 TypeScript"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/01.%E5%88%9D%E8%AF%86%20TypeScript/01.%E7%AE%80%E4%BB%8B.html",
      "relativePath": "《TypeScript 从零实现 axios》/01.初识 TypeScript/01.简介.md",
      "key": "v-35777556",
      "path": "/pages/e05dce83e5129785/",
      "headers": [
        {
          "level": 2,
          "title": "TypeScript 的特点",
          "slug": "typescript-的特点"
        },
        {
          "level": 2,
          "title": "总结",
          "slug": "总结"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "初始化项目",
      "frontmatter": {
        "title": "初始化项目",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/6e11ac76475a2b3e",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 项目初始化"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/03.ts-axios%20%E9%A1%B9%E7%9B%AE%E5%88%9D%E5%A7%8B%E5%8C%96/02.%E5%88%9D%E5%A7%8B%E5%8C%96%E9%A1%B9%E7%9B%AE.html",
      "relativePath": "《TypeScript 从零实现 axios》/03.ts-axios 项目初始化/02.初始化项目.md",
      "key": "v-30dba01e",
      "path": "/pages/6e11ac76475a2b3e/",
      "headers": [
        {
          "level": 2,
          "title": "创建代码仓库",
          "slug": "创建代码仓库"
        },
        {
          "level": 2,
          "title": "TypeScript library starter",
          "slug": "typescript-library-starter"
        },
        {
          "level": 3,
          "title": "使用方式",
          "slug": "使用方式"
        },
        {
          "level": 3,
          "title": "目录文件介绍",
          "slug": "目录文件介绍"
        },
        {
          "level": 3,
          "title": "优秀工具集成",
          "slug": "优秀工具集成"
        },
        {
          "level": 3,
          "title": "Npm Scripts",
          "slug": "npm-scripts"
        },
        {
          "level": 2,
          "title": "关联远程分支",
          "slug": "关联远程分支"
        },
        {
          "level": 3,
          "title": "拉取代码",
          "slug": "拉取代码"
        },
        {
          "level": 3,
          "title": "提交代码",
          "slug": "提交代码"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "需求分析",
      "frontmatter": {
        "title": "需求分析",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/195af93fcc871b8b",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 项目初始化"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/03.ts-axios%20%E9%A1%B9%E7%9B%AE%E5%88%9D%E5%A7%8B%E5%8C%96/01.%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90.html",
      "relativePath": "《TypeScript 从零实现 axios》/03.ts-axios 项目初始化/01.需求分析.md",
      "key": "v-37019dca",
      "path": "/pages/195af93fcc871b8b/",
      "headers": [
        {
          "level": 2,
          "title": "Features",
          "slug": "features"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "类型推断",
      "frontmatter": {
        "title": "类型推断",
        "date": "2020-01-05T10:17:47.000Z",
        "permalink": "/pages/7279420c899c505d",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "TypeScript 常用语法"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/02.TypeScript%20%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95/07.%E7%B1%BB%E5%9E%8B%E6%8E%A8%E6%96%AD.html",
      "relativePath": "《TypeScript 从零实现 axios》/02.TypeScript 常用语法/07.类型推断.md",
      "key": "v-5265e51b",
      "path": "/pages/7279420c899c505d/",
      "headers": [
        {
          "level": 2,
          "title": "基础",
          "slug": "基础"
        },
        {
          "level": 2,
          "title": "最佳通用类型",
          "slug": "最佳通用类型"
        },
        {
          "level": 2,
          "title": "上下文类型",
          "slug": "上下文类型"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "处理请求 url 参数",
      "frontmatter": {
        "title": "处理请求 url 参数",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/1313dae575f6dddf",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 基础功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/04.ts-axios%20%E5%9F%BA%E7%A1%80%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/01.%E5%A4%84%E7%90%86%E8%AF%B7%E6%B1%82%20url%20%E5%8F%82%E6%95%B0.html",
      "relativePath": "《TypeScript 从零实现 axios》/04.ts-axios 基础功能实现/01.处理请求 url 参数.md",
      "key": "v-55118e8c",
      "path": "/pages/1313dae575f6dddf/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 3,
          "title": "参数值为数组",
          "slug": "参数值为数组"
        },
        {
          "level": 3,
          "title": "参数值为对象",
          "slug": "参数值为对象"
        },
        {
          "level": 3,
          "title": "参数值为 Date 类型",
          "slug": "参数值为-date-类型"
        },
        {
          "level": 3,
          "title": "特殊字符支持",
          "slug": "特殊字符支持"
        },
        {
          "level": 3,
          "title": "空值忽略",
          "slug": "空值忽略"
        },
        {
          "level": 3,
          "title": "丢弃 url 中的哈希标记",
          "slug": "丢弃-url-中的哈希标记"
        },
        {
          "level": 3,
          "title": "保留 url 中已存在的参数",
          "slug": "保留-url-中已存在的参数"
        },
        {
          "level": 2,
          "title": "buildURL 函数实现",
          "slug": "buildurl-函数实现"
        },
        {
          "level": 2,
          "title": "实现 url 参数处理逻辑",
          "slug": "实现-url-参数处理逻辑"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "处理请求 header",
      "frontmatter": {
        "title": "处理请求 header",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/35c0ec1bb0b0faaf",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 基础功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/04.ts-axios%20%E5%9F%BA%E7%A1%80%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/03.%E5%A4%84%E7%90%86%E8%AF%B7%E6%B1%82%20header.html",
      "relativePath": "《TypeScript 从零实现 axios》/04.ts-axios 基础功能实现/03.处理请求 header.md",
      "key": "v-49b28196",
      "path": "/pages/35c0ec1bb0b0faaf/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "processHeaders 函数实现",
          "slug": "processheaders-函数实现"
        },
        {
          "level": 2,
          "title": "实现请求 header 处理逻辑",
          "slug": "实现请求-header-处理逻辑"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "处理请求 body 数据",
      "frontmatter": {
        "title": "处理请求 body 数据",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/887cd0918e2543d8",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 基础功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/04.ts-axios%20%E5%9F%BA%E7%A1%80%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/02.%E5%A4%84%E7%90%86%E8%AF%B7%E6%B1%82%20body%20%E6%95%B0%E6%8D%AE.html",
      "relativePath": "《TypeScript 从零实现 axios》/04.ts-axios 基础功能实现/02.处理请求 body 数据.md",
      "key": "v-7d6ffebb",
      "path": "/pages/887cd0918e2543d8/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "transformRequest 函数实现",
          "slug": "transformrequest-函数实现"
        },
        {
          "level": 2,
          "title": "实现请求 body 处理逻辑",
          "slug": "实现请求-body-处理逻辑"
        },
        {
          "level": 2,
          "title": "编写 demo",
          "slug": "编写-demo"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "获取响应数据",
      "frontmatter": {
        "title": "获取响应数据",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/a57debe141e1e4f4",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 基础功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/04.ts-axios%20%E5%9F%BA%E7%A1%80%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/04.%E8%8E%B7%E5%8F%96%E5%93%8D%E5%BA%94%E6%95%B0%E6%8D%AE.html",
      "relativePath": "《TypeScript 从零实现 axios》/04.ts-axios 基础功能实现/04.获取响应数据.md",
      "key": "v-5dc818ed",
      "path": "/pages/a57debe141e1e4f4/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "定义接口类型",
          "slug": "定义接口类型"
        },
        {
          "level": 2,
          "title": "实现获取响应数据逻辑",
          "slug": "实现获取响应数据逻辑"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "处理响应 header",
      "frontmatter": {
        "title": "处理响应 header",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/927161662ca32c24",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 基础功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/04.ts-axios%20%E5%9F%BA%E7%A1%80%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/05.%E5%A4%84%E7%90%86%E5%93%8D%E5%BA%94%20header.html",
      "relativePath": "《TypeScript 从零实现 axios》/04.ts-axios 基础功能实现/05.处理响应 header.md",
      "key": "v-5ca8360b",
      "path": "/pages/927161662ca32c24/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "parseHeaders 函数实现及应用",
          "slug": "parseheaders-函数实现及应用"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "处理响应 data",
      "frontmatter": {
        "title": "处理响应 data",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/922cb4268499dc3f",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 基础功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/04.ts-axios%20%E5%9F%BA%E7%A1%80%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/06.%E5%A4%84%E7%90%86%E5%93%8D%E5%BA%94%20data.html",
      "relativePath": "《TypeScript 从零实现 axios》/04.ts-axios 基础功能实现/06.处理响应 data.md",
      "key": "v-a8944e6a",
      "path": "/pages/922cb4268499dc3f/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "transformResponse 函数实现及应用",
          "slug": "transformresponse-函数实现及应用"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "错误处理",
      "frontmatter": {
        "title": "错误处理",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/6a8bef7b98dfdcf9",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 异常情况处理"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/05.ts-axios%20%E5%BC%82%E5%B8%B8%E6%83%85%E5%86%B5%E5%A4%84%E7%90%86/01.%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86.html",
      "relativePath": "《TypeScript 从零实现 axios》/05.ts-axios 异常情况处理/01.错误处理.md",
      "key": "v-3dfa2c4e",
      "path": "/pages/6a8bef7b98dfdcf9/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "处理网络异常错误",
          "slug": "处理网络异常错误"
        },
        {
          "level": 2,
          "title": "处理超时错误",
          "slug": "处理超时错误"
        },
        {
          "level": 2,
          "title": "处理非 200 状态码",
          "slug": "处理非-200-状态码"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "错误信息增强",
      "frontmatter": {
        "title": "错误信息增强",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/22d581d8c2860b8a",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 异常情况处理"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/05.ts-axios%20%E5%BC%82%E5%B8%B8%E6%83%85%E5%86%B5%E5%A4%84%E7%90%86/02.%E9%94%99%E8%AF%AF%E4%BF%A1%E6%81%AF%E5%A2%9E%E5%BC%BA.html",
      "relativePath": "《TypeScript 从零实现 axios》/05.ts-axios 异常情况处理/02.错误信息增强.md",
      "key": "v-15979ace",
      "path": "/pages/22d581d8c2860b8a/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "创建 AxiosError 类",
          "slug": "创建-axioserror-类"
        },
        {
          "level": 2,
          "title": "createError 方法应用",
          "slug": "createerror-方法应用"
        },
        {
          "level": 2,
          "title": "导出类型定义",
          "slug": "导出类型定义"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "axios 函数重载",
      "frontmatter": {
        "title": "axios 函数重载",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/8af227eae851ec97",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 接口扩展"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/06.ts-axios%20%E6%8E%A5%E5%8F%A3%E6%89%A9%E5%B1%95/02.axios%20%E5%87%BD%E6%95%B0%E9%87%8D%E8%BD%BD.html",
      "relativePath": "《TypeScript 从零实现 axios》/06.ts-axios 接口扩展/02.axios 函数重载.md",
      "key": "v-7b326eb5",
      "path": "/pages/8af227eae851ec97/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "重载实现",
          "slug": "重载实现"
        },
        {
          "level": 2,
          "title": "编写 demo",
          "slug": "编写-demo"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "响应数据支持泛型",
      "frontmatter": {
        "title": "响应数据支持泛型",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/c4489d0bab02cc0c",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 接口扩展"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/06.ts-axios%20%E6%8E%A5%E5%8F%A3%E6%89%A9%E5%B1%95/03.%E5%93%8D%E5%BA%94%E6%95%B0%E6%8D%AE%E6%94%AF%E6%8C%81%E6%B3%9B%E5%9E%8B.html",
      "relativePath": "《TypeScript 从零实现 axios》/06.ts-axios 接口扩展/03.响应数据支持泛型.md",
      "key": "v-20aef21a",
      "path": "/pages/c4489d0bab02cc0c/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "接口添加泛型参数",
          "slug": "接口添加泛型参数"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "请求和响应配置化",
      "frontmatter": {
        "title": "请求和响应配置化",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/f5b627bfebba87fc",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 配置化实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/08.ts-axios%20%E9%85%8D%E7%BD%AE%E5%8C%96%E5%AE%9E%E7%8E%B0/02.%E8%AF%B7%E6%B1%82%E5%92%8C%E5%93%8D%E5%BA%94%E9%85%8D%E7%BD%AE%E5%8C%96.html",
      "relativePath": "《TypeScript 从零实现 axios》/08.ts-axios 配置化实现/02.请求和响应配置化.md",
      "key": "v-52ccbc55",
      "path": "/pages/f5b627bfebba87fc/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "修改默认配置",
          "slug": "修改默认配置"
        },
        {
          "level": 2,
          "title": "transform 逻辑重构",
          "slug": "transform-逻辑重构"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "扩展 create 静态接口",
      "frontmatter": {
        "title": "扩展 create 静态接口",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/7b49658c26f613bf",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 配置化实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/08.ts-axios%20%E9%85%8D%E7%BD%AE%E5%8C%96%E5%AE%9E%E7%8E%B0/03.%E6%89%A9%E5%B1%95%20create%20%E9%9D%99%E6%80%81%E6%8E%A5%E5%8F%A3.html",
      "relativePath": "《TypeScript 从零实现 axios》/08.ts-axios 配置化实现/03.扩展 create 静态接口.md",
      "key": "v-6b9783de",
      "path": "/pages/7b49658c26f613bf/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "静态方法扩展",
          "slug": "静态方法扩展"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "XSRF 防御",
      "frontmatter": {
        "title": "XSRF 防御",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/390cb70e2b619449",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 更多功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/10.ts-axios%20%E6%9B%B4%E5%A4%9A%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/02.XSRF%20%E9%98%B2%E5%BE%A1.html",
      "relativePath": "《TypeScript 从零实现 axios》/10.ts-axios 更多功能实现/02.XSRF 防御.md",
      "key": "v-4c988058",
      "path": "/pages/390cb70e2b619449/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "代码实现",
          "slug": "代码实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "withCredentials",
      "frontmatter": {
        "title": "withCredentials",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/5dce43eba796a2ab",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 更多功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/10.ts-axios%20%E6%9B%B4%E5%A4%9A%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/01.withCredentials.html",
      "relativePath": "《TypeScript 从零实现 axios》/10.ts-axios 更多功能实现/01.withCredentials.md",
      "key": "v-0a48eb00",
      "path": "/pages/5dce43eba796a2ab/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "代码实现",
          "slug": "代码实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "HTTP 授权",
      "frontmatter": {
        "title": "HTTP 授权",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/89cd6496c23159ae",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 更多功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/10.ts-axios%20%E6%9B%B4%E5%A4%9A%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/04.HTTP%20%E6%8E%88%E6%9D%83.html",
      "relativePath": "《TypeScript 从零实现 axios》/10.ts-axios 更多功能实现/04.HTTP 授权.md",
      "key": "v-19fe255b",
      "path": "/pages/89cd6496c23159ae/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "代码实现",
          "slug": "代码实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "自定义合法状态码",
      "frontmatter": {
        "title": "自定义合法状态码",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/40b41ce8e8159567",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 更多功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/10.ts-axios%20%E6%9B%B4%E5%A4%9A%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/05.%E8%87%AA%E5%AE%9A%E4%B9%89%E5%90%88%E6%B3%95%E7%8A%B6%E6%80%81%E7%A0%81.html",
      "relativePath": "《TypeScript 从零实现 axios》/10.ts-axios 更多功能实现/05.自定义合法状态码.md",
      "key": "v-0a6553ba",
      "path": "/pages/40b41ce8e8159567/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "代码实现",
          "slug": "代码实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "自定义参数序列化",
      "frontmatter": {
        "title": "自定义参数序列化",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/7753b8141663e54a",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 更多功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/10.ts-axios%20%E6%9B%B4%E5%A4%9A%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/06.%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8F%82%E6%95%B0%E5%BA%8F%E5%88%97%E5%8C%96.html",
      "relativePath": "《TypeScript 从零实现 axios》/10.ts-axios 更多功能实现/06.自定义参数序列化.md",
      "key": "v-79174446",
      "path": "/pages/7753b8141663e54a/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "代码实现",
          "slug": "代码实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "baseURL",
      "frontmatter": {
        "title": "baseURL",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/0b9f2ee2b4dbb728",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 更多功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/10.ts-axios%20%E6%9B%B4%E5%A4%9A%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/07.baseURL.html",
      "relativePath": "《TypeScript 从零实现 axios》/10.ts-axios 更多功能实现/07.baseURL.md",
      "key": "v-9dac3980",
      "path": "/pages/0b9f2ee2b4dbb728/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "代码实现",
          "slug": "代码实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "静态方法扩展",
      "frontmatter": {
        "title": "静态方法扩展",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/c26b053540a7dafa",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 更多功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/10.ts-axios%20%E6%9B%B4%E5%A4%9A%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/08.%E9%9D%99%E6%80%81%E6%96%B9%E6%B3%95%E6%89%A9%E5%B1%95.html",
      "relativePath": "《TypeScript 从零实现 axios》/10.ts-axios 更多功能实现/08.静态方法扩展.md",
      "key": "v-b4905bb6",
      "path": "/pages/c26b053540a7dafa/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "代码实现",
          "slug": "代码实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "前言",
      "frontmatter": {
        "title": "前言",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/df36888424843793",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 单元测试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/11.ts-axios%20%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/01.%E5%89%8D%E8%A8%80.html",
      "relativePath": "《TypeScript 从零实现 axios》/11.ts-axios 单元测试/01.前言.md",
      "key": "v-42c4b722",
      "path": "/pages/df36888424843793/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Jest 安装和配置",
      "frontmatter": {
        "title": "Jest 安装和配置",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/bf5c625a35757b37",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 单元测试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/11.ts-axios%20%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/02.Jest%20%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE.html",
      "relativePath": "《TypeScript 从零实现 axios》/11.ts-axios 单元测试/02.Jest 安装和配置.md",
      "key": "v-a5d9b1fa",
      "path": "/pages/bf5c625a35757b37/",
      "headers": [
        {
          "level": 2,
          "title": "Jest 安装",
          "slug": "jest-安装"
        },
        {
          "level": 2,
          "title": "Jest 配置",
          "slug": "jest-配置"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Axios 实例模块单元测试",
      "frontmatter": {
        "title": "Axios 实例模块单元测试",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/2eac7a0a0d644c15",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 单元测试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/11.ts-axios%20%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/06.Axios%20%E5%AE%9E%E4%BE%8B%E6%A8%A1%E5%9D%97%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html",
      "relativePath": "《TypeScript 从零实现 axios》/11.ts-axios 单元测试/06.Axios 实例模块单元测试.md",
      "key": "v-0bf443df",
      "path": "/pages/2eac7a0a0d644c15/",
      "headers": [
        {
          "level": 2,
          "title": "测试代码编写",
          "slug": "测试代码编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "拦截器模块单元测试",
      "frontmatter": {
        "title": "拦截器模块单元测试",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/97de6fd6293a2c6e",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 单元测试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/11.ts-axios%20%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/07.%E6%8B%A6%E6%88%AA%E5%99%A8%E6%A8%A1%E5%9D%97%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html",
      "relativePath": "《TypeScript 从零实现 axios》/11.ts-axios 单元测试/07.拦截器模块单元测试.md",
      "key": "v-56292598",
      "path": "/pages/97de6fd6293a2c6e/",
      "headers": [
        {
          "level": 2,
          "title": "测试代码编写",
          "slug": "测试代码编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "headers 模块单元测试",
      "frontmatter": {
        "title": "headers 模块单元测试",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/ddd86ec39b5dfe33",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 单元测试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/11.ts-axios%20%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/05.headers%20%E6%A8%A1%E5%9D%97%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html",
      "relativePath": "《TypeScript 从零实现 axios》/11.ts-axios 单元测试/05.headers 模块单元测试.md",
      "key": "v-73ef1208",
      "path": "/pages/ddd86ec39b5dfe33/",
      "headers": [
        {
          "level": 2,
          "title": "测试代码编写",
          "slug": "测试代码编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "mergeConfig 模块单元测试",
      "frontmatter": {
        "title": "mergeConfig 模块单元测试",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/cdf59840306f9e81",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 单元测试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/11.ts-axios%20%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/08.mergeConfig%20%E6%A8%A1%E5%9D%97%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html",
      "relativePath": "《TypeScript 从零实现 axios》/11.ts-axios 单元测试/08.mergeConfig 模块单元测试.md",
      "key": "v-af537094",
      "path": "/pages/cdf59840306f9e81/",
      "headers": [
        {
          "level": 2,
          "title": "测试代码编写",
          "slug": "测试代码编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "请求取消模块单元测试",
      "frontmatter": {
        "title": "请求取消模块单元测试",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/6fa16aee29527032",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 单元测试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/11.ts-axios%20%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/09.%E8%AF%B7%E6%B1%82%E5%8F%96%E6%B6%88%E6%A8%A1%E5%9D%97%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html",
      "relativePath": "《TypeScript 从零实现 axios》/11.ts-axios 单元测试/09.请求取消模块单元测试.md",
      "key": "v-ac7173da",
      "path": "/pages/6fa16aee29527032/",
      "headers": [
        {
          "level": 2,
          "title": "Cancel 类单元测试",
          "slug": "cancel-类单元测试"
        },
        {
          "level": 2,
          "title": "CancelToken 类单元测试",
          "slug": "canceltoken-类单元测试"
        },
        {
          "level": 2,
          "title": "Cancel 业务逻辑单元测试",
          "slug": "cancel-业务逻辑单元测试"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "引用 ts-axios 库",
      "frontmatter": {
        "title": "引用 ts-axios 库",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/c6bdbd5bd60adf5a",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 部署与发布"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/12.ts-axios%20%E9%83%A8%E7%BD%B2%E4%B8%8E%E5%8F%91%E5%B8%83/02.%E5%BC%95%E7%94%A8%20ts-axios%20%E5%BA%93.html",
      "relativePath": "《TypeScript 从零实现 axios》/12.ts-axios 部署与发布/02.引用 ts-axios 库.md",
      "key": "v-64f0ae5f",
      "path": "/pages/c6bdbd5bd60adf5a/",
      "headers": [
        {
          "level": 2,
          "title": "在 TS 项目中引用",
          "slug": "在-ts-项目中引用"
        },
        {
          "level": 2,
          "title": "在 JS 项目中引用",
          "slug": "在-js-项目中引用"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "计算属性 vs 方法 vs 侦听属性",
      "frontmatter": {
        "title": "计算属性 vs 方法 vs 侦听属性",
        "date": "2020-02-04T16:37:51.000Z",
        "permalink": "/pages/351f72ecd9c41129",
        "categories": [
          "《Vue》笔记",
          "基础"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/01.%E5%9F%BA%E7%A1%80/20.%E8%AE%A1%E7%AE%97%E5%B1%9E%E6%80%A7%20vs%20%E6%96%B9%E6%B3%95%20vs%20%E4%BE%A6%E5%90%AC%E5%B1%9E%E6%80%A7.html",
      "relativePath": "《Vue》笔记/01.基础/20.计算属性 vs 方法 vs 侦听属性.md",
      "key": "v-bfbee8a2",
      "path": "/pages/351f72ecd9c41129/",
      "excerpt": "<h1 id=\"计算属性-vs-方法-vs-侦听属性\"><a class=\"header-anchor\" href=\"#计算属性-vs-方法-vs-侦听属性\">#</a> 计算属性 vs 方法 vs 侦听属性</h1>\n<p><a href=\"https://cn.vuejs.org/v2/guide/computed.html#%E8%AE%A1%E7%AE%97%E5%B1%9E%E6%80%A7%E7%BC%93%E5%AD%98-vs-%E6%96%B9%E6%B3%95\" target=\"_blank\" rel=\"noopener noreferrer\">API<OutboundLink/></a></p>\n<p>如果一个功能同时可以使用计算属性(computed)、方法(methods)、侦听属性(watch)来实现的时候推荐使用计算属性。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "生命周期",
      "frontmatter": {
        "title": "生命周期",
        "date": "2020-02-04T15:06:59.000Z",
        "permalink": "/pages/176808a1b5f843b8",
        "categories": [
          "《Vue》笔记",
          "基础"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/01.%E5%9F%BA%E7%A1%80/10.%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.html",
      "relativePath": "《Vue》笔记/01.基础/10.生命周期.md",
      "key": "v-7f5c063b",
      "path": "/pages/176808a1b5f843b8/",
      "headers": [
        {
          "level": 2,
          "title": "Demo",
          "slug": "demo"
        },
        {
          "level": 2,
          "title": "生命周期图示",
          "slug": "生命周期图示"
        }
      ],
      "excerpt": "<h1 id=\"实例生命周期钩子\"><a class=\"header-anchor\" href=\"#实例生命周期钩子\">#</a> 实例生命周期钩子</h1>\n<p><a href=\"https://cn.vuejs.org/v2/guide/instance.html#%E5%AE%9E%E4%BE%8B%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E9%92%A9%E5%AD%90\" target=\"_blank\" rel=\"noopener noreferrer\">实例生命周期钩子API<OutboundLink/></a></p>\n<p>简单理解，生命周期钩子函数就是vue实例在某一个时间点会自动执行的函数。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "MVVM模式",
      "frontmatter": {
        "title": "MVVM模式",
        "date": "2020-02-04T12:19:00.000Z",
        "permalink": "/pages/114158caa9e96df0",
        "categories": [
          "《Vue》笔记",
          "基础"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/01.%E5%9F%BA%E7%A1%80/00.MVVM%E6%A8%A1%E5%BC%8F.html",
      "relativePath": "《Vue》笔记/01.基础/00.MVVM模式.md",
      "key": "v-51925a1c",
      "path": "/pages/114158caa9e96df0/",
      "excerpt": "<div class=\"custom-block tip\"><p class=\"custom-block-title\">提示</p>\n<p>说明：本章内容是博主的Vue学习笔记，以<a href=\"https://cn.vuejs.org/v2/guide/\" target=\"_blank\" rel=\"noopener noreferrer\">官方文档<OutboundLink/></a>为准。</p>\n</div>\n<h1 id=\"mvvm模式\"><a class=\"header-anchor\" href=\"#mvvm模式\">#</a> MVVM模式</h1>\n<p>MVVM模式，<code>M</code>即 model，数据模型；<code>V</code>即 view，视图；<code>VM</code>即 view-model，视图模型。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "v-if vs v-show",
      "frontmatter": {
        "title": "v-if vs v-show",
        "date": "2020-02-04T17:32:23.000Z",
        "permalink": "/pages/73e4064340277b05",
        "categories": [
          "《Vue》笔记",
          "基础"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/01.%E5%9F%BA%E7%A1%80/30.v-if%20vs%20v-show.html",
      "relativePath": "《Vue》笔记/01.基础/30.v-if vs v-show.md",
      "key": "v-3853bf81",
      "path": "/pages/73e4064340277b05/",
      "excerpt": "<h1 id=\"v-if-vs-v-show\"><a class=\"header-anchor\" href=\"#v-if-vs-v-show\">#</a> v-if vs v-show</h1>\n<p><a href=\"https://cn.vuejs.org/v2/guide/conditional.html#v-if-vs-v-show\" target=\"_blank\" rel=\"noopener noreferrer\">API<OutboundLink/></a></p>\n<p><code>v-if</code> 根据渲染条件决定是否把元素渲染到DOM页面，而<code>v-show</code>不管渲染条件是什么，都会把元素渲染到DOM页面，只是简单的切换CSS的显示隐藏。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "列表渲染之数组、对象更新检测",
      "frontmatter": {
        "title": "列表渲染之数组、对象更新检测",
        "date": "2020-02-05T13:09:06.000Z",
        "permalink": "/pages/04783a6691cc9d06",
        "categories": [
          "《Vue》笔记",
          "基础"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/01.%E5%9F%BA%E7%A1%80/35.%E5%88%97%E8%A1%A8%E6%B8%B2%E6%9F%93%E4%B9%8B%E6%95%B0%E7%BB%84%E3%80%81%E5%AF%B9%E8%B1%A1%E6%9B%B4%E6%96%B0%E6%A3%80%E6%B5%8B.html",
      "relativePath": "《Vue》笔记/01.基础/35.列表渲染之数组、对象更新检测.md",
      "key": "v-a25485d0",
      "path": "/pages/04783a6691cc9d06/",
      "headers": [
        {
          "level": 2,
          "title": "数组更新检测",
          "slug": "数组更新检测"
        },
        {
          "level": 2,
          "title": "对象变更检测注意事项",
          "slug": "对象变更检测注意事项"
        },
        {
          "level": 2,
          "title": "总结",
          "slug": "总结"
        }
      ],
      "excerpt": "<h1 id=\"列表渲染之数组、对象更新检测\"><a class=\"header-anchor\" href=\"#列表渲染之数组、对象更新检测\">#</a> 列表渲染之数组、对象更新检测</h1>\n<p><a href=\"https://cn.vuejs.org/v2/guide/list.html#%E6%95%B0%E7%BB%84%E6%9B%B4%E6%96%B0%E6%A3%80%E6%B5%8B\" target=\"_blank\" rel=\"noopener noreferrer\">数组更新检测API<OutboundLink/></a> <a href=\"https://cn.vuejs.org/v2/guide/list.html#%E5%AF%B9%E8%B1%A1%E5%8F%98%E6%9B%B4%E6%A3%80%E6%B5%8B%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9\" target=\"_blank\" rel=\"noopener noreferrer\">对象更新检测API<OutboundLink/></a></p>\n<h2 id=\"数组更新检测\"><a class=\"header-anchor\" href=\"#数组更新检测\">#</a> 数组更新检测</h2>\n<h4 id=\"变异方法-mutation-method\"><a class=\"header-anchor\" href=\"#变异方法-mutation-method\">#</a> 变异方法 (mutation method)</h4>\n<p>Vue 将被侦听的数组的变异方法进行了包裹，所以它们也将会触发视图更新。这些被包裹过的方法包括：</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "子组件派发事件和值给父组件",
      "frontmatter": {
        "title": "子组件派发事件和值给父组件",
        "date": "2020-02-04T12:56:51.000Z",
        "permalink": "/pages/0f19a1bcac14fd41",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/50.%E5%AD%90%E7%BB%84%E4%BB%B6%E6%B4%BE%E5%8F%91%E4%BA%8B%E4%BB%B6%E5%92%8C%E5%80%BC%E7%BB%99%E7%88%B6%E7%BB%84%E4%BB%B6.html",
      "relativePath": "《Vue》笔记/02.组件/50.子组件派发事件和值给父组件.md",
      "key": "v-a0fea418",
      "path": "/pages/0f19a1bcac14fd41/",
      "headers": [
        {
          "level": 2,
          "title": "父子组件间传递数据 demo",
          "slug": "父子组件间传递数据-demo"
        }
      ],
      "excerpt": "<h1 id=\"子组件派发事件和值给父组件\"><a class=\"header-anchor\" href=\"#子组件派发事件和值给父组件\">#</a> 子组件派发事件和值给父组件</h1>\n<p><a href=\"https://cn.vuejs.org/v2/guide/components.html#%E7%9B%91%E5%90%AC%E5%AD%90%E7%BB%84%E4%BB%B6%E4%BA%8B%E4%BB%B6\" target=\"_blank\" rel=\"noopener noreferrer\">API<OutboundLink/></a></p>\n<p>子组件通过<code>$emit</code>派发事件和值给父组件（值可以有多个）</p>\n<!--beforebegin--><div class=\"language-js line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-js\"><code><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">$emit</span><span class=\"token punctuation\">(</span><span class=\"token string\">'fnX'</span><span class=\"token punctuation\">,</span> value<span class=\"token punctuation\">)</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "使用组件的细节点",
      "frontmatter": {
        "title": "使用组件的细节点",
        "date": "2020-02-13T13:26:20.000Z",
        "permalink": "/pages/83a1ab785e7fd70c",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/36.%E4%BD%BF%E7%94%A8%E7%BB%84%E4%BB%B6%E7%9A%84%E7%BB%86%E8%8A%82%E7%82%B9.html",
      "relativePath": "《Vue》笔记/02.组件/36.使用组件的细节点.md",
      "key": "v-058a6cfd",
      "path": "/pages/83a1ab785e7fd70c/",
      "headers": [
        {
          "level": 2,
          "title": "解析 DOM 模板时的注意事项",
          "slug": "解析-dom-模板时的注意事项"
        },
        {
          "level": 2,
          "title": "子组件内的data要使用函数返回",
          "slug": "子组件内的data要使用函数返回"
        },
        {
          "level": 2,
          "title": "通过 ref 引用操作DOM",
          "slug": "通过-ref-引用操作dom"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "父组件给子组件传值",
      "frontmatter": {
        "title": "父组件给子组件传值",
        "date": "2020-02-04T12:45:30.000Z",
        "permalink": "/pages/07b384c2e6232e07",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/40.%E7%88%B6%E7%BB%84%E4%BB%B6%E7%BB%99%E5%AD%90%E7%BB%84%E4%BB%B6%E4%BC%A0%E5%80%BC.html",
      "relativePath": "《Vue》笔记/02.组件/40.父组件给子组件传值.md",
      "key": "v-7fd95de0",
      "path": "/pages/07b384c2e6232e07/",
      "headers": [
        {
          "level": 2,
          "title": "单向数据流",
          "slug": "单向数据流"
        },
        {
          "level": 2,
          "title": "父子组件间传递数据 demo",
          "slug": "父子组件间传递数据-demo"
        }
      ],
      "excerpt": "<h1 id=\"父组件给子组件传值\"><a class=\"header-anchor\" href=\"#父组件给子组件传值\">#</a> 父组件给子组件传值</h1>\n<p>父组件中，通过给子组件标签v-bind绑定属性的方式传入值</p>\n<!--beforebegin--><div class=\"language-html line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-html\"><code><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ComponentName</span> <span class=\"token attr-name\"><span class=\"token namespace\">v-bind:</span>name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>value<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ComponentName</span><span class=\"token punctuation\">></span></span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br></div><!--beforeend--></div><!--afterend--><blockquote>\n<p>如果不使用v-bind传入的值为字符串，使用v-bind绑定传入的值为表达式。</p>\n</blockquote>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Prop 验证 与 非 Prop 的 Attribute",
      "frontmatter": {
        "title": "Prop 验证 与 非 Prop 的 Attribute",
        "date": "2020-02-15T10:49:04.000Z",
        "permalink": "/pages/a3080f60f6596eb4",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/52.Prop%20%E9%AA%8C%E8%AF%81%20%E4%B8%8E%20%E9%9D%9E%20Prop%20%E7%9A%84%20Attribute.html",
      "relativePath": "《Vue》笔记/02.组件/52.Prop 验证 与 非 Prop 的 Attribute.md",
      "key": "v-6055c1f5",
      "path": "/pages/a3080f60f6596eb4/",
      "headers": [
        {
          "level": 2,
          "title": "Prop 验证",
          "slug": "prop-验证"
        },
        {
          "level": 2,
          "title": "非 Prop 的 Attribute",
          "slug": "非-prop-的-attribute"
        },
        {
          "level": 3,
          "title": "用处",
          "slug": "用处"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "自定义事件",
      "frontmatter": {
        "title": "自定义事件",
        "date": "2020-02-15T11:27:45.000Z",
        "permalink": "/pages/9651417d08d1779d",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/55.%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6.html",
      "relativePath": "《Vue》笔记/02.组件/55.自定义事件.md",
      "key": "v-091f5f86",
      "path": "/pages/9651417d08d1779d/",
      "headers": [
        {
          "level": 3,
          "title": "在组件标签v-on绑定的事件是自定义事件",
          "slug": "在组件标签v-on绑定的事件是自定义事件"
        },
        {
          "level": 3,
          "title": "使自定义事件变为原生事件",
          "slug": "使自定义事件变为原生事件"
        },
        {
          "level": 3,
          "title": "自定义事件名会自动变小写",
          "slug": "自定义事件名会自动变小写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "兄弟组件传值",
      "frontmatter": {
        "title": "兄弟组件传值",
        "date": "2020-02-04T13:04:32.000Z",
        "permalink": "/pages/809f4582d9ca9552",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/60.%E5%85%84%E5%BC%9F%E7%BB%84%E4%BB%B6%E4%BC%A0%E5%80%BC.html",
      "relativePath": "《Vue》笔记/02.组件/60.兄弟组件传值.md",
      "key": "v-da986a4a",
      "path": "/pages/809f4582d9ca9552/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "非父子组件传值",
      "frontmatter": {
        "title": "非父子组件传值",
        "date": "2020-02-15T14:55:03.000Z",
        "permalink": "/pages/d408e64f666f146d",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/65.%E9%9D%9E%E7%88%B6%E5%AD%90%E7%BB%84%E4%BB%B6%E4%BC%A0%E5%80%BC.html",
      "relativePath": "《Vue》笔记/02.组件/65.非父子组件传值.md",
      "key": "v-3999f17b",
      "path": "/pages/d408e64f666f146d/",
      "excerpt": "<h1 id=\"非父子组件间传值\"><a class=\"header-anchor\" href=\"#非父子组件间传值\">#</a> 非父子组件间传值</h1>\n<p>当组件的嵌套多时，非父子组件间传值就显得复杂，除了使用<a href=\"https://vuex.vuejs.org/zh/\" target=\"_blank\" rel=\"noopener noreferrer\">vuex<OutboundLink/></a>实现之外，还可以通过Bus（或者叫 总线/发布订阅模式/观察者模式）的方式实现非父子组件间传值。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "插槽slot",
      "frontmatter": {
        "title": "插槽slot",
        "date": "2020-02-16T11:46:27.000Z",
        "permalink": "/pages/055ecee9a4325386",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/75.%E6%8F%92%E6%A7%BDslot.html",
      "relativePath": "《Vue》笔记/02.组件/75.插槽slot.md",
      "key": "v-2c35fb9a",
      "path": "/pages/055ecee9a4325386/",
      "headers": [
        {
          "level": 2,
          "title": "插槽",
          "slug": "插槽"
        },
        {
          "level": 2,
          "title": "具名插槽",
          "slug": "具名插槽"
        },
        {
          "level": 2,
          "title": "作用域插槽",
          "slug": "作用域插槽"
        },
        {
          "level": 2,
          "title": "具名插槽的缩写",
          "slug": "具名插槽的缩写"
        },
        {
          "level": 2,
          "title": "Demo",
          "slug": "demo"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "父组件调用子组件方法并传入值",
      "frontmatter": {
        "title": "父组件调用子组件方法并传入值",
        "date": "2020-02-04T13:06:37.000Z",
        "permalink": "/pages/2e24dab728769e0c",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/70.%E7%88%B6%E7%BB%84%E4%BB%B6%E8%B0%83%E7%94%A8%E5%AD%90%E7%BB%84%E4%BB%B6%E6%96%B9%E6%B3%95%E5%B9%B6%E4%BC%A0%E5%85%A5%E5%80%BC.html",
      "relativePath": "《Vue》笔记/02.组件/70.父组件调用子组件方法并传入值.md",
      "key": "v-2a180802",
      "path": "/pages/2e24dab728769e0c/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "vue父子组件的生命周期顺序",
      "frontmatter": {
        "title": "vue父子组件的生命周期顺序",
        "date": "2020-02-18T16:39:33.000Z",
        "permalink": "/pages/e6cec47efa42d7f1",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/90.vue%E7%88%B6%E5%AD%90%E7%BB%84%E4%BB%B6%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E9%A1%BA%E5%BA%8F.html",
      "relativePath": "《Vue》笔记/02.组件/90.vue父子组件的生命周期顺序.md",
      "key": "v-45c0e343",
      "path": "/pages/e6cec47efa42d7f1/",
      "headers": [
        {
          "level": 3,
          "title": "加载渲染过程",
          "slug": "加载渲染过程"
        },
        {
          "level": 3,
          "title": "子组件更新过程",
          "slug": "子组件更新过程"
        },
        {
          "level": 3,
          "title": "父组件更新过程",
          "slug": "父组件更新过程"
        },
        {
          "level": 3,
          "title": "销毁过程",
          "slug": "销毁过程"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "动态组件与 v-once 指令",
      "frontmatter": {
        "title": "动态组件与 v-once 指令",
        "date": "2020-02-16T15:52:19.000Z",
        "permalink": "/pages/636ca33122e9a64b",
        "categories": [
          "《Vue》笔记",
          "组件"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E7%BB%84%E4%BB%B6/80.%E5%8A%A8%E6%80%81%E7%BB%84%E4%BB%B6%E4%B8%8E%20v-once%20%E6%8C%87%E4%BB%A4.html",
      "relativePath": "《Vue》笔记/02.组件/80.动态组件与 v-once 指令.md",
      "key": "v-1a8a622e",
      "path": "/pages/636ca33122e9a64b/",
      "headers": [
        {
          "level": 2,
          "title": "动态组件",
          "slug": "动态组件"
        },
        {
          "level": 3,
          "title": "动态组件 demo",
          "slug": "动态组件-demo"
        },
        {
          "level": 2,
          "title": "v-once 指令",
          "slug": "v-once-指令"
        },
        {
          "level": 3,
          "title": "通过 v-once 创建低开销的静态组件",
          "slug": "通过-v-once-创建低开销的静态组件"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "transition过渡&动画",
      "frontmatter": {
        "title": "transition过渡&动画",
        "date": "2020-02-04T13:16:19.000Z",
        "permalink": "/pages/184a96b493a97078",
        "categories": [
          "《Vue》笔记",
          "过渡&动画"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/03.%E8%BF%87%E6%B8%A1&%E5%8A%A8%E7%94%BB/110.transition%E8%BF%87%E6%B8%A1&%E5%8A%A8%E7%94%BB.html",
      "relativePath": "《Vue》笔记/03.过渡&动画/110.transition过渡&动画.md",
      "key": "v-587f8506",
      "path": "/pages/184a96b493a97078/",
      "headers": [
        {
          "level": 2,
          "title": "使用",
          "slug": "使用"
        },
        {
          "level": 2,
          "title": "过渡的类名",
          "slug": "过渡的类名"
        },
        {
          "level": 2,
          "title": "css过渡 demo",
          "slug": "css过渡-demo"
        },
        {
          "level": 2,
          "title": "css动画 demo",
          "slug": "css动画-demo"
        },
        {
          "level": 3,
          "title": "组件中使用的示例",
          "slug": "组件中使用的示例"
        }
      ],
      "excerpt": "<h1 id=\"transition过渡-动画\"><a class=\"header-anchor\" href=\"#transition过渡-动画\">#</a> transition过渡&amp;动画</h1>\n<p><a href=\"https://cn.vuejs.org/v2/guide/transitions.html\" target=\"_blank\" rel=\"noopener noreferrer\">API<OutboundLink/></a></p>\n<h2 id=\"使用\"><a class=\"header-anchor\" href=\"#使用\">#</a> 使用</h2>\n<p>需要设置动画的元素或组件要在外边包裹一个<code>&lt;transition&gt;</code>标签，设置自定义的<code>name</code>，vue会根据元素的切换（进入/离开）过程添加相应的css类名，你可以<strong>自由地使用css类名来设置css过渡&amp;动画</strong>。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "使用animate库",
      "frontmatter": {
        "title": "使用animate库",
        "date": "2020-02-17T16:05:52.000Z",
        "permalink": "/pages/3b0a20e70805fcea",
        "categories": [
          "《Vue》笔记",
          "过渡&动画"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/03.%E8%BF%87%E6%B8%A1&%E5%8A%A8%E7%94%BB/112.%E4%BD%BF%E7%94%A8animate%E5%BA%93.html",
      "relativePath": "《Vue》笔记/03.过渡&动画/112.使用animate库.md",
      "key": "v-0dfd9302",
      "path": "/pages/3b0a20e70805fcea/",
      "headers": [
        {
          "level": 2,
          "title": "自定义过渡类名",
          "slug": "自定义过渡类名"
        },
        {
          "level": 2,
          "title": "使用Animate.css库",
          "slug": "使用animate-css库"
        },
        {
          "level": 2,
          "title": "Demo",
          "slug": "demo"
        }
      ],
      "excerpt": "<h1 id=\"vue中使用animate-css库\"><a class=\"header-anchor\" href=\"#vue中使用animate-css库\">#</a> vue中使用Animate.css库</h1>\n<h2 id=\"自定义过渡类名\"><a class=\"header-anchor\" href=\"#自定义过渡类名\">#</a> 自定义过渡类名</h2>\n<p>我们可以通过以下 attribute 来自定义过渡类名：</p>\n<ul>\n<li><code>enter-class</code></li>\n<li><code>enter-active-class</code></li>\n<li><code>enter-to-class</code> (2.1.8+)</li>\n<li><code>leave-class</code></li>\n<li><code>leave-active-class</code></li>\n<li><code>leave-to-class</code> (2.1.8+)</li>\n</ul>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "transition-group列表过渡",
      "frontmatter": {
        "title": "transition-group列表过渡",
        "date": "2020-02-04T13:17:42.000Z",
        "permalink": "/pages/0aa92922ace6bb5e",
        "categories": [
          "《Vue》笔记",
          "过渡&动画"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/03.%E8%BF%87%E6%B8%A1&%E5%8A%A8%E7%94%BB/120.transition-group%E5%88%97%E8%A1%A8%E8%BF%87%E6%B8%A1.html",
      "relativePath": "《Vue》笔记/03.过渡&动画/120.transition-group列表过渡.md",
      "key": "v-3eae715c",
      "path": "/pages/0aa92922ace6bb5e/",
      "headers": [
        {
          "level": 2,
          "title": "列表的进入/离开过渡",
          "slug": "列表的进入-离开过渡"
        },
        {
          "level": 2,
          "title": "列表的排序过渡",
          "slug": "列表的排序过渡"
        }
      ],
      "excerpt": "<h1 id=\"transition-group列表过渡\"><a class=\"header-anchor\" href=\"#transition-group列表过渡\">#</a> transition-group列表过渡</h1>\n<h2 id=\"列表的进入-离开过渡\"><a class=\"header-anchor\" href=\"#列表的进入-离开过渡\">#</a> 列表的进入/离开过渡</h2>\n<!--beforebegin--><div class=\"language-html line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-html\"><code><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>transition-group</span> <span class=\"token attr-name\">tag</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>ul<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span> <span class=\"token comment\">&lt;!--tag转为ul--></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">v-for</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>item in list<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">:key</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>item<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>{{item}}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span> <span class=\"token comment\">&lt;!--子元素要有key--></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>transition-group</span><span class=\"token punctuation\">></span></span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br></div><!--beforeend--></div><!--afterend--><p><strong>注意</strong>：列表元素一定要有<code>key</code></p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Vue CLi v3 创建项目使用记录",
      "frontmatter": {
        "title": "Vue CLi v3 创建项目使用记录",
        "date": "2020-02-20T17:24:29.000Z",
        "permalink": "/pages/d00311f8174119b2",
        "categories": [
          "《Vue》笔记",
          "工具"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/05.%E5%B7%A5%E5%85%B7/10.Vue%20CLi%20v3%20%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE%E4%BD%BF%E7%94%A8%E8%AE%B0%E5%BD%95.html",
      "relativePath": "《Vue》笔记/05.工具/10.Vue CLi v3 创建项目使用记录.md",
      "key": "v-d2e21036",
      "path": "/pages/d00311f8174119b2/",
      "headers": [
        {
          "level": 2,
          "title": "vue create",
          "slug": "vue-create"
        },
        {
          "level": 2,
          "title": "图形化界面",
          "slug": "图形化界面"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Mixin混入",
      "frontmatter": {
        "title": "Mixin混入",
        "date": "2020-02-19T15:22:41.000Z",
        "permalink": "/pages/bd36a3c1bc3e0821",
        "categories": [
          "《Vue》笔记",
          "可复用性&组合"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/04.%E5%8F%AF%E5%A4%8D%E7%94%A8%E6%80%A7&%E7%BB%84%E5%90%88/01.Mixin%E6%B7%B7%E5%85%A5.html",
      "relativePath": "《Vue》笔记/04.可复用性&组合/01.Mixin混入.md",
      "key": "v-0e096d26",
      "path": "/pages/bd36a3c1bc3e0821/",
      "headers": [
        {
          "level": 2,
          "title": "基础",
          "slug": "基础"
        },
        {
          "level": 2,
          "title": "选项合并",
          "slug": "选项合并"
        },
        {
          "level": 2,
          "title": "某项目中使用的Mixin示例",
          "slug": "某项目中使用的mixin示例"
        }
      ],
      "excerpt": "<h1 id=\"mixin混入\"><a class=\"header-anchor\" href=\"#mixin混入\">#</a> Mixin混入</h1>\n<h2 id=\"基础\"><a class=\"header-anchor\" href=\"#基础\">#</a> 基础</h2>\n<p>混入 (mixin) 提供了一种非常灵活的方式，来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时，所有混入对象的选项将被“混合”进入该组件本身的选项。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "vuex操作相关",
      "frontmatter": {
        "title": "vuex操作相关",
        "date": "2020-02-04T13:15:19.000Z",
        "permalink": "/pages/d9d62d6ab8ff99a6",
        "categories": [
          "《Vue》笔记",
          "规模化"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/06.%E8%A7%84%E6%A8%A1%E5%8C%96/100.vuex%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3.html",
      "relativePath": "《Vue》笔记/06.规模化/100.vuex操作相关.md",
      "key": "v-24601fca",
      "path": "/pages/d9d62d6ab8ff99a6/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "路由懒加载",
      "frontmatter": {
        "title": "路由懒加载",
        "date": "2020-02-04T13:20:20.000Z",
        "permalink": "/pages/38ecac9a9b92f037",
        "categories": [
          "《Vue》笔记",
          "规模化"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/06.%E8%A7%84%E6%A8%A1%E5%8C%96/140.%E8%B7%AF%E7%94%B1%E6%87%92%E5%8A%A0%E8%BD%BD.html",
      "relativePath": "《Vue》笔记/06.规模化/140.路由懒加载.md",
      "key": "v-54ba2c2f",
      "path": "/pages/38ecac9a9b92f037/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Vue中的防抖函数封装和使用",
      "frontmatter": {
        "title": "Vue中的防抖函数封装和使用",
        "date": "2020-02-04T13:10:19.000Z",
        "permalink": "/pages/fb08e252dfd8fdfd",
        "categories": [
          "《Vue》笔记",
          "其他"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/99.%E5%85%B6%E4%BB%96/80.Vue%E4%B8%AD%E7%9A%84%E9%98%B2%E6%8A%96%E5%87%BD%E6%95%B0%E5%B0%81%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8.html",
      "relativePath": "《Vue》笔记/99.其他/80.Vue中的防抖函数封装和使用.md",
      "key": "v-214fd36a",
      "path": "/pages/fb08e252dfd8fdfd/",
      "headers": [
        {
          "level": 3,
          "title": "相关文章",
          "slug": "相关文章"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "操作本地缓存",
      "frontmatter": {
        "title": "操作本地缓存",
        "date": "2020-02-04T13:14:19.000Z",
        "permalink": "/pages/30a94dbe96873b33",
        "categories": [
          "《Vue》笔记",
          "其他"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AVue%E3%80%8B%E7%AC%94%E8%AE%B0/99.%E5%85%B6%E4%BB%96/90.%E6%93%8D%E4%BD%9C%E6%9C%AC%E5%9C%B0%E7%BC%93%E5%AD%98.html",
      "relativePath": "《Vue》笔记/99.其他/90.操作本地缓存.md",
      "key": "v-561015a6",
      "path": "/pages/30a94dbe96873b33/",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "常用meta整理",
      "frontmatter": {
        "title": "常用meta整理",
        "date": "2020-02-21T12:20:10.000Z",
        "permalink": "/pages/8309a5b876fc95e3",
        "categories": [
          "页面",
          "HTML"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/10.HTML/10.%E5%B8%B8%E7%94%A8meta%E6%95%B4%E7%90%86.html",
      "relativePath": "02.页面/10.HTML/10.常用meta整理.md",
      "key": "v-3902f1f9",
      "path": "/pages/8309a5b876fc95e3/",
      "headers": [
        {
          "level": 2,
          "title": "元素",
          "slug": "meta-元素"
        },
        {
          "level": 3,
          "title": "概要",
          "slug": "概要"
        },
        {
          "level": 3,
          "title": "网页相关",
          "slug": "网页相关"
        },
        {
          "level": 3,
          "title": "SEO优化",
          "slug": "seo优化"
        },
        {
          "level": 3,
          "title": "移动设备",
          "slug": "移动设备"
        },
        {
          "level": 3,
          "title": "一个常用的移动端页面meta设置",
          "slug": "一个常用的移动端页面meta设置"
        }
      ],
      "excerpt": "<h1 id=\"常用meta整理\"><a class=\"header-anchor\" href=\"#常用meta整理\">#</a> 常用meta整理</h1>\n<h2 id=\"meta-元素\"><a class=\"header-anchor\" href=\"#meta-元素\">#</a> &lt;meta&gt; 元素</h2>\n<h3 id=\"概要\"><a class=\"header-anchor\" href=\"#概要\">#</a> 概要</h3>\n<p>meta标签提供关于HTML文档的元数据。元数据不会显示在页面上，但是对于机器是可读的。它可用于浏览器（如何显示内容或重新加载页面），搜索引擎（关键词），或其他 web 服务。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "flex布局语法",
      "frontmatter": {
        "title": "flex布局语法",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/0a83b083bdf257cb",
        "author": {
          "name": "阮一峰"
        },
        "categories": [
          "页面",
          "CSS"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/02.%E9%A1%B5%E9%9D%A2/20.CSS/01.flex%E5%B8%83%E5%B1%80%E8%AF%AD%E6%B3%95.html",
      "relativePath": "02.页面/20.CSS/01.flex布局语法.md",
      "key": "v-668a82b6",
      "path": "/pages/0a83b083bdf257cb/",
      "headers": [
        {
          "level": 2,
          "title": "一、flex 布局是什么？",
          "slug": "一、flex-布局是什么？"
        },
        {
          "level": 2,
          "title": "二、基本概念",
          "slug": "二、基本概念"
        },
        {
          "level": 2,
          "title": "三、容器的属性",
          "slug": "三、容器的属性"
        },
        {
          "level": 3,
          "title": "3.1 flex-direction属性",
          "slug": "_3-1-flex-direction属性"
        },
        {
          "level": 3,
          "title": "3.2 flex-wrap属性",
          "slug": "_3-2-flex-wrap属性"
        },
        {
          "level": 3,
          "title": "3.3 flex-flow",
          "slug": "_3-3-flex-flow"
        },
        {
          "level": 3,
          "title": "3.4 justify-content属性",
          "slug": "_3-4-justify-content属性"
        },
        {
          "level": 3,
          "title": "3.5 align-items属性",
          "slug": "_3-5-align-items属性"
        },
        {
          "level": 3,
          "title": "3.6 align-content属性",
          "slug": "_3-6-align-content属性"
        },
        {
          "level": 2,
          "title": "四、项目的属性",
          "slug": "四、项目的属性"
        },
        {
          "level": 3,
          "title": "4.1 order属性",
          "slug": "_4-1-order属性"
        },
        {
          "level": 3,
          "title": "4.2 flex-grow属性",
          "slug": "_4-2-flex-grow属性"
        },
        {
          "level": 3,
          "title": "4.3 flex-shrink属性",
          "slug": "_4-3-flex-shrink属性"
        },
        {
          "level": 3,
          "title": "4.4 flex-basis属性",
          "slug": "_4-4-flex-basis属性"
        },
        {
          "level": 3,
          "title": "4.5 flex属性",
          "slug": "_4-5-flex属性"
        },
        {
          "level": 3,
          "title": "4.6 align-self属性",
          "slug": "_4-6-align-self属性"
        }
      ],
      "excerpt": "<h1 id=\"flex布局语法\"><a class=\"header-anchor\" href=\"#flex布局语法\">#</a> flex布局语法</h1>\n<h2 id=\"一、flex-布局是什么？\"><a class=\"header-anchor\" href=\"#一、flex-布局是什么？\">#</a> 一、flex 布局是什么？</h2>\n<p>Flex是 Flexible Box 的缩写，意为&quot;弹性布局&quot;，用来为盒状模型提供最大的灵活性。</p>\n<p><strong>任何一个容器</strong> 都可以指定为 Flex 布局。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Git使用手册",
      "frontmatter": {
        "title": "Git使用手册",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/9a7ee40fc232253e",
        "categories": [
          "技术",
          "技术文档"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/01.%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/01.Git%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C.html",
      "relativePath": "03.技术/01.技术文档/01.Git使用手册.md",
      "key": "v-db5d4cca",
      "path": "/pages/9a7ee40fc232253e/",
      "headers": [
        {
          "level": 2,
          "title": "安装",
          "slug": "安装"
        },
        {
          "level": 2,
          "title": "创建版本库（仓库）",
          "slug": "创建版本库（仓库）"
        },
        {
          "level": 2,
          "title": "添加文件到仓库",
          "slug": "添加文件到仓库"
        },
        {
          "level": 2,
          "title": "版本管理",
          "slug": "版本管理"
        },
        {
          "level": 2,
          "title": "远程仓库",
          "slug": "远程仓库"
        },
        {
          "level": 2,
          "title": "分支管理",
          "slug": "分支管理"
        },
        {
          "level": 2,
          "title": "帮助命令",
          "slug": "帮助命令"
        },
        {
          "level": 2,
          "title": "参考文档",
          "slug": "参考文档"
        }
      ],
      "excerpt": "<h1 id=\"git使用手册\"><a class=\"header-anchor\" href=\"#git使用手册\">#</a> Git使用手册</h1>\n<h2 id=\"安装\"><a class=\"header-anchor\" href=\"#安装\">#</a> 安装</h2>\n<p>官网下载：<a href=\"https://git-scm.com/downloads\" target=\"_blank\" rel=\"noopener noreferrer\">https://git-scm.com/downloads<OutboundLink/></a> 下载完成后使用默认进行安装。</p>\n<p>安装完成后，在开始菜单里找到 <code>Git</code> -&gt; <code>Git Bash</code>，蹦出一个类似命令行窗口的东西，就说明Git安装成功！\n还需要最后一步设置，在命令行输入：</p>\n<!--beforebegin--><div class=\"language-bash line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-bash\"><code><span class=\"token function\">git</span> config --global user.name <span class=\"token string\">\"Your Name\"</span>\n<span class=\"token function\">git</span> config --global user.email <span class=\"token string\">\"email@example.com\"</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br></div><!--beforeend--></div><!--afterend--><p>因为Git是分布式版本控制系统，所以，每个机器都必须自报家门：你的名字和Email地址。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "提高学习效率的策略",
      "frontmatter": {
        "title": "提高学习效率的策略",
        "date": "2020-01-04T11:54:14.000Z",
        "permalink": "/pages/a8692ab3bdcb4588",
        "categories": [
          "更多",
          "学习"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/04.%E6%9B%B4%E5%A4%9A/01.%E5%AD%A6%E4%B9%A0/02.%E6%8F%90%E9%AB%98%E5%AD%A6%E4%B9%A0%E6%95%88%E7%8E%87%E7%9A%84%E7%AD%96%E7%95%A5.html",
      "relativePath": "04.更多/01.学习/02.提高学习效率的策略.md",
      "key": "v-067eaa58",
      "path": "/pages/a8692ab3bdcb4588/",
      "headers": [
        {
          "level": 3,
          "title": "检索式学习",
          "slug": "检索式学习"
        },
        {
          "level": 3,
          "title": "频繁的集中练习只会产生短期记忆",
          "slug": "频繁的集中练习只会产生短期记忆"
        },
        {
          "level": 3,
          "title": "间隔练习使知识存储更牢固",
          "slug": "间隔练习使知识存储更牢固"
        },
        {
          "level": 3,
          "title": "穿插练习有助于长期记忆",
          "slug": "穿插练习有助于长期记忆"
        },
        {
          "level": 3,
          "title": "多样化练习促进知识的活学活用",
          "slug": "多样化练习促进知识的活学活用"
        },
        {
          "level": 3,
          "title": "小总结",
          "slug": "小总结"
        },
        {
          "level": 3,
          "title": "知识的“滚雪球”效应",
          "slug": "知识的-滚雪球-效应"
        }
      ],
      "excerpt": "<h1 id=\"提高学习效率的策略\"><a class=\"header-anchor\" href=\"#提高学习效率的策略\">#</a> 提高学习效率的策略</h1>\n<p>推荐一本关于学习方法的书《认知天性》，里面有讲到有一些简单实用的学习策略，能让大家学的更好、记得更牢，而且这些策略人人可用，时时可用。这些方法包括各种形式的<strong>检索练习</strong>——例如小的测试和自测，<strong>间隔练习</strong>、<strong>穿插</strong>不同但相关科目或技能的练习（<strong>多样化练习</strong>），在别人教给你解决方案前自己先试着解决问题，从不同类型问题中提取基本原理和规则。由于学习是反复的过程，需要复习早先学过的东西，持续更新已知，并把它们和新知识联系起来。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "网站",
      "frontmatter": {
        "title": "网站",
        "permalink": "/pages/beb6c0bd8a66cea6",
        "date": "2020-04-19T11:33:04.000Z",
        "article": false
      },
      "regularPath": "/06.%E6%94%B6%E8%97%8F%E5%A4%B9/01.%E7%BD%91%E7%AB%99.html",
      "relativePath": "06.收藏夹/01.网站.md",
      "key": "v-e8b57c5a",
      "path": "/pages/beb6c0bd8a66cea6/",
      "headers": [
        {
          "level": 2,
          "title": "文档",
          "slug": "文档"
        },
        {
          "level": 2,
          "title": "社区",
          "slug": "社区"
        },
        {
          "level": 2,
          "title": "博客",
          "slug": "博客"
        },
        {
          "level": 2,
          "title": "文章",
          "slug": "文章"
        },
        {
          "level": 2,
          "title": "视频",
          "slug": "视频"
        },
        {
          "level": 3,
          "title": "电视直播",
          "slug": "电视直播"
        },
        {
          "level": 2,
          "title": "Github",
          "slug": "github"
        },
        {
          "level": 2,
          "title": "在线工具",
          "slug": "在线工具"
        },
        {
          "level": 3,
          "title": "开发",
          "slug": "开发"
        },
        {
          "level": 3,
          "title": "代码编辑",
          "slug": "代码编辑"
        },
        {
          "level": 3,
          "title": "UI",
          "slug": "ui"
        },
        {
          "level": 3,
          "title": "Emoji表情",
          "slug": "emoji表情"
        },
        {
          "level": 3,
          "title": "图片压缩",
          "slug": "图片压缩"
        },
        {
          "level": 3,
          "title": "作图",
          "slug": "作图"
        },
        {
          "level": 3,
          "title": "CSS",
          "slug": "css"
        },
        {
          "level": 3,
          "title": "CDN加速",
          "slug": "cdn加速"
        },
        {
          "level": 3,
          "title": "正则",
          "slug": "正则"
        },
        {
          "level": 3,
          "title": "其他",
          "slug": "其他"
        },
        {
          "level": 2,
          "title": "设计",
          "slug": "设计"
        },
        {
          "level": 3,
          "title": "图库",
          "slug": "图库"
        },
        {
          "level": 2,
          "title": "有趣",
          "slug": "有趣"
        },
        {
          "level": 2,
          "title": "交互",
          "slug": "交互"
        },
        {
          "level": 2,
          "title": "教程",
          "slug": "教程"
        },
        {
          "level": 2,
          "title": "产品",
          "slug": "产品"
        },
        {
          "level": 2,
          "title": "实用",
          "slug": "实用"
        },
        {
          "level": 2,
          "title": "Talk",
          "slug": "talk"
        },
        {
          "level": 2,
          "title": "算法",
          "slug": "算法"
        }
      ],
      "excerpt": "<h1 id=\"个人收藏夹\"><a class=\"header-anchor\" href=\"#个人收藏夹\">#</a> 个人收藏夹</h1>\n<p><a href=\"https://panjiachen.github.io/awesome-bookmarks/\" target=\"_blank\" rel=\"noopener noreferrer\">一位大佬的收藏夹<OutboundLink/></a></p>\n<p><a href=\"https://maliquankai.com/designnav/\" target=\"_blank\" rel=\"noopener noreferrer\">码力全开资源库<OutboundLink/></a> 很全很强大，独立开发者/设计干货/优质利器/工具资源...</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "字符串的新增方法",
      "frontmatter": {
        "title": "字符串的新增方法",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/a650b4a0ebfc9350",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/05.%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%96%B0%E5%A2%9E%E6%96%B9%E6%B3%95.html",
      "relativePath": "《ES6 教程》笔记/05.字符串的新增方法.md",
      "key": "v-6190b3b6",
      "path": "/pages/a650b4a0ebfc9350/",
      "headers": [
        {
          "level": 2,
          "title": "String.fromCodePoint()",
          "slug": "string-fromcodepoint"
        },
        {
          "level": 2,
          "title": "String.raw()",
          "slug": "string-raw"
        },
        {
          "level": 2,
          "title": "实例方法：codePointAt()",
          "slug": "实例方法：codepointat"
        },
        {
          "level": 2,
          "title": "实例方法：normalize()",
          "slug": "实例方法：normalize"
        },
        {
          "level": 2,
          "title": "实例方法：includes(), startsWith(), endsWith()",
          "slug": "实例方法：includes-startswith-endswith"
        },
        {
          "level": 2,
          "title": "实例方法：repeat()",
          "slug": "实例方法：repeat"
        },
        {
          "level": 2,
          "title": "实例方法：padStart()，padEnd()",
          "slug": "实例方法：padstart-，padend"
        },
        {
          "level": 2,
          "title": "实例方法：trimStart()，trimEnd()",
          "slug": "实例方法：trimstart-，trimend"
        },
        {
          "level": 2,
          "title": "实例方法：matchAll()",
          "slug": "实例方法：matchall"
        }
      ],
      "excerpt": "<h1 id=\"字符串的新增方法\"><a class=\"header-anchor\" href=\"#字符串的新增方法\">#</a> 字符串的新增方法</h1>\n<p>本章介绍字符串对象的新增方法。</p>\n<h2 id=\"string-fromcodepoint\"><a class=\"header-anchor\" href=\"#string-fromcodepoint\">#</a> String.fromCodePoint()</h2>\n<p>ES5 提供<code>String.fromCharCode()</code>方法，用于从 Unicode 码点返回对应字符，但是这个方法不能识别码点大于<code>0xFFFF</code>的字符。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code>String<span class=\"token punctuation\">.</span><span class=\"token function\">fromCharCode</span><span class=\"token punctuation\">(</span><span class=\"token number\">0x20BB7</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\">// \"ஷ\"</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Reflect",
      "frontmatter": {
        "title": "Reflect",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/74de3e45e4491e95",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/15.Reflect.html",
      "relativePath": "《ES6 教程》笔记/15.Reflect.md",
      "key": "v-f3ecbd4e",
      "path": "/pages/74de3e45e4491e95/",
      "headers": [
        {
          "level": 2,
          "title": "概述",
          "slug": "概述"
        },
        {
          "level": 2,
          "title": "静态方法",
          "slug": "静态方法"
        },
        {
          "level": 3,
          "title": "Reflect.get(target, name, receiver)",
          "slug": "reflect-get-target-name-receiver"
        },
        {
          "level": 3,
          "title": "Reflect.set(target, name, value, receiver)",
          "slug": "reflect-set-target-name-value-receiver"
        },
        {
          "level": 3,
          "title": "Reflect.has(obj, name)",
          "slug": "reflect-has-obj-name"
        },
        {
          "level": 3,
          "title": "Reflect.deleteProperty(obj, name)",
          "slug": "reflect-deleteproperty-obj-name"
        },
        {
          "level": 3,
          "title": "Reflect.construct(target, args)",
          "slug": "reflect-construct-target-args"
        },
        {
          "level": 3,
          "title": "Reflect.getPrototypeOf(obj)",
          "slug": "reflect-getprototypeof-obj"
        },
        {
          "level": 3,
          "title": "Reflect.setPrototypeOf(obj, newProto)",
          "slug": "reflect-setprototypeof-obj-newproto"
        },
        {
          "level": 3,
          "title": "Reflect.apply(func, thisArg, args)",
          "slug": "reflect-apply-func-thisarg-args"
        },
        {
          "level": 3,
          "title": "Reflect.defineProperty(target, propertyKey, attributes)",
          "slug": "reflect-defineproperty-target-propertykey-attributes"
        },
        {
          "level": 3,
          "title": "Reflect.getOwnPropertyDescriptor(target, propertyKey)",
          "slug": "reflect-getownpropertydescriptor-target-propertykey"
        },
        {
          "level": 3,
          "title": "Reflect.isExtensible (target)",
          "slug": "reflect-isextensible-target"
        },
        {
          "level": 3,
          "title": "Reflect.preventExtensions(target)",
          "slug": "reflect-preventextensions-target"
        },
        {
          "level": 3,
          "title": "Reflect.ownKeys (target)",
          "slug": "reflect-ownkeys-target"
        },
        {
          "level": 2,
          "title": "实例：使用 Proxy 实现观察者模式",
          "slug": "实例：使用-proxy-实现观察者模式"
        }
      ],
      "excerpt": "<h1 id=\"reflect\"><a class=\"header-anchor\" href=\"#reflect\">#</a> Reflect</h1>\n<h2 id=\"概述\"><a class=\"header-anchor\" href=\"#概述\">#</a> 概述</h2>\n<p><code>Reflect</code>对象与<code>Proxy</code>对象一样，也是 ES6 为了操作对象而提供的新 API。<code>Reflect</code>对象的设计目的有这样几个。</p>\n<p>（1） 将<code>Object</code>对象的一些明显属于语言内部的方法（比如<code>Object.defineProperty</code>），放到<code>Reflect</code>对象上。现阶段，某些方法同时在<code>Object</code>和<code>Reflect</code>对象上部署，未来的新方法将只部署在<code>Reflect</code>对象上。也就是说，从<code>Reflect</code>对象上可以拿到语言内部的方法。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "编程风格",
      "frontmatter": {
        "title": "编程风格",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/984bf549204bb266",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/25.%E7%BC%96%E7%A8%8B%E9%A3%8E%E6%A0%BC.html",
      "relativePath": "《ES6 教程》笔记/25.编程风格.md",
      "key": "v-a96de3e2",
      "path": "/pages/984bf549204bb266/",
      "headers": [
        {
          "level": 2,
          "title": "块级作用域",
          "slug": "块级作用域"
        },
        {
          "level": 2,
          "title": "字符串",
          "slug": "字符串"
        },
        {
          "level": 2,
          "title": "解构赋值",
          "slug": "解构赋值"
        },
        {
          "level": 2,
          "title": "对象",
          "slug": "对象"
        },
        {
          "level": 2,
          "title": "数组",
          "slug": "数组"
        },
        {
          "level": 2,
          "title": "函数",
          "slug": "函数"
        },
        {
          "level": 2,
          "title": "Map 结构",
          "slug": "map-结构"
        },
        {
          "level": 2,
          "title": "Class",
          "slug": "class"
        },
        {
          "level": 2,
          "title": "模块",
          "slug": "模块"
        },
        {
          "level": 2,
          "title": "ESLint 的使用",
          "slug": "eslint-的使用"
        }
      ],
      "excerpt": "<h1 id=\"编程风格\"><a class=\"header-anchor\" href=\"#编程风格\">#</a> 编程风格</h1>\n<p>本章探讨如何将 ES6 的新语法，运用到编码实践之中，与传统的 JavaScript 语法结合在一起，写出合理的、易于阅读和维护的代码。</p>\n<p>多家公司和组织已经公开了它们的风格规范，下面的内容主要参考了 <a href=\"https://github.com/airbnb/javascript\" target=\"_blank\" rel=\"noopener noreferrer\">Airbnb<OutboundLink/></a> 公司的 JavaScript 风格规范。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "异步操作",
      "frontmatter": {
        "title": "异步操作",
        "date": "2020-01-12T11:49:16.000Z",
        "permalink": "/pages/d61b1cb4cdac1f63",
        "categories": [
          "《JavaScript教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AJavaScript%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/04.%E5%BC%82%E6%AD%A5%E6%93%8D%E4%BD%9C.html",
      "relativePath": "《JavaScript教程》笔记/04.异步操作.md",
      "key": "v-11baf247",
      "path": "/pages/d61b1cb4cdac1f63/",
      "headers": [
        {
          "level": 2,
          "title": "一、异步操作概述",
          "slug": "一、异步操作概述"
        },
        {
          "level": 3,
          "title": "1、单线程模型",
          "slug": "_1、单线程模型"
        },
        {
          "level": 3,
          "title": "2、同步任务和异步任务",
          "slug": "_2、同步任务和异步任务"
        },
        {
          "level": 3,
          "title": "3、任务队列和事件循环",
          "slug": "_3、任务队列和事件循环"
        },
        {
          "level": 3,
          "title": "4、异步操作的模式",
          "slug": "_4、异步操作的模式"
        },
        {
          "level": 3,
          "title": "5、异步操作的流程控制",
          "slug": "_5、异步操作的流程控制"
        },
        {
          "level": 2,
          "title": "文档",
          "slug": "文档"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "基础类型",
      "frontmatter": {
        "title": "基础类型",
        "date": "2020-01-05T10:17:47.000Z",
        "permalink": "/pages/28672e2743bbc3a7",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "TypeScript 常用语法"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/02.TypeScript%20%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95/01.%E5%9F%BA%E7%A1%80%E7%B1%BB%E5%9E%8B.html",
      "relativePath": "《TypeScript 从零实现 axios》/02.TypeScript 常用语法/01.基础类型.md",
      "key": "v-45bbfb92",
      "path": "/pages/28672e2743bbc3a7/",
      "headers": [
        {
          "level": 2,
          "title": "布尔值",
          "slug": "布尔值"
        },
        {
          "level": 2,
          "title": "数字",
          "slug": "数字"
        },
        {
          "level": 2,
          "title": "字符串",
          "slug": "字符串"
        },
        {
          "level": 2,
          "title": "数组",
          "slug": "数组"
        },
        {
          "level": 2,
          "title": "元组 Tuple",
          "slug": "元组-tuple"
        },
        {
          "level": 2,
          "title": "枚举",
          "slug": "枚举"
        },
        {
          "level": 2,
          "title": "any",
          "slug": "any"
        },
        {
          "level": 2,
          "title": "void",
          "slug": "void"
        },
        {
          "level": 2,
          "title": "null 和 undefined",
          "slug": "null-和-undefined"
        },
        {
          "level": 2,
          "title": "never",
          "slug": "never"
        },
        {
          "level": 2,
          "title": "object",
          "slug": "object"
        },
        {
          "level": 2,
          "title": "类型断言",
          "slug": "类型断言"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "变量声明",
      "frontmatter": {
        "title": "变量声明",
        "date": "2020-01-05T10:17:47.000Z",
        "permalink": "/pages/54add7f5cf78088e",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "TypeScript 常用语法"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/02.TypeScript%20%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95/02.%E5%8F%98%E9%87%8F%E5%A3%B0%E6%98%8E.html",
      "relativePath": "《TypeScript 从零实现 axios》/02.TypeScript 常用语法/02.变量声明.md",
      "key": "v-7ba4aaa3",
      "path": "/pages/54add7f5cf78088e/",
      "headers": [
        {
          "level": 2,
          "title": "var 声明",
          "slug": "var-声明"
        },
        {
          "level": 3,
          "title": "作用域规则",
          "slug": "作用域规则"
        },
        {
          "level": 3,
          "title": "捕获变量怪异之处",
          "slug": "捕获变量怪异之处"
        },
        {
          "level": 2,
          "title": "let 声明",
          "slug": "let-声明"
        },
        {
          "level": 3,
          "title": "块作用域",
          "slug": "块作用域"
        },
        {
          "level": 3,
          "title": "重定义及屏蔽",
          "slug": "重定义及屏蔽"
        },
        {
          "level": 3,
          "title": "块级作用域变量的获取",
          "slug": "块级作用域变量的获取"
        },
        {
          "level": 2,
          "title": "const 声明",
          "slug": "const-声明"
        },
        {
          "level": 2,
          "title": "let vs. const",
          "slug": "let-vs-const"
        },
        {
          "level": 2,
          "title": "解构",
          "slug": "解构"
        },
        {
          "level": 3,
          "title": "解构数组",
          "slug": "解构数组"
        },
        {
          "level": 3,
          "title": "对象解构",
          "slug": "对象解构"
        },
        {
          "level": 3,
          "title": "属性重命名",
          "slug": "属性重命名"
        },
        {
          "level": 3,
          "title": "默认值",
          "slug": "默认值"
        },
        {
          "level": 3,
          "title": "函数声明",
          "slug": "函数声明"
        },
        {
          "level": 2,
          "title": "展开",
          "slug": "展开"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "泛型",
      "frontmatter": {
        "title": "泛型",
        "date": "2020-01-05T10:17:47.000Z",
        "permalink": "/pages/8045759ec4ad3c01",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "TypeScript 常用语法"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/02.TypeScript%20%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95/06.%E6%B3%9B%E5%9E%8B.html",
      "relativePath": "《TypeScript 从零实现 axios》/02.TypeScript 常用语法/06.泛型.md",
      "key": "v-53687640",
      "path": "/pages/8045759ec4ad3c01/",
      "headers": [
        {
          "level": 2,
          "title": "基础示例",
          "slug": "基础示例"
        },
        {
          "level": 2,
          "title": "使用泛型变量",
          "slug": "使用泛型变量"
        },
        {
          "level": 2,
          "title": "泛型类型",
          "slug": "泛型类型"
        },
        {
          "level": 2,
          "title": "泛型类",
          "slug": "泛型类"
        },
        {
          "level": 2,
          "title": "泛型约束",
          "slug": "泛型约束"
        },
        {
          "level": 3,
          "title": "在泛型约束中使用类型参数",
          "slug": "在泛型约束中使用类型参数"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "函数",
      "frontmatter": {
        "title": "函数",
        "date": "2020-01-05T10:17:47.000Z",
        "permalink": "/pages/870a51ba2a9edfad",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "TypeScript 常用语法"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/02.TypeScript%20%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95/05.%E5%87%BD%E6%95%B0.html",
      "relativePath": "《TypeScript 从零实现 axios》/02.TypeScript 常用语法/05.函数.md",
      "key": "v-f3bface0",
      "path": "/pages/870a51ba2a9edfad/",
      "headers": [
        {
          "level": 2,
          "title": "基本示例",
          "slug": "基本示例"
        },
        {
          "level": 2,
          "title": "函数类型",
          "slug": "函数类型"
        },
        {
          "level": 3,
          "title": "为函数定义类型",
          "slug": "为函数定义类型"
        },
        {
          "level": 3,
          "title": "书写完整函数类型",
          "slug": "书写完整函数类型"
        },
        {
          "level": 3,
          "title": "推断类型",
          "slug": "推断类型"
        },
        {
          "level": 2,
          "title": "可选参数和默认参数",
          "slug": "可选参数和默认参数"
        },
        {
          "level": 3,
          "title": "剩余参数",
          "slug": "剩余参数"
        },
        {
          "level": 2,
          "title": "this",
          "slug": "this"
        },
        {
          "level": 3,
          "title": "this 和箭头函数",
          "slug": "this-和箭头函数"
        },
        {
          "level": 3,
          "title": "this 参数",
          "slug": "this-参数"
        },
        {
          "level": 3,
          "title": "this 参数在回调函数里",
          "slug": "this-参数在回调函数里"
        },
        {
          "level": 2,
          "title": "重载",
          "slug": "重载"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "编写基础请求代码",
      "frontmatter": {
        "title": "编写基础请求代码",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/acfe1e0b401fa984",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 项目初始化"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/03.ts-axios%20%E9%A1%B9%E7%9B%AE%E5%88%9D%E5%A7%8B%E5%8C%96/03.%E7%BC%96%E5%86%99%E5%9F%BA%E7%A1%80%E8%AF%B7%E6%B1%82%E4%BB%A3%E7%A0%81.html",
      "relativePath": "《TypeScript 从零实现 axios》/03.ts-axios 项目初始化/03.编写基础请求代码.md",
      "key": "v-2a1689f9",
      "path": "/pages/acfe1e0b401fa984/",
      "headers": [
        {
          "level": 2,
          "title": "创建入口文件",
          "slug": "创建入口文件"
        },
        {
          "level": 3,
          "title": "编译配置文件 tsconfig.json",
          "slug": "编译配置文件-tsconfig-json"
        },
        {
          "level": 3,
          "title": "定义 AxiosRequestConfig 接口类型",
          "slug": "定义-axiosrequestconfig-接口类型"
        },
        {
          "level": 2,
          "title": "利用 XMLHttpRequest 发送请求",
          "slug": "利用-xmlhttprequest-发送请求"
        },
        {
          "level": 3,
          "title": "引入 xhr 模块",
          "slug": "引入-xhr-模块"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        },
        {
          "level": 3,
          "title": "依赖安装",
          "slug": "依赖安装"
        },
        {
          "level": 3,
          "title": "编写 webpack 配置文件",
          "slug": "编写-webpack-配置文件"
        },
        {
          "level": 3,
          "title": "编写 server 文件",
          "slug": "编写-server-文件"
        },
        {
          "level": 3,
          "title": "编写 demo 代码",
          "slug": "编写-demo-代码"
        },
        {
          "level": 3,
          "title": "运行 demo",
          "slug": "运行-demo"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "高级类型",
      "frontmatter": {
        "title": "高级类型",
        "date": "2020-01-05T10:17:47.000Z",
        "permalink": "/pages/3fb6c2f52ab398e3",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "TypeScript 常用语法"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/02.TypeScript%20%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95/08.%E9%AB%98%E7%BA%A7%E7%B1%BB%E5%9E%8B.html",
      "relativePath": "《TypeScript 从零实现 axios》/02.TypeScript 常用语法/08.高级类型.md",
      "key": "v-bd307690",
      "path": "/pages/3fb6c2f52ab398e3/",
      "headers": [
        {
          "level": 2,
          "title": "交叉类型",
          "slug": "交叉类型"
        },
        {
          "level": 2,
          "title": "联合类型",
          "slug": "联合类型"
        },
        {
          "level": 2,
          "title": "类型保护",
          "slug": "类型保护"
        },
        {
          "level": 3,
          "title": "用户自定义的类型保护",
          "slug": "用户自定义的类型保护"
        },
        {
          "level": 3,
          "title": "typeof 类型保护",
          "slug": "typeof-类型保护"
        },
        {
          "level": 3,
          "title": "instanceof 类型保护",
          "slug": "instanceof-类型保护"
        },
        {
          "level": 2,
          "title": "可以为 null 的类型",
          "slug": "可以为-null-的类型"
        },
        {
          "level": 3,
          "title": "可选参数和可选属性",
          "slug": "可选参数和可选属性"
        },
        {
          "level": 3,
          "title": "类型保护和类型断言",
          "slug": "类型保护和类型断言"
        },
        {
          "level": 2,
          "title": "字符串字面量类型",
          "slug": "字符串字面量类型"
        },
        {
          "level": 2,
          "title": "总结",
          "slug": "总结"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "扩展接口",
      "frontmatter": {
        "title": "扩展接口",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/034e320f4af88bd4",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 接口扩展"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/06.ts-axios%20%E6%8E%A5%E5%8F%A3%E6%89%A9%E5%B1%95/01.%E6%89%A9%E5%B1%95%E6%8E%A5%E5%8F%A3.html",
      "relativePath": "《TypeScript 从零实现 axios》/06.ts-axios 接口扩展/01.扩展接口.md",
      "key": "v-d8438f98",
      "path": "/pages/034e320f4af88bd4/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "接口类型定义",
          "slug": "接口类型定义"
        },
        {
          "level": 2,
          "title": "创建 Axios 类",
          "slug": "创建-axios-类"
        },
        {
          "level": 2,
          "title": "混合对象实现",
          "slug": "混合对象实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "拦截器设计与实现",
      "frontmatter": {
        "title": "拦截器设计与实现",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/70651900f022f586",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 拦截器实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/07.ts-axios%20%E6%8B%A6%E6%88%AA%E5%99%A8%E5%AE%9E%E7%8E%B0/01.%E6%8B%A6%E6%88%AA%E5%99%A8%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0.html",
      "relativePath": "《TypeScript 从零实现 axios》/07.ts-axios 拦截器实现/01.拦截器设计与实现.md",
      "key": "v-092122ab",
      "path": "/pages/70651900f022f586/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "整体设计",
          "slug": "整体设计"
        },
        {
          "level": 2,
          "title": "拦截器管理类实现",
          "slug": "拦截器管理类实现"
        },
        {
          "level": 3,
          "title": "接口定义",
          "slug": "接口定义"
        },
        {
          "level": 3,
          "title": "代码实现",
          "slug": "代码实现"
        },
        {
          "level": 2,
          "title": "链式调用实现",
          "slug": "链式调用实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "合并配置的设计与实现",
      "frontmatter": {
        "title": "合并配置的设计与实现",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/937e4de6b81edeca",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 配置化实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/08.ts-axios%20%E9%85%8D%E7%BD%AE%E5%8C%96%E5%AE%9E%E7%8E%B0/01.%E5%90%88%E5%B9%B6%E9%85%8D%E7%BD%AE%E7%9A%84%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0.html",
      "relativePath": "《TypeScript 从零实现 axios》/08.ts-axios 配置化实现/01.合并配置的设计与实现.md",
      "key": "v-c65e594a",
      "path": "/pages/937e4de6b81edeca/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "默认配置",
          "slug": "默认配置"
        },
        {
          "level": 3,
          "title": "默认配置定义",
          "slug": "默认配置定义"
        },
        {
          "level": 3,
          "title": "添加到 axios 对象中",
          "slug": "添加到-axios-对象中"
        },
        {
          "level": 2,
          "title": "配置合并及策略",
          "slug": "配置合并及策略"
        },
        {
          "level": 3,
          "title": "合并方法",
          "slug": "合并方法"
        },
        {
          "level": 3,
          "title": "默认合并策略",
          "slug": "默认合并策略"
        },
        {
          "level": 3,
          "title": "只接受自定义配置合并策略",
          "slug": "只接受自定义配置合并策略"
        },
        {
          "level": 3,
          "title": "复杂对象合并策略",
          "slug": "复杂对象合并策略"
        },
        {
          "level": 2,
          "title": "flatten headers",
          "slug": "flatten-headers"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "取消功能的设计与实现",
      "frontmatter": {
        "title": "取消功能的设计与实现",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/fdc6da5372397430",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 取消功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/09.ts-axios%20%E5%8F%96%E6%B6%88%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/01.%E5%8F%96%E6%B6%88%E5%8A%9F%E8%83%BD%E7%9A%84%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0.html",
      "relativePath": "《TypeScript 从零实现 axios》/09.ts-axios 取消功能实现/01.取消功能的设计与实现.md",
      "key": "v-a6e37a70",
      "path": "/pages/fdc6da5372397430/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "异步分离的设计方案",
          "slug": "异步分离的设计方案"
        },
        {
          "level": 2,
          "title": "CancelToken 类实现",
          "slug": "canceltoken-类实现"
        },
        {
          "level": 3,
          "title": "接口定义",
          "slug": "接口定义"
        },
        {
          "level": 3,
          "title": "代码实现",
          "slug": "代码实现"
        },
        {
          "level": 2,
          "title": "CancelToken 扩展静态接口",
          "slug": "canceltoken-扩展静态接口"
        },
        {
          "level": 3,
          "title": "接口定义",
          "slug": "接口定义-2"
        },
        {
          "level": 3,
          "title": "代码实现",
          "slug": "代码实现-2"
        },
        {
          "level": 2,
          "title": "Cancel 类实现及 axios 的扩展",
          "slug": "cancel-类实现及-axios-的扩展"
        },
        {
          "level": 3,
          "title": "接口定义",
          "slug": "接口定义-3"
        },
        {
          "level": 3,
          "title": "代码实现",
          "slug": "代码实现-3"
        },
        {
          "level": 2,
          "title": "额外逻辑实现",
          "slug": "额外逻辑实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "上传和下载的进度监控",
      "frontmatter": {
        "title": "上传和下载的进度监控",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/1376fd897809036e",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 更多功能实现"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/10.ts-axios%20%E6%9B%B4%E5%A4%9A%E5%8A%9F%E8%83%BD%E5%AE%9E%E7%8E%B0/03.%E4%B8%8A%E4%BC%A0%E5%92%8C%E4%B8%8B%E8%BD%BD%E7%9A%84%E8%BF%9B%E5%BA%A6%E7%9B%91%E6%8E%A7.html",
      "relativePath": "《TypeScript 从零实现 axios》/10.ts-axios 更多功能实现/03.上传和下载的进度监控.md",
      "key": "v-8b5f29f2",
      "path": "/pages/1376fd897809036e/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "代码实现",
          "slug": "代码实现"
        },
        {
          "level": 2,
          "title": "demo 编写",
          "slug": "demo-编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "请求模块单元测试",
      "frontmatter": {
        "title": "请求模块单元测试",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/e1d15dec8634e6b5",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 单元测试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/11.ts-axios%20%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/04.%E8%AF%B7%E6%B1%82%E6%A8%A1%E5%9D%97%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html",
      "relativePath": "《TypeScript 从零实现 axios》/11.ts-axios 单元测试/04.请求模块单元测试.md",
      "key": "v-7c56dd39",
      "path": "/pages/e1d15dec8634e6b5/",
      "headers": [
        {
          "level": 2,
          "title": "jasmine-ajax",
          "slug": "jasmine-ajax"
        },
        {
          "level": 2,
          "title": "测试代码编写",
          "slug": "测试代码编写"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "ts-axios 编译与发布",
      "frontmatter": {
        "title": "ts-axios 编译与发布",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/3e5d5a45ad50f198",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 部署与发布"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/12.ts-axios%20%E9%83%A8%E7%BD%B2%E4%B8%8E%E5%8F%91%E5%B8%83/01.ts-axios%20%E7%BC%96%E8%AF%91%E4%B8%8E%E5%8F%91%E5%B8%83.html",
      "relativePath": "《TypeScript 从零实现 axios》/12.ts-axios 部署与发布/01.ts-axios 编译与发布.md",
      "key": "v-2fe18a0a",
      "path": "/pages/3e5d5a45ad50f198/",
      "headers": [
        {
          "level": 2,
          "title": "需求分析",
          "slug": "需求分析"
        },
        {
          "level": 2,
          "title": "编译和打包",
          "slug": "编译和打包"
        },
        {
          "level": 3,
          "title": "修改 rollup.config.ts",
          "slug": "修改-rollup-config-ts"
        },
        {
          "level": 3,
          "title": "修改 package.json",
          "slug": "修改-package-json"
        },
        {
          "level": 2,
          "title": "自动化部署",
          "slug": "自动化部署"
        },
        {
          "level": 3,
          "title": "修改 package.json",
          "slug": "修改-package-json-2"
        },
        {
          "level": 3,
          "title": "编写部署脚本",
          "slug": "编写部署脚本"
        },
        {
          "level": 2,
          "title": "运行部署脚本",
          "slug": "运行部署脚本"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "剩余模块单元测试",
      "frontmatter": {
        "title": "剩余模块单元测试",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/9572134781ba6a25",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 单元测试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/11.ts-axios%20%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/10.%E5%89%A9%E4%BD%99%E6%A8%A1%E5%9D%97%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html",
      "relativePath": "《TypeScript 从零实现 axios》/11.ts-axios 单元测试/10.剩余模块单元测试.md",
      "key": "v-87435646",
      "path": "/pages/9572134781ba6a25/",
      "headers": [
        {
          "level": 2,
          "title": "defaults 模块单元测试",
          "slug": "defaults-模块单元测试"
        },
        {
          "level": 2,
          "title": "transform 模块单元测试",
          "slug": "transform-模块单元测试"
        },
        {
          "level": 2,
          "title": "xsrf 模块单元测试",
          "slug": "xsrf-模块单元测试"
        },
        {
          "level": 2,
          "title": "上传下载模块单元测试",
          "slug": "上传下载模块单元测试"
        },
        {
          "level": 2,
          "title": "HTTP 授权模块单元测试",
          "slug": "http-授权模块单元测试"
        },
        {
          "level": 2,
          "title": "静态方法模块单元测试",
          "slug": "静态方法模块单元测试"
        },
        {
          "level": 2,
          "title": "补充未覆盖的代码测试",
          "slug": "补充未覆盖的代码测试"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Markdown使用教程",
      "frontmatter": {
        "title": "Markdown使用教程",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/ad247c4332211551",
        "categories": [
          "技术",
          "技术文档"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/01.%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/02.Markdown%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B.html",
      "relativePath": "03.技术/01.技术文档/02.Markdown使用教程.md",
      "key": "v-0c3415e6",
      "path": "/pages/ad247c4332211551/",
      "headers": [
        {
          "level": 2,
          "title": "一、Markdown",
          "slug": "一、markdown"
        },
        {
          "level": 3,
          "title": "简介",
          "slug": "简介"
        },
        {
          "level": 3,
          "title": "应用",
          "slug": "应用"
        },
        {
          "level": 3,
          "title": "编辑器",
          "slug": "编辑器"
        },
        {
          "level": 2,
          "title": "二、徽章",
          "slug": "二、徽章"
        },
        {
          "level": 2,
          "title": "三、设置目录",
          "slug": "三、设置目录"
        },
        {
          "level": 2,
          "title": "四、标题",
          "slug": "四、标题"
        },
        {
          "level": 2,
          "title": "二级标题",
          "slug": "二级标题"
        },
        {
          "level": 3,
          "title": "三级标题",
          "slug": "三级标题"
        },
        {
          "level": 2,
          "title": "五、文本",
          "slug": "五、文本"
        },
        {
          "level": 3,
          "title": "段落",
          "slug": "段落"
        },
        {
          "level": 3,
          "title": "字体",
          "slug": "字体"
        },
        {
          "level": 3,
          "title": "删除线",
          "slug": "删除线"
        },
        {
          "level": 3,
          "title": "下划线",
          "slug": "下划线"
        },
        {
          "level": 3,
          "title": "文字高亮",
          "slug": "文字高亮"
        },
        {
          "level": 3,
          "title": "分隔线",
          "slug": "分隔线"
        },
        {
          "level": 3,
          "title": "脚注",
          "slug": "脚注"
        },
        {
          "level": 2,
          "title": "六、列表",
          "slug": "六、列表"
        },
        {
          "level": 3,
          "title": "无序列表",
          "slug": "无序列表"
        },
        {
          "level": 3,
          "title": "有序列表",
          "slug": "有序列表"
        },
        {
          "level": 3,
          "title": "折叠列表",
          "slug": "折叠列表"
        },
        {
          "level": 3,
          "title": "带复选框列表",
          "slug": "带复选框列表"
        },
        {
          "level": 3,
          "title": "列表嵌套",
          "slug": "列表嵌套"
        },
        {
          "level": 2,
          "title": "七、区块引用",
          "slug": "七、区块引用"
        },
        {
          "level": 2,
          "title": "八、代码",
          "slug": "八、代码"
        },
        {
          "level": 3,
          "title": "代码区块",
          "slug": "代码区块"
        },
        {
          "level": 2,
          "title": "九、链接",
          "slug": "九、链接"
        },
        {
          "level": 3,
          "title": "变量链接",
          "slug": "变量链接"
        },
        {
          "level": 3,
          "title": "Github仓库中使用内部链接",
          "slug": "github仓库中使用内部链接"
        },
        {
          "level": 3,
          "title": "锚点链接",
          "slug": "锚点链接"
        },
        {
          "level": 2,
          "title": "十、图片",
          "slug": "十、图片"
        },
        {
          "level": 3,
          "title": "图片宽高",
          "slug": "图片宽高"
        },
        {
          "level": 3,
          "title": "相对路径以及Github中使用图片",
          "slug": "相对路径以及github中使用图片"
        },
        {
          "level": 2,
          "title": "十一、表格",
          "slug": "十一、表格"
        },
        {
          "level": 2,
          "title": "十二、Emoji表情包",
          "slug": "十二、emoji表情包"
        },
        {
          "level": 2,
          "title": "十三、其他技巧",
          "slug": "十三、其他技巧"
        },
        {
          "level": 3,
          "title": "支持的 HTML 元素",
          "slug": "支持的-html-元素"
        },
        {
          "level": 3,
          "title": "转义",
          "slug": "转义"
        },
        {
          "level": 3,
          "title": "数学公式",
          "slug": "数学公式"
        },
        {
          "level": 3,
          "title": "图表",
          "slug": "图表"
        },
        {
          "level": 3,
          "title": "流程图",
          "slug": "流程图"
        },
        {
          "level": 3,
          "title": "时序图",
          "slug": "时序图"
        },
        {
          "level": 3,
          "title": "甘特图",
          "slug": "甘特图"
        }
      ],
      "excerpt": "<h1 id=\"markdown使用教程\"><a class=\"header-anchor\" href=\"#markdown使用教程\">#</a> Markdown使用教程</h1>\n<h2 id=\"一、markdown\"><a class=\"header-anchor\" href=\"#一、markdown\">#</a> 一、Markdown</h2>\n<h3 id=\"简介\"><a class=\"header-anchor\" href=\"#简介\">#</a> 简介</h3>\n<p><img src=\"https://raw.githubusercontent.com/xugaoyi/image_store/master/blog/md_logo.png\" alt=\"logo\"></p>\n<p><code>Markdown</code> 是一种轻量级标记语言，它允许人们使用易读易写的纯文本格式编写文档。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "npm packageJson属性详解",
      "frontmatter": {
        "author": {
          "name": "TZYY",
          "link": "https://www.cnblogs.com/tzyy/p/5193811.html"
        },
        "title": "npm packageJson属性详解",
        "date": "2020-04-08T17:16:38.000Z",
        "permalink": "/pages/dec4f3f00e71a312",
        "categories": [
          "技术",
          "技术文档"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/03.%E6%8A%80%E6%9C%AF/01.%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/10.npm%20packageJson%E5%B1%9E%E6%80%A7%E8%AF%A6%E8%A7%A3.html",
      "relativePath": "03.技术/01.技术文档/10.npm packageJson属性详解.md",
      "key": "v-417946aa",
      "path": "/pages/dec4f3f00e71a312/",
      "headers": [
        {
          "level": 2,
          "title": "概述",
          "slug": "概述"
        },
        {
          "level": 2,
          "title": "name",
          "slug": "name"
        },
        {
          "level": 2,
          "title": "version",
          "slug": "version"
        },
        {
          "level": 2,
          "title": "description",
          "slug": "description"
        },
        {
          "level": 2,
          "title": "keywords",
          "slug": "keywords"
        },
        {
          "level": 2,
          "title": "homepage",
          "slug": "homepage"
        },
        {
          "level": 2,
          "title": "bugs",
          "slug": "bugs"
        },
        {
          "level": 2,
          "title": "license",
          "slug": "license"
        },
        {
          "level": 2,
          "title": "和用户相关的属性: author, contributors",
          "slug": "和用户相关的属性-author-contributors"
        },
        {
          "level": 2,
          "title": "files",
          "slug": "files"
        },
        {
          "level": 2,
          "title": "main",
          "slug": "main"
        },
        {
          "level": 2,
          "title": "bin",
          "slug": "bin"
        },
        {
          "level": 2,
          "title": "man",
          "slug": "man"
        },
        {
          "level": 2,
          "title": "directories",
          "slug": "directories"
        },
        {
          "level": 3,
          "title": "directories.lib",
          "slug": "directories-lib"
        },
        {
          "level": 3,
          "title": "directories.bin",
          "slug": "directories-bin"
        },
        {
          "level": 3,
          "title": "directories.man",
          "slug": "directories-man"
        },
        {
          "level": 3,
          "title": "directories.doc",
          "slug": "directories-doc"
        },
        {
          "level": 3,
          "title": "directories.example",
          "slug": "directories-example"
        },
        {
          "level": 2,
          "title": "repository",
          "slug": "repository"
        },
        {
          "level": 2,
          "title": "scripts",
          "slug": "scripts"
        },
        {
          "level": 2,
          "title": "config",
          "slug": "config"
        },
        {
          "level": 2,
          "title": "dependencies",
          "slug": "dependencies"
        },
        {
          "level": 2,
          "title": "URLs as Dependencies",
          "slug": "urls-as-dependencies"
        },
        {
          "level": 2,
          "title": "Git URLs as Dependencies",
          "slug": "git-urls-as-dependencies"
        },
        {
          "level": 2,
          "title": "GitHub URLs",
          "slug": "github-urls"
        },
        {
          "level": 2,
          "title": "Local Paths",
          "slug": "local-paths"
        },
        {
          "level": 2,
          "title": "devDependencies",
          "slug": "devdependencies"
        },
        {
          "level": 2,
          "title": "peerDependencies",
          "slug": "peerdependencies"
        },
        {
          "level": 2,
          "title": "bundledDependencies",
          "slug": "bundleddependencies"
        },
        {
          "level": 2,
          "title": "optionalDependencies",
          "slug": "optionaldependencies"
        },
        {
          "level": 2,
          "title": "engines",
          "slug": "engines"
        },
        {
          "level": 2,
          "title": "engineStrict",
          "slug": "enginestrict"
        },
        {
          "level": 2,
          "title": "os",
          "slug": "os"
        },
        {
          "level": 2,
          "title": "cpu",
          "slug": "cpu"
        },
        {
          "level": 2,
          "title": "preferGlobal",
          "slug": "preferglobal"
        },
        {
          "level": 2,
          "title": "private",
          "slug": "private"
        },
        {
          "level": 2,
          "title": "publishConfig",
          "slug": "publishconfig"
        },
        {
          "level": 2,
          "title": "DEFAULT VALUES",
          "slug": "default-values"
        },
        {
          "level": 2,
          "title": "参考文档列表(https://docs.npmjs.com/)",
          "slug": "参考文档列表-https-docs-npmjs-com"
        }
      ],
      "excerpt": "<h1 id=\"npm-package-json属性详解\"><a class=\"header-anchor\" href=\"#npm-package-json属性详解\">#</a> npm package.json属性详解</h1>\n<blockquote>\n<p>本文转自<a href=\"https://www.cnblogs.com/tzyy/p/5193811.html\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.cnblogs.com/tzyy/p/5193811.html<OutboundLink/></a>，作者：TZYY</p>\n</blockquote>\n<h2 id=\"概述\"><a class=\"header-anchor\" href=\"#概述\">#</a> 概述</h2>\n<p><code>package.json</code>必须是一个严格的json文件，而不仅仅是js里边的一个对象。其中很多属性可以通过<code>npm-config</code>来生成</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "面试问题集锦",
      "frontmatter": {
        "title": "面试问题集锦",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/pages/aea6571b7a8bae86",
        "categories": [
          "更多",
          "面试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/04.%E6%9B%B4%E5%A4%9A/03.%E9%9D%A2%E8%AF%95/01.%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98%E9%9B%86%E9%94%A6.html",
      "relativePath": "04.更多/03.面试/01.面试问题集锦.md",
      "key": "v-57a2d27b",
      "path": "/pages/aea6571b7a8bae86/",
      "headers": [
        {
          "level": 2,
          "title": "请做一下自我介绍",
          "slug": "请做一下自我介绍"
        },
        {
          "level": 2,
          "title": "你最大的优点是什么？",
          "slug": "你最大的优点是什么？"
        },
        {
          "level": 2,
          "title": "说说你最大的缺点？",
          "slug": "说说你最大的缺点？"
        },
        {
          "level": 2,
          "title": "说说你对加班的看法？",
          "slug": "说说你对加班的看法？"
        },
        {
          "level": 2,
          "title": "说说你对薪资的要求？",
          "slug": "说说你对薪资的要求？"
        },
        {
          "level": 2,
          "title": "在五年内，你的职业规划？",
          "slug": "在五年内，你的职业规划？"
        },
        {
          "level": 2,
          "title": "你朋友对你的评价?",
          "slug": "你朋友对你的评价"
        },
        {
          "level": 2,
          "title": "你还有什么问题要问吗?",
          "slug": "你还有什么问题要问吗"
        },
        {
          "level": 2,
          "title": "录用后发现不适合这个职位，怎么办?",
          "slug": "录用后发现不适合这个职位，怎么办"
        },
        {
          "level": 2,
          "title": "工作时跟领导意见不同怎么办?",
          "slug": "工作时跟领导意见不同怎么办"
        },
        {
          "level": 2,
          "title": "工作出现失误并造成损失，你会怎么做?",
          "slug": "工作出现失误并造成损失，你会怎么做"
        },
        {
          "level": 2,
          "title": "谈谈你对跳槽的看法?",
          "slug": "谈谈你对跳槽的看法"
        },
        {
          "level": 2,
          "title": "和同事、上司难以相处，你怎么办?",
          "slug": "和同事、上司难以相处，你怎么办"
        },
        {
          "level": 2,
          "title": "上级领导抢了你的功劳怎么办?",
          "slug": "上级领导抢了你的功劳怎么办"
        },
        {
          "level": 2,
          "title": "同事孤立你，你怎么办?",
          "slug": "同事孤立你，你怎么办"
        },
        {
          "level": 2,
          "title": "你最近是否参加了培训课程?",
          "slug": "你最近是否参加了培训课程"
        },
        {
          "level": 2,
          "title": "你对于我们公司了解多少?",
          "slug": "你对于我们公司了解多少"
        },
        {
          "level": 2,
          "title": "你最擅长的技术方向是什么?",
          "slug": "你最擅长的技术方向是什么"
        },
        {
          "level": 2,
          "title": "请说出你选择这份工作的动机?",
          "slug": "请说出你选择这份工作的动机"
        },
        {
          "level": 2,
          "title": "你能为我们公司带来什么呢?",
          "slug": "你能为我们公司带来什么呢"
        },
        {
          "level": 2,
          "title": "最能概括你自己的三个词?",
          "slug": "最能概括你自己的三个词"
        },
        {
          "level": 2,
          "title": "作为被面试者给我打一下分?",
          "slug": "作为被面试者给我打一下分"
        },
        {
          "level": 2,
          "title": "你怎么理解你应聘的职位?",
          "slug": "你怎么理解你应聘的职位"
        },
        {
          "level": 2,
          "title": "喜欢这份工作的哪一点?",
          "slug": "喜欢这份工作的哪一点"
        },
        {
          "level": 2,
          "title": "为什么要离职?",
          "slug": "为什么要离职"
        },
        {
          "level": 2,
          "title": "说说你对行业、技术发展趋势的看法?",
          "slug": "说说你对行业、技术发展趋势的看法"
        },
        {
          "level": 2,
          "title": "对工作的期望与目标何在?",
          "slug": "对工作的期望与目标何在"
        },
        {
          "level": 2,
          "title": "谈谈你的家庭?",
          "slug": "谈谈你的家庭"
        },
        {
          "level": 2,
          "title": "你认为自己申请这个职位还欠缺什么?",
          "slug": "你认为自己申请这个职位还欠缺什么"
        },
        {
          "level": 2,
          "title": "你欣赏哪种性格的人?",
          "slug": "你欣赏哪种性格的人"
        },
        {
          "level": 2,
          "title": "你通常如何处理别人的批评?",
          "slug": "你通常如何处理别人的批评"
        },
        {
          "level": 2,
          "title": "怎样对待自己的失败?",
          "slug": "怎样对待自己的失败"
        },
        {
          "level": 2,
          "title": "什么会让你有成就感?",
          "slug": "什么会让你有成就感"
        },
        {
          "level": 2,
          "title": "眼下你生活中最重要的是什么?",
          "slug": "眼下你生活中最重要的是什么"
        },
        {
          "level": 2,
          "title": "你为什么愿意到我们公司来工作?",
          "slug": "你为什么愿意到我们公司来工作"
        },
        {
          "level": 2,
          "title": "你和别人发生过争执吗?",
          "slug": "你和别人发生过争执吗"
        },
        {
          "level": 2,
          "title": "你做过的哪件事最令自己感到骄傲?",
          "slug": "你做过的哪件事最令自己感到骄傲"
        },
        {
          "level": 2,
          "title": "对这项工作，你有哪些可预见的困难?",
          "slug": "对这项工作，你有哪些可预见的困难"
        },
        {
          "level": 2,
          "title": "录用后你将怎样开展工作?",
          "slug": "录用后你将怎样开展工作"
        },
        {
          "level": 2,
          "title": "你希望与什么样的上级共事?",
          "slug": "你希望与什么样的上级共事"
        },
        {
          "level": 2,
          "title": "你工作经验欠缺，如何能胜任这项工作?",
          "slug": "你工作经验欠缺，如何能胜任这项工作"
        },
        {
          "level": 2,
          "title": "你会怎样获得同事的帮助?",
          "slug": "你会怎样获得同事的帮助"
        },
        {
          "level": 2,
          "title": "如果你没被录用，你怎么打算?",
          "slug": "如果你没被录用，你怎么打算"
        },
        {
          "level": 2,
          "title": "最令你沮丧的事情?",
          "slug": "最令你沮丧的事情"
        },
        {
          "level": 2,
          "title": "想过创业吗?",
          "slug": "想过创业吗"
        },
        {
          "level": 2,
          "title": "为什么我们要在众多的面试者中选择你?",
          "slug": "为什么我们要在众多的面试者中选择你"
        },
        {
          "level": 2,
          "title": "除了本公司外，还应聘了哪些公司?",
          "slug": "除了本公司外，还应聘了哪些公司"
        },
        {
          "level": 2,
          "title": "你并非毕业于名牌院校?",
          "slug": "你并非毕业于名牌院校"
        },
        {
          "level": 2,
          "title": "怎样看待学历和能力?",
          "slug": "怎样看待学历和能力"
        },
        {
          "level": 2,
          "title": "谈谈如何适应办公室工作的新环境?",
          "slug": "谈谈如何适应办公室工作的新环境"
        },
        {
          "level": 2,
          "title": "谈谈对这个职务的期许?",
          "slug": "谈谈对这个职务的期许"
        },
        {
          "level": 2,
          "title": "何时可以到职?",
          "slug": "何时可以到职"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "字符串的扩展",
      "frontmatter": {
        "title": "字符串的扩展",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/ca89eca8adeba5f4",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/04.%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%89%A9%E5%B1%95.html",
      "relativePath": "《ES6 教程》笔记/04.字符串的扩展.md",
      "key": "v-36e020a6",
      "path": "/pages/ca89eca8adeba5f4/",
      "headers": [
        {
          "level": 2,
          "title": "字符的 Unicode 表示法",
          "slug": "字符的-unicode-表示法"
        },
        {
          "level": 2,
          "title": "字符串的遍历器接口",
          "slug": "字符串的遍历器接口"
        },
        {
          "level": 2,
          "title": "直接输入 U+2028 和 U+2029",
          "slug": "直接输入-u-2028-和-u-2029"
        },
        {
          "level": 2,
          "title": "JSON.stringify() 的改造",
          "slug": "json-stringify-的改造"
        },
        {
          "level": 2,
          "title": "模板字符串",
          "slug": "模板字符串"
        },
        {
          "level": 2,
          "title": "实例：模板编译",
          "slug": "实例：模板编译"
        },
        {
          "level": 2,
          "title": "标签模板",
          "slug": "标签模板"
        },
        {
          "level": 2,
          "title": "模板字符串的限制",
          "slug": "模板字符串的限制"
        }
      ],
      "excerpt": "<h1 id=\"字符串的扩展\"><a class=\"header-anchor\" href=\"#字符串的扩展\">#</a> 字符串的扩展</h1>\n<p>本章介绍 ES6 对字符串的改造和增强，下一章介绍字符串对象的新增方法。</p>\n<h2 id=\"字符的-unicode-表示法\"><a class=\"header-anchor\" href=\"#字符的-unicode-表示法\">#</a> 字符的 Unicode 表示法</h2>\n<p>ES6 加强了对 Unicode 的支持，允许采用<code>\\uxxxx</code>形式表示一个字符，其中<code>xxxx</code>表示字符的 Unicode 码点。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code><span class=\"token string\">\"\\u0061\"</span>\n<span class=\"token comment\">// \"a\"</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "ECMAScript 6 简介",
      "frontmatter": {
        "title": "ECMAScript 6 简介",
        "date": "2020-01-12T15:45:35.000Z",
        "permalink": "/pages/f344d070a1031ef7",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/01.ECMAScript%206%20%E7%AE%80%E4%BB%8B.html",
      "relativePath": "《ES6 教程》笔记/01.ECMAScript 6 简介.md",
      "key": "v-6dd71a4b",
      "path": "/pages/f344d070a1031ef7/",
      "headers": [
        {
          "level": 2,
          "title": "ECMAScript 和 JavaScript 的关系",
          "slug": "ecmascript-和-javascript-的关系"
        },
        {
          "level": 2,
          "title": "ES6 与 ECMAScript 2015 的关系",
          "slug": "es6-与-ecmascript-2015-的关系"
        },
        {
          "level": 2,
          "title": "语法提案的批准流程",
          "slug": "语法提案的批准流程"
        },
        {
          "level": 2,
          "title": "ECMAScript 的历史",
          "slug": "ecmascript-的历史"
        },
        {
          "level": 2,
          "title": "部署进度",
          "slug": "部署进度"
        },
        {
          "level": 2,
          "title": "Babel 转码器",
          "slug": "babel-转码器"
        },
        {
          "level": 3,
          "title": "配置文件.babelrc",
          "slug": "配置文件-babelrc"
        },
        {
          "level": 3,
          "title": "命令行转码",
          "slug": "命令行转码"
        },
        {
          "level": 3,
          "title": "babel-node",
          "slug": "babel-node"
        },
        {
          "level": 3,
          "title": "@babel/register 模块",
          "slug": "babel-register-模块"
        },
        {
          "level": 3,
          "title": "babel API",
          "slug": "babel-api"
        },
        {
          "level": 3,
          "title": "@babel/polyfill",
          "slug": "babel-polyfill"
        },
        {
          "level": 3,
          "title": "浏览器环境",
          "slug": "浏览器环境"
        },
        {
          "level": 2,
          "title": "Traceur 转码器",
          "slug": "traceur-转码器"
        },
        {
          "level": 3,
          "title": "直接插入网页",
          "slug": "直接插入网页"
        },
        {
          "level": 3,
          "title": "在线转换",
          "slug": "在线转换"
        },
        {
          "level": 3,
          "title": "命令行转换",
          "slug": "命令行转换"
        },
        {
          "level": 3,
          "title": "Node 环境的用法",
          "slug": "node-环境的用法"
        }
      ],
      "excerpt": "<blockquote>\n<p>说明：本章内容为博主在原教程基础上添加自己的学习笔记，来源<a href=\"http://es6.ruanyifeng.com/\" target=\"_blank\" rel=\"noopener noreferrer\">http://es6.ruanyifeng.com/<OutboundLink/></a>，教程版权归原作者所有。</p>\n</blockquote>\n<h1 id=\"ecmascript-6-简介\"><a class=\"header-anchor\" href=\"#ecmascript-6-简介\">#</a> ECMAScript 6 简介</h1>\n<p>ECMAScript 6.0（以下简称 ES6）是 JavaScript 语言的下一代标准，已经在 2015 年 6 月正式发布了。它的目标，是使得 JavaScript 语言可以用来编写复杂的大型应用程序，成为企业级开发语言。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "变量的解构赋值",
      "frontmatter": {
        "title": "变量的解构赋值",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/b1ab10a62f7564da",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/03.%E5%8F%98%E9%87%8F%E7%9A%84%E8%A7%A3%E6%9E%84%E8%B5%8B%E5%80%BC.html",
      "relativePath": "《ES6 教程》笔记/03.变量的解构赋值.md",
      "key": "v-3725604e",
      "path": "/pages/b1ab10a62f7564da/",
      "headers": [
        {
          "level": 2,
          "title": "数组的解构赋值",
          "slug": "数组的解构赋值"
        },
        {
          "level": 3,
          "title": "基本用法",
          "slug": "基本用法"
        },
        {
          "level": 3,
          "title": "默认值",
          "slug": "默认值"
        },
        {
          "level": 2,
          "title": "对象的解构赋值",
          "slug": "对象的解构赋值"
        },
        {
          "level": 3,
          "title": "简介",
          "slug": "简介"
        },
        {
          "level": 3,
          "title": "默认值",
          "slug": "默认值-2"
        },
        {
          "level": 3,
          "title": "注意点",
          "slug": "注意点"
        },
        {
          "level": 2,
          "title": "字符串的解构赋值",
          "slug": "字符串的解构赋值"
        },
        {
          "level": 2,
          "title": "数值和布尔值的解构赋值",
          "slug": "数值和布尔值的解构赋值"
        },
        {
          "level": 2,
          "title": "函数参数的解构赋值",
          "slug": "函数参数的解构赋值"
        },
        {
          "level": 2,
          "title": "圆括号问题",
          "slug": "圆括号问题"
        },
        {
          "level": 3,
          "title": "不能使用圆括号的情况",
          "slug": "不能使用圆括号的情况"
        },
        {
          "level": 3,
          "title": "可以使用圆括号的情况",
          "slug": "可以使用圆括号的情况"
        },
        {
          "level": 2,
          "title": "用途",
          "slug": "用途"
        }
      ],
      "excerpt": "<h1 id=\"变量的解构赋值\"><a class=\"header-anchor\" href=\"#变量的解构赋值\">#</a> 变量的解构赋值</h1>\n<h2 id=\"数组的解构赋值\"><a class=\"header-anchor\" href=\"#数组的解构赋值\">#</a> 数组的解构赋值</h2>\n<h3 id=\"基本用法\"><a class=\"header-anchor\" href=\"#基本用法\">#</a> 基本用法</h3>\n<p>ES6 允许按照一定模式，<strong>从数组和对象中提取值，对变量进行赋值，这被称为解构</strong>（Destructuring）。</p>\n<p>以前，为变量赋值，只能直接指定值。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code><span class=\"token keyword\">let</span> a <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> b <span class=\"token operator\">=</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">let</span> c <span class=\"token operator\">=</span> <span class=\"token number\">3</span><span class=\"token punctuation\">;</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "let 和 const 命令",
      "frontmatter": {
        "title": "let 和 const 命令",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/c1edd70a6b7c7872",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/02.let%20%E5%92%8C%20const%20%E5%91%BD%E4%BB%A4.html",
      "relativePath": "《ES6 教程》笔记/02.let 和 const 命令.md",
      "key": "v-183f0e5c",
      "path": "/pages/c1edd70a6b7c7872/",
      "headers": [
        {
          "level": 2,
          "title": "let 命令",
          "slug": "let-命令"
        },
        {
          "level": 3,
          "title": "基本用法",
          "slug": "基本用法"
        },
        {
          "level": 3,
          "title": "不存在变量提升",
          "slug": "不存在变量提升"
        },
        {
          "level": 3,
          "title": "暂时性死区",
          "slug": "暂时性死区"
        },
        {
          "level": 3,
          "title": "不允许重复声明",
          "slug": "不允许重复声明"
        },
        {
          "level": 2,
          "title": "块级作用域",
          "slug": "块级作用域"
        },
        {
          "level": 3,
          "title": "为什么需要块级作用域？",
          "slug": "为什么需要块级作用域？"
        },
        {
          "level": 3,
          "title": "ES6 的块级作用域",
          "slug": "es6-的块级作用域"
        },
        {
          "level": 3,
          "title": "块级作用域与函数声明",
          "slug": "块级作用域与函数声明"
        },
        {
          "level": 2,
          "title": "const 命令",
          "slug": "const-命令"
        },
        {
          "level": 3,
          "title": "基本用法",
          "slug": "基本用法-2"
        },
        {
          "level": 3,
          "title": "本质",
          "slug": "本质"
        },
        {
          "level": 3,
          "title": "ES6 声明变量的六种方法",
          "slug": "es6-声明变量的六种方法"
        },
        {
          "level": 2,
          "title": "顶层对象的属性",
          "slug": "顶层对象的属性"
        },
        {
          "level": 2,
          "title": "globalThis 对象",
          "slug": "globalthis-对象"
        }
      ],
      "excerpt": "<h1 id=\"let-和-const-命令\"><a class=\"header-anchor\" href=\"#let-和-const-命令\">#</a> let 和 const 命令</h1>\n<h2 id=\"let-命令\"><a class=\"header-anchor\" href=\"#let-命令\">#</a> let 命令</h2>\n<h3 id=\"基本用法\"><a class=\"header-anchor\" href=\"#基本用法\">#</a> 基本用法</h3>\n<p>ES6 新增了<code>let</code>命令，用来声明变量。它的用法类似于<code>var</code>，但是所声明的变量，<strong>只在<code>let</code>命令所在的代码块内有效(块级作用域)</strong>。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code><span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">let</span> a <span class=\"token operator\">=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">var</span> b <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\na <span class=\"token comment\">// ReferenceError: a is not defined.</span>\nb <span class=\"token comment\">// 1</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br><span class=\"line-number\">4</span><br><span class=\"line-number\">5</span><br><span class=\"line-number\">6</span><br><span class=\"line-number\">7</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "正则的扩展",
      "frontmatter": {
        "title": "正则的扩展",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/0473261a6ab0ee8c",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/06.%E6%AD%A3%E5%88%99%E7%9A%84%E6%89%A9%E5%B1%95.html",
      "relativePath": "《ES6 教程》笔记/06.正则的扩展.md",
      "key": "v-0f6e8a7a",
      "path": "/pages/0473261a6ab0ee8c/",
      "headers": [
        {
          "level": 2,
          "title": "RegExp 构造函数",
          "slug": "regexp-构造函数"
        },
        {
          "level": 2,
          "title": "字符串的正则方法",
          "slug": "字符串的正则方法"
        },
        {
          "level": 2,
          "title": "u 修饰符",
          "slug": "u-修饰符"
        },
        {
          "level": 2,
          "title": "RegExp.prototype.unicode 属性",
          "slug": "regexp-prototype-unicode-属性"
        },
        {
          "level": 2,
          "title": "y 修饰符",
          "slug": "y-修饰符"
        },
        {
          "level": 2,
          "title": "RegExp.prototype.sticky 属性",
          "slug": "regexp-prototype-sticky-属性"
        },
        {
          "level": 2,
          "title": "RegExp.prototype.flags 属性",
          "slug": "regexp-prototype-flags-属性"
        },
        {
          "level": 2,
          "title": "s 修饰符：dotAll 模式",
          "slug": "s-修饰符：dotall-模式"
        },
        {
          "level": 2,
          "title": "后行断言",
          "slug": "后行断言"
        },
        {
          "level": 2,
          "title": "Unicode 属性类",
          "slug": "unicode-属性类"
        },
        {
          "level": 2,
          "title": "具名组匹配",
          "slug": "具名组匹配"
        },
        {
          "level": 3,
          "title": "简介",
          "slug": "简介"
        },
        {
          "level": 3,
          "title": "解构赋值和替换",
          "slug": "解构赋值和替换"
        },
        {
          "level": 3,
          "title": "引用",
          "slug": "引用"
        },
        {
          "level": 2,
          "title": "String.prototype.matchAll()",
          "slug": "string-prototype-matchall"
        }
      ],
      "excerpt": "<h1 id=\"正则的扩展\"><a class=\"header-anchor\" href=\"#正则的扩展\">#</a> 正则的扩展</h1>\n<h2 id=\"regexp-构造函数\"><a class=\"header-anchor\" href=\"#regexp-构造函数\">#</a> RegExp 构造函数</h2>\n<p>在 ES5 中，<code>RegExp</code>构造函数的参数有两种情况。</p>\n<p>第一种情况是，参数是字符串，这时第二个参数表示正则表达式的修饰符（flag）。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code><span class=\"token keyword\">var</span> regex <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">RegExp</span><span class=\"token punctuation\">(</span><span class=\"token string\">'xyz'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'i'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// 等价于</span>\n<span class=\"token keyword\">var</span> regex <span class=\"token operator\">=</span> <span class=\"token regex\">/xyz/i</span><span class=\"token punctuation\">;</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "对象的新增方法",
      "frontmatter": {
        "title": "对象的新增方法",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/e85e68947502cf90",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/11.%E5%AF%B9%E8%B1%A1%E7%9A%84%E6%96%B0%E5%A2%9E%E6%96%B9%E6%B3%95.html",
      "relativePath": "《ES6 教程》笔记/11.对象的新增方法.md",
      "key": "v-2616b0e8",
      "path": "/pages/e85e68947502cf90/",
      "headers": [
        {
          "level": 2,
          "title": "Object.is()",
          "slug": "object-is"
        },
        {
          "level": 2,
          "title": "Object.assign()",
          "slug": "object-assign"
        },
        {
          "level": 3,
          "title": "基本用法",
          "slug": "基本用法"
        },
        {
          "level": 3,
          "title": "注意点",
          "slug": "注意点"
        },
        {
          "level": 3,
          "title": "常见用途",
          "slug": "常见用途"
        },
        {
          "level": 2,
          "title": "Object.getOwnPropertyDescriptors()",
          "slug": "object-getownpropertydescriptors"
        },
        {
          "level": 2,
          "title": "__proto__属性，Object.setPrototypeOf()，Object.getPrototypeOf()",
          "slug": "proto-属性，object-setprototypeof-，object-getprototypeof"
        },
        {
          "level": 3,
          "title": "__proto__属性",
          "slug": "proto-属性"
        },
        {
          "level": 3,
          "title": "Object.setPrototypeOf()",
          "slug": "object-setprototypeof"
        },
        {
          "level": 3,
          "title": "Object.getPrototypeOf()",
          "slug": "object-getprototypeof"
        },
        {
          "level": 2,
          "title": "Object.keys()，Object.values()，Object.entries()",
          "slug": "object-keys-，object-values-，object-entries"
        },
        {
          "level": 3,
          "title": "Object.keys()",
          "slug": "object-keys"
        },
        {
          "level": 3,
          "title": "Object.values()",
          "slug": "object-values"
        },
        {
          "level": 3,
          "title": "Object.entries()",
          "slug": "object-entries"
        },
        {
          "level": 2,
          "title": "Object.fromEntries()",
          "slug": "object-fromentries"
        }
      ],
      "excerpt": "<h1 id=\"对象的新增方法\"><a class=\"header-anchor\" href=\"#对象的新增方法\">#</a> 对象的新增方法</h1>\n<p>本章介绍 Object 对象的新增方法。</p>\n<h2 id=\"object-is\"><a class=\"header-anchor\" href=\"#object-is\">#</a> Object.is()</h2>\n<p>ES5 比较两个值是否相等，只有两个运算符：相等运算符（<code>==</code>）和严格相等运算符（<code>===</code>）。它们都有缺点，前者会自动转换数据类型，后者的<code>NaN</code>不等于自身，以及<code>+0</code>等于<code>-0</code>。JavaScript 缺乏一种运算，在所有环境中，只要两个值是一样的，它们就应该相等。</p>\n<p>ES6 提出“Same-value equality”（同值相等）算法，用来解决这个问题。<code>Object.is</code>就是部署这个算法的新方法。它用来比较两个值是否严格相等，与严格比较运算符（===）的行为基本一致。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Class 的继承",
      "frontmatter": {
        "title": "Class 的继承",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/83f8c3a0cd87dd83",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/22.Class%20%E7%9A%84%E7%BB%A7%E6%89%BF.html",
      "relativePath": "《ES6 教程》笔记/22.Class 的继承.md",
      "key": "v-cc3cdffe",
      "path": "/pages/83f8c3a0cd87dd83/",
      "headers": [
        {
          "level": 2,
          "title": "简介",
          "slug": "简介"
        },
        {
          "level": 2,
          "title": "Object.getPrototypeOf()",
          "slug": "object-getprototypeof"
        },
        {
          "level": 2,
          "title": "super 关键字",
          "slug": "super-关键字"
        },
        {
          "level": 2,
          "title": "类的 prototype 属性和__proto__属性",
          "slug": "类的-prototype-属性和-proto-属性"
        },
        {
          "level": 3,
          "title": "实例的 __proto__ 属性",
          "slug": "实例的-proto-属性"
        },
        {
          "level": 2,
          "title": "原生构造函数的继承",
          "slug": "原生构造函数的继承"
        },
        {
          "level": 2,
          "title": "Mixin 模式的实现",
          "slug": "mixin-模式的实现"
        }
      ],
      "excerpt": "<h1 id=\"class-的继承\"><a class=\"header-anchor\" href=\"#class-的继承\">#</a> Class 的继承</h1>\n<h2 id=\"简介\"><a class=\"header-anchor\" href=\"#简介\">#</a> 简介</h2>\n<p>Class 可以通过<code>extends</code>关键字实现继承，这比 ES5 的通过修改原型链实现继承，要清晰和方便很多。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code><span class=\"token keyword\">class</span> <span class=\"token class-name\">Point</span> <span class=\"token punctuation\">{</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">ColorPoint</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Point</span> <span class=\"token punctuation\">{</span>\n<span class=\"token punctuation\">}</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br><span class=\"line-number\">4</span><br><span class=\"line-number\">5</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "读懂 ECMAScript 规格",
      "frontmatter": {
        "title": "读懂 ECMAScript 规格",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/32c35f7651d6e58e",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/26.%E8%AF%BB%E6%87%82%20ECMAScript%20%E8%A7%84%E6%A0%BC.html",
      "relativePath": "《ES6 教程》笔记/26.读懂 ECMAScript 规格.md",
      "key": "v-1cb9ea72",
      "path": "/pages/32c35f7651d6e58e/",
      "headers": [
        {
          "level": 2,
          "title": "概述",
          "slug": "概述"
        },
        {
          "level": 2,
          "title": "术语",
          "slug": "术语"
        },
        {
          "level": 3,
          "title": "抽象操作",
          "slug": "抽象操作"
        },
        {
          "level": 3,
          "title": "Record 和 field",
          "slug": "record-和-field"
        },
        {
          "level": 3,
          "title": "[[Notation]]",
          "slug": "notation"
        },
        {
          "level": 3,
          "title": "Completion Record",
          "slug": "completion-record"
        },
        {
          "level": 2,
          "title": "抽象操作的标准流程",
          "slug": "抽象操作的标准流程"
        },
        {
          "level": 2,
          "title": "相等运算符",
          "slug": "相等运算符"
        },
        {
          "level": 2,
          "title": "数组的空位",
          "slug": "数组的空位"
        },
        {
          "level": 2,
          "title": "数组的 map 方法",
          "slug": "数组的-map-方法"
        }
      ],
      "excerpt": "<h1 id=\"读懂-ecmascript-规格\"><a class=\"header-anchor\" href=\"#读懂-ecmascript-规格\">#</a> 读懂 ECMAScript 规格</h1>\n<h2 id=\"概述\"><a class=\"header-anchor\" href=\"#概述\">#</a> 概述</h2>\n<p>规格文件是计算机语言的官方标准，详细描述语法规则和实现方法。</p>\n<p>一般来说，没有必要阅读规格，除非你要写编译器。因为规格写得非常抽象和精炼，又缺乏实例，不容易理解，而且对于解决实际的应用问题，帮助不大。但是，如果你遇到疑难的语法问题，实在找不到答案，这时可以去查看规格文件，了解语言标准是怎么说的。规格是解决问题的“最后一招”。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "异步遍历器",
      "frontmatter": {
        "title": "异步遍历器",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/16121351be68691b",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/27.%E5%BC%82%E6%AD%A5%E9%81%8D%E5%8E%86%E5%99%A8.html",
      "relativePath": "《ES6 教程》笔记/27.异步遍历器.md",
      "key": "v-4cae9568",
      "path": "/pages/16121351be68691b/",
      "headers": [
        {
          "level": 2,
          "title": "同步遍历器的问题",
          "slug": "同步遍历器的问题"
        },
        {
          "level": 2,
          "title": "异步遍历的接口",
          "slug": "异步遍历的接口"
        },
        {
          "level": 2,
          "title": "for await...of",
          "slug": "for-await-of"
        },
        {
          "level": 2,
          "title": "异步 Generator 函数",
          "slug": "异步-generator-函数"
        },
        {
          "level": 2,
          "title": "yield* 语句",
          "slug": "yield-语句"
        }
      ],
      "excerpt": "<h1 id=\"异步遍历器\"><a class=\"header-anchor\" href=\"#异步遍历器\">#</a> 异步遍历器</h1>\n<h2 id=\"同步遍历器的问题\"><a class=\"header-anchor\" href=\"#同步遍历器的问题\">#</a> 同步遍历器的问题</h2>\n<p>《遍历器》一章说过，Iterator 接口是一种数据遍历的协议，只要调用遍历器对象的<code>next</code>方法，就会得到一个对象，表示当前遍历指针所在的那个位置的信息。<code>next</code>方法返回的对象的结构是<code>{value, done}</code>，其中<code>value</code>表示当前的数据的值，<code>done</code>是一个布尔值，表示遍历是否结束。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "装饰器",
      "frontmatter": {
        "title": "装饰器",
        "date": "2020-02-09T16:00:30.000Z",
        "permalink": "/pages/e97bc1e5626b082c",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/30.%E8%A3%85%E9%A5%B0%E5%99%A8.html",
      "relativePath": "《ES6 教程》笔记/30.装饰器.md",
      "key": "v-536d2a5a",
      "path": "/pages/e97bc1e5626b082c/",
      "headers": [
        {
          "level": 2,
          "title": "类的装饰",
          "slug": "类的装饰"
        },
        {
          "level": 2,
          "title": "方法的装饰",
          "slug": "方法的装饰"
        },
        {
          "level": 2,
          "title": "为什么装饰器不能用于函数？",
          "slug": "为什么装饰器不能用于函数？"
        },
        {
          "level": 2,
          "title": "core-decorators.js",
          "slug": "core-decorators-js"
        },
        {
          "level": 2,
          "title": "使用装饰器实现自动发布事件",
          "slug": "使用装饰器实现自动发布事件"
        },
        {
          "level": 2,
          "title": "Mixin",
          "slug": "mixin"
        },
        {
          "level": 2,
          "title": "Trait",
          "slug": "trait"
        }
      ],
      "excerpt": "<h1 id=\"装饰器\"><a class=\"header-anchor\" href=\"#装饰器\">#</a> 装饰器</h1>\n<p>[说明] Decorator 提案经过了大幅修改，目前还没有定案，不知道语法会不会再变。下面的内容完全依据以前的提案，已经有点过时了。等待定案以后，需要完全重写。</p>\n<p>装饰器（Decorator）是一种与类（class）相关的语法，用来注释或修改类和类方法。许多面向对象的语言都有这项功能，目前有一个<a href=\"https://github.com/tc39/proposal-decorators\" target=\"_blank\" rel=\"noopener noreferrer\">提案<OutboundLink/></a>将其引入了 ECMAScript。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "最新提案",
      "frontmatter": {
        "title": "最新提案",
        "date": "2020-02-09T16:00:30.000Z",
        "permalink": "/pages/7188882b8d65af1b",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/29.%E6%9C%80%E6%96%B0%E6%8F%90%E6%A1%88.html",
      "relativePath": "《ES6 教程》笔记/29.最新提案.md",
      "key": "v-155ac233",
      "path": "/pages/7188882b8d65af1b/",
      "headers": [
        {
          "level": 2,
          "title": "do 表达式",
          "slug": "do-表达式"
        },
        {
          "level": 2,
          "title": "throw 表达式",
          "slug": "throw-表达式"
        },
        {
          "level": 2,
          "title": "函数的部分执行",
          "slug": "函数的部分执行"
        },
        {
          "level": 3,
          "title": "语法",
          "slug": "语法"
        },
        {
          "level": 3,
          "title": "注意点",
          "slug": "注意点"
        },
        {
          "level": 2,
          "title": "管道运算符",
          "slug": "管道运算符"
        },
        {
          "level": 2,
          "title": "数值分隔符",
          "slug": "数值分隔符"
        },
        {
          "level": 2,
          "title": "Math.signbit()",
          "slug": "math-signbit"
        },
        {
          "level": 2,
          "title": "双冒号运算符",
          "slug": "双冒号运算符"
        },
        {
          "level": 2,
          "title": "Realm API",
          "slug": "realm-api"
        },
        {
          "level": 2,
          "title": "#!命令",
          "slug": "命令"
        },
        {
          "level": 2,
          "title": "import.meta",
          "slug": "import-meta"
        }
      ],
      "excerpt": "<h1 id=\"最新提案\"><a class=\"header-anchor\" href=\"#最新提案\">#</a> 最新提案</h1>\n<p>本章介绍一些尚未进入标准、但很有希望的最新提案。</p>\n<h2 id=\"do-表达式\"><a class=\"header-anchor\" href=\"#do-表达式\">#</a> do 表达式</h2>\n<p>本质上，块级作用域是一个语句，将多个操作封装在一起，没有返回值。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code><span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">let</span> t <span class=\"token operator\">=</span> <span class=\"token function\">f</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  t <span class=\"token operator\">=</span> t <span class=\"token operator\">*</span> t <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br><span class=\"line-number\">4</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "基础",
      "frontmatter": {
        "title": "基础",
        "date": "2020-01-12T11:49:16.000Z",
        "permalink": "/pages/0796ba76b4b55368",
        "categories": [
          "《JavaScript教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AJavaScript%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/01.%E5%9F%BA%E7%A1%80.html",
      "relativePath": "《JavaScript教程》笔记/01.基础.md",
      "key": "v-9419e8fc",
      "path": "/pages/0796ba76b4b55368/",
      "headers": [
        {
          "level": 2,
          "title": "一、JS的一些名词概念",
          "slug": "一、js的一些名词概念"
        },
        {
          "level": 2,
          "title": "二、数据类型的转换",
          "slug": "二、数据类型的转换"
        },
        {
          "level": 3,
          "title": "1、强制（手动）转换",
          "slug": "_1、强制（手动）转换"
        },
        {
          "level": 3,
          "title": "2、自动转换",
          "slug": "_2、自动转换"
        },
        {
          "level": 2,
          "title": "三、错误处理机制",
          "slug": "三、错误处理机制"
        },
        {
          "level": 3,
          "title": "1、Error实例对象",
          "slug": "_1、error实例对象"
        },
        {
          "level": 3,
          "title": "2、原生错误类型",
          "slug": "_2、原生错误类型"
        },
        {
          "level": 3,
          "title": "3、自定义错误",
          "slug": "_3、自定义错误"
        },
        {
          "level": 3,
          "title": "4、throw 语句 （中断程序并抛出错误）",
          "slug": "_4、throw-语句-（中断程序并抛出错误）"
        },
        {
          "level": 3,
          "title": "5、try...catch 结构（捕获错误，对错误进行处理，不中断）",
          "slug": "_5、try-catch-结构（捕获错误，对错误进行处理，不中断）"
        },
        {
          "level": 3,
          "title": "6、finally 代码块（在try..catch最后，必执行的）",
          "slug": "_6、finally-代码块（在try-catch最后，必执行的）"
        },
        {
          "level": 2,
          "title": "四、console对象",
          "slug": "四、console对象"
        },
        {
          "level": 3,
          "title": "console.time()，console.timeEnd() （用于计算程序的用时）",
          "slug": "console-time-，console-timeend-（用于计算程序的用时）"
        },
        {
          "level": 2,
          "title": "文档",
          "slug": "文档"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "接口",
      "frontmatter": {
        "title": "接口",
        "date": "2020-01-05T10:17:47.000Z",
        "permalink": "/pages/54ea89b497ec3bb3",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "TypeScript 常用语法"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/02.TypeScript%20%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95/03.%E6%8E%A5%E5%8F%A3.html",
      "relativePath": "《TypeScript 从零实现 axios》/02.TypeScript 常用语法/03.接口.md",
      "key": "v-ee59b0d6",
      "path": "/pages/54ea89b497ec3bb3/",
      "headers": [
        {
          "level": 2,
          "title": "接口初探",
          "slug": "接口初探"
        },
        {
          "level": 2,
          "title": "可选属性",
          "slug": "可选属性"
        },
        {
          "level": 2,
          "title": "只读属性",
          "slug": "只读属性"
        },
        {
          "level": 3,
          "title": "readonly vs const",
          "slug": "readonly-vs-const"
        },
        {
          "level": 2,
          "title": "额外的属性检查",
          "slug": "额外的属性检查"
        },
        {
          "level": 2,
          "title": "函数类型",
          "slug": "函数类型"
        },
        {
          "level": 2,
          "title": "可索引的类型",
          "slug": "可索引的类型"
        },
        {
          "level": 2,
          "title": "类类型",
          "slug": "类类型"
        },
        {
          "level": 3,
          "title": "实现接口",
          "slug": "实现接口"
        },
        {
          "level": 3,
          "title": "类静态部分与实例部分的区别",
          "slug": "类静态部分与实例部分的区别"
        },
        {
          "level": 2,
          "title": "继承接口",
          "slug": "继承接口"
        },
        {
          "level": 2,
          "title": "混合类型",
          "slug": "混合类型"
        },
        {
          "level": 2,
          "title": "接口继承类",
          "slug": "接口继承类"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "类",
      "frontmatter": {
        "title": "类",
        "date": "2020-01-05T10:17:47.000Z",
        "permalink": "/pages/fad060bd9a8bfac6",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "TypeScript 常用语法"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/02.TypeScript%20%E5%B8%B8%E7%94%A8%E8%AF%AD%E6%B3%95/04.%E7%B1%BB.html",
      "relativePath": "《TypeScript 从零实现 axios》/02.TypeScript 常用语法/04.类.md",
      "key": "v-363c1fa4",
      "path": "/pages/fad060bd9a8bfac6/",
      "headers": [
        {
          "level": 2,
          "title": "基本示例",
          "slug": "基本示例"
        },
        {
          "level": 2,
          "title": "继承",
          "slug": "继承"
        },
        {
          "level": 2,
          "title": "公共，私有与受保护的修饰符",
          "slug": "公共，私有与受保护的修饰符"
        },
        {
          "level": 3,
          "title": "默认为 public",
          "slug": "默认为-public"
        },
        {
          "level": 3,
          "title": "理解 private",
          "slug": "理解-private"
        },
        {
          "level": 3,
          "title": "理解 protected",
          "slug": "理解-protected"
        },
        {
          "level": 2,
          "title": "readonly 修饰符",
          "slug": "readonly-修饰符"
        },
        {
          "level": 3,
          "title": "参数属性",
          "slug": "参数属性"
        },
        {
          "level": 2,
          "title": "存取器",
          "slug": "存取器"
        },
        {
          "level": 2,
          "title": "静态属性",
          "slug": "静态属性"
        },
        {
          "level": 2,
          "title": "抽象类",
          "slug": "抽象类"
        },
        {
          "level": 2,
          "title": "高级技巧",
          "slug": "高级技巧"
        },
        {
          "level": 3,
          "title": "构造函数",
          "slug": "构造函数"
        },
        {
          "level": 3,
          "title": "把类当做接口使用",
          "slug": "把类当做接口使用"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "辅助模块单元测试",
      "frontmatter": {
        "title": "辅助模块单元测试",
        "date": "2020-01-05T10:56:02.000Z",
        "permalink": "/pages/13f147a9b355c4c1",
        "author": "HuangYi",
        "categories": [
          "《TypeScript 从零实现 axios》",
          "ts-axios 单元测试"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8ATypeScript%20%E4%BB%8E%E9%9B%B6%E5%AE%9E%E7%8E%B0%20axios%E3%80%8B/11.ts-axios%20%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/03.%E8%BE%85%E5%8A%A9%E6%A8%A1%E5%9D%97%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95.html",
      "relativePath": "《TypeScript 从零实现 axios》/11.ts-axios 单元测试/03.辅助模块单元测试.md",
      "key": "v-3c1b7645",
      "path": "/pages/13f147a9b355c4c1/",
      "headers": [
        {
          "level": 2,
          "title": "准备工作",
          "slug": "准备工作"
        },
        {
          "level": 2,
          "title": "util 模块测试",
          "slug": "util-模块测试"
        },
        {
          "level": 2,
          "title": "cookie 模块测试",
          "slug": "cookie-模块测试"
        },
        {
          "level": 2,
          "title": "data 模块测试",
          "slug": "data-模块测试"
        },
        {
          "level": 2,
          "title": "error 模块测试",
          "slug": "error-模块测试"
        },
        {
          "level": 2,
          "title": "headers 模块测试",
          "slug": "headers-模块测试"
        },
        {
          "level": 2,
          "title": "url 模块测试",
          "slug": "url-模块测试"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "数值的扩展",
      "frontmatter": {
        "title": "数值的扩展",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/5dfea9a0f2d1a392",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/07.%E6%95%B0%E5%80%BC%E7%9A%84%E6%89%A9%E5%B1%95.html",
      "relativePath": "《ES6 教程》笔记/07.数值的扩展.md",
      "key": "v-fc49409a",
      "path": "/pages/5dfea9a0f2d1a392/",
      "headers": [
        {
          "level": 2,
          "title": "二进制和八进制表示法",
          "slug": "二进制和八进制表示法"
        },
        {
          "level": 2,
          "title": "Number.isFinite(), Number.isNaN()",
          "slug": "number-isfinite-number-isnan"
        },
        {
          "level": 2,
          "title": "Number.parseInt(), Number.parseFloat()",
          "slug": "number-parseint-number-parsefloat"
        },
        {
          "level": 2,
          "title": "Number.isInteger()",
          "slug": "number-isinteger"
        },
        {
          "level": 2,
          "title": "Number.EPSILON",
          "slug": "number-epsilon"
        },
        {
          "level": 2,
          "title": "安全整数和 Number.isSafeInteger()",
          "slug": "安全整数和-number-issafeinteger"
        },
        {
          "level": 2,
          "title": "Math 对象的扩展",
          "slug": "math-对象的扩展"
        },
        {
          "level": 3,
          "title": "Math.trunc()",
          "slug": "math-trunc"
        },
        {
          "level": 3,
          "title": "Math.sign()",
          "slug": "math-sign"
        },
        {
          "level": 3,
          "title": "Math.cbrt()",
          "slug": "math-cbrt"
        },
        {
          "level": 3,
          "title": "Math.clz32()",
          "slug": "math-clz32"
        },
        {
          "level": 3,
          "title": "Math.imul()",
          "slug": "math-imul"
        },
        {
          "level": 3,
          "title": "Math.fround()",
          "slug": "math-fround"
        },
        {
          "level": 3,
          "title": "Math.hypot()",
          "slug": "math-hypot"
        },
        {
          "level": 3,
          "title": "对数方法",
          "slug": "对数方法"
        },
        {
          "level": 3,
          "title": "双曲函数方法",
          "slug": "双曲函数方法"
        },
        {
          "level": 2,
          "title": "指数运算符",
          "slug": "指数运算符"
        },
        {
          "level": 2,
          "title": "BigInt 数据类型",
          "slug": "bigint-数据类型"
        },
        {
          "level": 3,
          "title": "简介",
          "slug": "简介"
        },
        {
          "level": 3,
          "title": "BigInt 对象",
          "slug": "bigint-对象"
        },
        {
          "level": 3,
          "title": "转换规则",
          "slug": "转换规则"
        },
        {
          "level": 3,
          "title": "数学运算",
          "slug": "数学运算"
        },
        {
          "level": 3,
          "title": "其他运算",
          "slug": "其他运算"
        }
      ],
      "excerpt": "<h1 id=\"数值的扩展\"><a class=\"header-anchor\" href=\"#数值的扩展\">#</a> 数值的扩展</h1>\n<h2 id=\"二进制和八进制表示法\"><a class=\"header-anchor\" href=\"#二进制和八进制表示法\">#</a> 二进制和八进制表示法</h2>\n<p>ES6 提供了二进制和八进制数值的新的写法，分别用前缀<code>0b</code>（或<code>0B</code>）和<code>0o</code>（或<code>0O</code>）表示。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code><span class=\"token number\">0b111110111</span> <span class=\"token operator\">===</span> <span class=\"token number\">503</span> <span class=\"token comment\">// true</span>\n<span class=\"token number\">0o767</span> <span class=\"token operator\">===</span> <span class=\"token number\">503</span> <span class=\"token comment\">// true</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Set 和 Map 数据结构",
      "frontmatter": {
        "title": "Set 和 Map 数据结构",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/0c21dae358fca16b",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/13.Set%20%E5%92%8C%20Map%20%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.html",
      "relativePath": "《ES6 教程》笔记/13.Set 和 Map 数据结构.md",
      "key": "v-229f2b17",
      "path": "/pages/0c21dae358fca16b/",
      "headers": [
        {
          "level": 2,
          "title": "Set",
          "slug": "set"
        },
        {
          "level": 3,
          "title": "基本用法",
          "slug": "基本用法"
        },
        {
          "level": 3,
          "title": "Set 实例的属性和方法",
          "slug": "set-实例的属性和方法"
        },
        {
          "level": 3,
          "title": "遍历操作",
          "slug": "遍历操作"
        },
        {
          "level": 2,
          "title": "WeakSet",
          "slug": "weakset"
        },
        {
          "level": 3,
          "title": "含义",
          "slug": "含义"
        },
        {
          "level": 3,
          "title": "语法",
          "slug": "语法"
        },
        {
          "level": 2,
          "title": "Map",
          "slug": "map"
        },
        {
          "level": 3,
          "title": "含义和基本用法",
          "slug": "含义和基本用法"
        },
        {
          "level": 3,
          "title": "实例的属性和操作方法",
          "slug": "实例的属性和操作方法"
        },
        {
          "level": 3,
          "title": "遍历方法",
          "slug": "遍历方法"
        },
        {
          "level": 3,
          "title": "与其他数据结构的互相转换",
          "slug": "与其他数据结构的互相转换"
        },
        {
          "level": 2,
          "title": "WeakMap",
          "slug": "weakmap"
        },
        {
          "level": 3,
          "title": "含义",
          "slug": "含义-2"
        },
        {
          "level": 3,
          "title": "WeakMap 的语法",
          "slug": "weakmap-的语法"
        },
        {
          "level": 3,
          "title": "WeakMap 的示例",
          "slug": "weakmap-的示例"
        },
        {
          "level": 3,
          "title": "WeakMap 的用途",
          "slug": "weakmap-的用途"
        }
      ],
      "excerpt": "<h1 id=\"set-和-map-数据结构\"><a class=\"header-anchor\" href=\"#set-和-map-数据结构\">#</a> Set 和 Map 数据结构</h1>\n<h2 id=\"set\"><a class=\"header-anchor\" href=\"#set\">#</a> Set</h2>\n<h3 id=\"基本用法\"><a class=\"header-anchor\" href=\"#基本用法\">#</a> 基本用法</h3>\n<p>ES6 提供了新的数据结构 Set。它类似于数组，但是成员的值都是唯一的，没有重复的值。</p>\n<p><code>Set</code>本身是一个构造函数，用来生成 Set 数据结构。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code><span class=\"token keyword\">const</span> s <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Set</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x</span> <span class=\"token operator\">=></span> s<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> i <span class=\"token keyword\">of</span> s<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token comment\">// 2 3 5 4</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br><span class=\"line-number\">4</span><br><span class=\"line-number\">5</span><br><span class=\"line-number\">6</span><br><span class=\"line-number\">7</span><br><span class=\"line-number\">8</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "对象的扩展",
      "frontmatter": {
        "title": "对象的扩展",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/b5e3e0a0ff6e9c25",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/10.%E5%AF%B9%E8%B1%A1%E7%9A%84%E6%89%A9%E5%B1%95.html",
      "relativePath": "《ES6 教程》笔记/10.对象的扩展.md",
      "key": "v-dc2cbb9a",
      "path": "/pages/b5e3e0a0ff6e9c25/",
      "headers": [
        {
          "level": 2,
          "title": "属性的简洁表示法",
          "slug": "属性的简洁表示法"
        },
        {
          "level": 2,
          "title": "属性名表达式",
          "slug": "属性名表达式"
        },
        {
          "level": 2,
          "title": "方法的 name 属性",
          "slug": "方法的-name-属性"
        },
        {
          "level": 2,
          "title": "属性的可枚举性和遍历",
          "slug": "属性的可枚举性和遍历"
        },
        {
          "level": 3,
          "title": "可枚举性",
          "slug": "可枚举性"
        },
        {
          "level": 3,
          "title": "属性的遍历",
          "slug": "属性的遍历"
        },
        {
          "level": 2,
          "title": "super 关键字",
          "slug": "super-关键字"
        },
        {
          "level": 2,
          "title": "对象的扩展运算符",
          "slug": "对象的扩展运算符"
        },
        {
          "level": 3,
          "title": "解构赋值",
          "slug": "解构赋值"
        },
        {
          "level": 3,
          "title": "扩展运算符",
          "slug": "扩展运算符"
        },
        {
          "level": 2,
          "title": "链判断运算符",
          "slug": "链判断运算符"
        },
        {
          "level": 2,
          "title": "Null 判断运算符",
          "slug": "null-判断运算符"
        }
      ],
      "excerpt": "<h1 id=\"对象的扩展\"><a class=\"header-anchor\" href=\"#对象的扩展\">#</a> 对象的扩展</h1>\n<p>对象（object）是 JavaScript 最重要的数据结构。ES6 对它进行了重大升级，本章介绍数据结构本身的改变，下一章介绍<code>Object</code>对象的新增方法。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "数组的扩展",
      "frontmatter": {
        "title": "数组的扩展",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/e34009d60d8bc4b2",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/09.%E6%95%B0%E7%BB%84%E7%9A%84%E6%89%A9%E5%B1%95.html",
      "relativePath": "《ES6 教程》笔记/09.数组的扩展.md",
      "key": "v-119b5ae0",
      "path": "/pages/e34009d60d8bc4b2/",
      "headers": [
        {
          "level": 2,
          "title": "扩展运算符",
          "slug": "扩展运算符"
        },
        {
          "level": 3,
          "title": "含义",
          "slug": "含义"
        },
        {
          "level": 3,
          "title": "替代函数的 apply 方法",
          "slug": "替代函数的-apply-方法"
        },
        {
          "level": 3,
          "title": "扩展运算符的应用",
          "slug": "扩展运算符的应用"
        },
        {
          "level": 2,
          "title": "Array.from()",
          "slug": "array-from"
        },
        {
          "level": 2,
          "title": "Array.of()",
          "slug": "array-of"
        },
        {
          "level": 2,
          "title": "数组实例的 copyWithin()",
          "slug": "数组实例的-copywithin"
        },
        {
          "level": 2,
          "title": "数组实例的 find() 和 findIndex()",
          "slug": "数组实例的-find-和-findindex"
        },
        {
          "level": 2,
          "title": "数组实例的 fill()",
          "slug": "数组实例的-fill"
        },
        {
          "level": 2,
          "title": "数组实例的 entries()，keys() 和 values()",
          "slug": "数组实例的-entries-，keys-和-values"
        },
        {
          "level": 2,
          "title": "数组实例的 includes()",
          "slug": "数组实例的-includes"
        },
        {
          "level": 2,
          "title": "数组实例的 flat()，flatMap()",
          "slug": "数组实例的-flat-，flatmap"
        },
        {
          "level": 2,
          "title": "数组的空位",
          "slug": "数组的空位"
        },
        {
          "level": 2,
          "title": "Array.prototype.sort() 的排序稳定性",
          "slug": "array-prototype-sort-的排序稳定性"
        }
      ],
      "excerpt": "<h1 id=\"数组的扩展\"><a class=\"header-anchor\" href=\"#数组的扩展\">#</a> 数组的扩展</h1>\n<h2 id=\"扩展运算符\"><a class=\"header-anchor\" href=\"#扩展运算符\">#</a> 扩展运算符</h2>\n<h3 id=\"含义\"><a class=\"header-anchor\" href=\"#含义\">#</a> 含义</h3>\n<p>扩展运算符（spread）是三个点（<code>...</code>）。它好比 rest 参数的逆运算，将一个数组转为用逗号分隔的参数序列。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code>console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token operator\">...</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\">// 1 2 3</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">...</span><span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\">// 1 2 3 4 5</span>\n\n<span class=\"token punctuation\">[</span><span class=\"token operator\">...</span>document<span class=\"token punctuation\">.</span><span class=\"token function\">querySelectorAll</span><span class=\"token punctuation\">(</span><span class=\"token string\">'div'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n<span class=\"token comment\">// [&lt;div>, &lt;div>, &lt;div>]</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br><span class=\"line-number\">4</span><br><span class=\"line-number\">5</span><br><span class=\"line-number\">6</span><br><span class=\"line-number\">7</span><br><span class=\"line-number\">8</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Iterator 和 for-of 循环",
      "frontmatter": {
        "title": "Iterator 和 for-of 循环",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/48df907ad3570f3d",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/17.Iterator%20%E5%92%8C%20for-of%20%E5%BE%AA%E7%8E%AF.html",
      "relativePath": "《ES6 教程》笔记/17.Iterator 和 for-of 循环.md",
      "key": "v-5b00e1ab",
      "path": "/pages/48df907ad3570f3d/",
      "headers": [
        {
          "level": 2,
          "title": "Iterator（遍历器）的概念",
          "slug": "iterator（遍历器）的概念"
        },
        {
          "level": 2,
          "title": "默认 Iterator 接口",
          "slug": "默认-iterator-接口"
        },
        {
          "level": 2,
          "title": "调用 Iterator 接口的场合",
          "slug": "调用-iterator-接口的场合"
        },
        {
          "level": 2,
          "title": "字符串的 Iterator 接口",
          "slug": "字符串的-iterator-接口"
        },
        {
          "level": 2,
          "title": "Iterator 接口与 Generator 函数",
          "slug": "iterator-接口与-generator-函数"
        },
        {
          "level": 2,
          "title": "遍历器对象的 return()，throw()",
          "slug": "遍历器对象的-return-，throw"
        },
        {
          "level": 2,
          "title": "for...of 循环",
          "slug": "for-of-循环"
        },
        {
          "level": 3,
          "title": "数组",
          "slug": "数组"
        },
        {
          "level": 3,
          "title": "Set 和 Map 结构",
          "slug": "set-和-map-结构"
        },
        {
          "level": 3,
          "title": "计算生成的数据结构",
          "slug": "计算生成的数据结构"
        },
        {
          "level": 3,
          "title": "类似数组的对象",
          "slug": "类似数组的对象"
        },
        {
          "level": 3,
          "title": "对象",
          "slug": "对象"
        },
        {
          "level": 3,
          "title": "与其他遍历语法的比较",
          "slug": "与其他遍历语法的比较"
        }
      ],
      "excerpt": "<h1 id=\"iterator-和-for-of-循环\"><a class=\"header-anchor\" href=\"#iterator-和-for-of-循环\">#</a> Iterator 和 for...of 循环</h1>\n<h2 id=\"iterator（遍历器）的概念\"><a class=\"header-anchor\" href=\"#iterator（遍历器）的概念\">#</a> Iterator（遍历器）的概念</h2>\n<p>JavaScript 原有的表示“集合”的数据结构，主要是数组（<code>Array</code>）和对象（<code>Object</code>），ES6 又添加了<code>Map</code>和<code>Set</code>。这样就有了四种数据集合，用户还可以组合使用它们，定义自己的数据结构，比如数组的成员是<code>Map</code>，<code>Map</code>的成员是对象。这样就需要一种统一的接口机制，来处理所有不同的数据结构。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Symbol",
      "frontmatter": {
        "title": "Symbol",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/02c86eb2792f3262",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/12.Symbol.html",
      "relativePath": "《ES6 教程》笔记/12.Symbol.md",
      "key": "v-4b543a09",
      "path": "/pages/02c86eb2792f3262/",
      "headers": [
        {
          "level": 2,
          "title": "概述",
          "slug": "概述"
        },
        {
          "level": 2,
          "title": "Symbol.prototype.description",
          "slug": "symbol-prototype-description"
        },
        {
          "level": 2,
          "title": "作为属性名的 Symbol",
          "slug": "作为属性名的-symbol"
        },
        {
          "level": 2,
          "title": "实例：消除魔术字符串",
          "slug": "实例：消除魔术字符串"
        },
        {
          "level": 2,
          "title": "属性名的遍历",
          "slug": "属性名的遍历"
        },
        {
          "level": 2,
          "title": "Symbol.for()，Symbol.keyFor()",
          "slug": "symbol-for-，symbol-keyfor"
        },
        {
          "level": 2,
          "title": "实例：模块的 Singleton 模式",
          "slug": "实例：模块的-singleton-模式"
        },
        {
          "level": 2,
          "title": "内置的 Symbol 值",
          "slug": "内置的-symbol-值"
        },
        {
          "level": 3,
          "title": "Symbol.hasInstance",
          "slug": "symbol-hasinstance"
        },
        {
          "level": 3,
          "title": "Symbol.isConcatSpreadable",
          "slug": "symbol-isconcatspreadable"
        },
        {
          "level": 3,
          "title": "Symbol.species",
          "slug": "symbol-species"
        },
        {
          "level": 3,
          "title": "Symbol.match",
          "slug": "symbol-match"
        },
        {
          "level": 3,
          "title": "Symbol.replace",
          "slug": "symbol-replace"
        },
        {
          "level": 3,
          "title": "Symbol.search",
          "slug": "symbol-search"
        },
        {
          "level": 3,
          "title": "Symbol.split",
          "slug": "symbol-split"
        },
        {
          "level": 3,
          "title": "Symbol.iterator",
          "slug": "symbol-iterator"
        },
        {
          "level": 3,
          "title": "Symbol.toPrimitive",
          "slug": "symbol-toprimitive"
        },
        {
          "level": 3,
          "title": "Symbol.toStringTag",
          "slug": "symbol-tostringtag"
        },
        {
          "level": 3,
          "title": "Symbol.unscopables",
          "slug": "symbol-unscopables"
        }
      ],
      "excerpt": "<h1 id=\"symbol\"><a class=\"header-anchor\" href=\"#symbol\">#</a> Symbol</h1>\n<h2 id=\"概述\"><a class=\"header-anchor\" href=\"#概述\">#</a> 概述</h2>\n<p>ES5 的对象属性名都是字符串，这容易造成属性名的冲突。比如，你使用了一个他人提供的对象，但又想为这个对象添加新的方法（mixin 模式），新方法的名字就有可能与现有方法产生冲突。如果有一种机制，保证每个属性的名字都是独一无二的就好了，这样就从根本上防止属性名的冲突。这就是 ES6 引入<code>Symbol</code>的原因。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Generator 函数的异步应用",
      "frontmatter": {
        "title": "Generator 函数的异步应用",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/75af7031eb66847b",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/19.Generator%20%E5%87%BD%E6%95%B0%E7%9A%84%E5%BC%82%E6%AD%A5%E5%BA%94%E7%94%A8.html",
      "relativePath": "《ES6 教程》笔记/19.Generator 函数的异步应用.md",
      "key": "v-0fe1a1a4",
      "path": "/pages/75af7031eb66847b/",
      "headers": [
        {
          "level": 2,
          "title": "传统方法",
          "slug": "传统方法"
        },
        {
          "level": 2,
          "title": "基本概念",
          "slug": "基本概念"
        },
        {
          "level": 3,
          "title": "异步",
          "slug": "异步"
        },
        {
          "level": 3,
          "title": "回调函数",
          "slug": "回调函数"
        },
        {
          "level": 3,
          "title": "Promise",
          "slug": "promise"
        },
        {
          "level": 2,
          "title": "Generator 函数",
          "slug": "generator-函数"
        },
        {
          "level": 3,
          "title": "协程",
          "slug": "协程"
        },
        {
          "level": 3,
          "title": "协程的 Generator 函数实现",
          "slug": "协程的-generator-函数实现"
        },
        {
          "level": 3,
          "title": "Generator 函数的数据交换和错误处理",
          "slug": "generator-函数的数据交换和错误处理"
        },
        {
          "level": 3,
          "title": "异步任务的封装",
          "slug": "异步任务的封装"
        },
        {
          "level": 2,
          "title": "Thunk 函数",
          "slug": "thunk-函数"
        },
        {
          "level": 3,
          "title": "参数的求值策略",
          "slug": "参数的求值策略"
        },
        {
          "level": 3,
          "title": "Thunk 函数的含义",
          "slug": "thunk-函数的含义"
        },
        {
          "level": 3,
          "title": "JavaScript 语言的 Thunk 函数",
          "slug": "javascript-语言的-thunk-函数"
        },
        {
          "level": 3,
          "title": "Thunkify 模块",
          "slug": "thunkify-模块"
        },
        {
          "level": 3,
          "title": "Generator 函数的流程管理",
          "slug": "generator-函数的流程管理"
        },
        {
          "level": 3,
          "title": "Thunk 函数的自动流程管理",
          "slug": "thunk-函数的自动流程管理"
        },
        {
          "level": 2,
          "title": "co 模块",
          "slug": "co-模块"
        },
        {
          "level": 3,
          "title": "基本用法",
          "slug": "基本用法"
        },
        {
          "level": 3,
          "title": "co 模块的原理",
          "slug": "co-模块的原理"
        },
        {
          "level": 3,
          "title": "基于 Promise 对象的自动执行",
          "slug": "基于-promise-对象的自动执行"
        },
        {
          "level": 3,
          "title": "co 模块的源码",
          "slug": "co-模块的源码"
        },
        {
          "level": 3,
          "title": "处理并发的异步操作",
          "slug": "处理并发的异步操作"
        },
        {
          "level": 3,
          "title": "实例：处理 Stream",
          "slug": "实例：处理-stream"
        }
      ],
      "excerpt": "<h1 id=\"generator-函数的异步应用\"><a class=\"header-anchor\" href=\"#generator-函数的异步应用\">#</a> Generator 函数的异步应用</h1>\n<p>异步编程对 JavaScript 语言太重要。JavaScript 语言的执行环境是“单线程”的，如果没有异步编程，根本没法用，非卡死不可。本章主要介绍 Generator 函数如何完成异步操作。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Module 的语法",
      "frontmatter": {
        "title": "Module 的语法",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/efe2fb04eb8ac5fb",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/23.Module%20%E7%9A%84%E8%AF%AD%E6%B3%95.html",
      "relativePath": "《ES6 教程》笔记/23.Module 的语法.md",
      "key": "v-7eadd142",
      "path": "/pages/efe2fb04eb8ac5fb/",
      "headers": [
        {
          "level": 2,
          "title": "概述",
          "slug": "概述"
        },
        {
          "level": 2,
          "title": "严格模式",
          "slug": "严格模式"
        },
        {
          "level": 2,
          "title": "export 命令",
          "slug": "export-命令"
        },
        {
          "level": 2,
          "title": "import 命令",
          "slug": "import-命令"
        },
        {
          "level": 2,
          "title": "模块的整体加载",
          "slug": "模块的整体加载"
        },
        {
          "level": 2,
          "title": "export default 命令",
          "slug": "export-default-命令"
        },
        {
          "level": 2,
          "title": "export 与 import 的复合写法",
          "slug": "export-与-import-的复合写法"
        },
        {
          "level": 2,
          "title": "模块的继承",
          "slug": "模块的继承"
        },
        {
          "level": 2,
          "title": "跨模块常量",
          "slug": "跨模块常量"
        },
        {
          "level": 2,
          "title": "import()",
          "slug": "import"
        },
        {
          "level": 3,
          "title": "简介",
          "slug": "简介"
        },
        {
          "level": 3,
          "title": "适用场合",
          "slug": "适用场合"
        },
        {
          "level": 3,
          "title": "注意点",
          "slug": "注意点"
        }
      ],
      "excerpt": "<h1 id=\"module-的语法\"><a class=\"header-anchor\" href=\"#module-的语法\">#</a> Module 的语法</h1>\n<h2 id=\"概述\"><a class=\"header-anchor\" href=\"#概述\">#</a> 概述</h2>\n<p>历史上，JavaScript 一直没有模块（module）体系，无法将一个大程序拆分成互相依赖的小文件，再用简单的方法拼装起来。其他语言都有这项功能，比如 Ruby 的<code>require</code>、Python 的<code>import</code>，甚至就连 CSS 都有<code>@import</code>，但是 JavaScript 任何这方面的支持都没有，这对开发大型的、复杂的项目形成了巨大障碍。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Class 的基本语法",
      "frontmatter": {
        "title": "Class 的基本语法",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/e831e1593c82bbe0",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/21.Class%20%E7%9A%84%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95.html",
      "relativePath": "《ES6 教程》笔记/21.Class 的基本语法.md",
      "key": "v-65889086",
      "path": "/pages/e831e1593c82bbe0/",
      "headers": [
        {
          "level": 2,
          "title": "简介",
          "slug": "简介"
        },
        {
          "level": 3,
          "title": "类的由来",
          "slug": "类的由来"
        },
        {
          "level": 3,
          "title": "constructor 方法",
          "slug": "constructor-方法"
        },
        {
          "level": 3,
          "title": "类的实例",
          "slug": "类的实例"
        },
        {
          "level": 3,
          "title": "取值函数（getter）和存值函数（setter）",
          "slug": "取值函数（getter）和存值函数（setter）"
        },
        {
          "level": 3,
          "title": "属性表达式",
          "slug": "属性表达式"
        },
        {
          "level": 3,
          "title": "Class 表达式",
          "slug": "class-表达式"
        },
        {
          "level": 3,
          "title": "注意点",
          "slug": "注意点"
        },
        {
          "level": 2,
          "title": "静态方法",
          "slug": "静态方法"
        },
        {
          "level": 2,
          "title": "实例属性的新写法",
          "slug": "实例属性的新写法"
        },
        {
          "level": 2,
          "title": "静态属性",
          "slug": "静态属性"
        },
        {
          "level": 2,
          "title": "私有方法和私有属性",
          "slug": "私有方法和私有属性"
        },
        {
          "level": 3,
          "title": "现有的解决方案",
          "slug": "现有的解决方案"
        },
        {
          "level": 3,
          "title": "私有属性的提案",
          "slug": "私有属性的提案"
        },
        {
          "level": 2,
          "title": "new.target 属性",
          "slug": "new-target-属性"
        }
      ],
      "excerpt": "<h1 id=\"class-的基本语法\"><a class=\"header-anchor\" href=\"#class-的基本语法\">#</a> Class 的基本语法</h1>\n<h2 id=\"简介\"><a class=\"header-anchor\" href=\"#简介\">#</a> 简介</h2>\n<h3 id=\"类的由来\"><a class=\"header-anchor\" href=\"#类的由来\">#</a> 类的由来</h3>\n<p>JavaScript 语言中，生成实例对象的传统方法是通过构造函数。下面是一个例子。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code><span class=\"token keyword\">function</span> <span class=\"token function\">Point</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">,</span> y</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>x <span class=\"token operator\">=</span> x<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>y <span class=\"token operator\">=</span> y<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token class-name\">Point</span><span class=\"token punctuation\">.</span>prototype<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">toString</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token string\">'('</span> <span class=\"token operator\">+</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>x <span class=\"token operator\">+</span> <span class=\"token string\">', '</span> <span class=\"token operator\">+</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>y <span class=\"token operator\">+</span> <span class=\"token string\">')'</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">var</span> p <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Point</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br><span class=\"line-number\">4</span><br><span class=\"line-number\">5</span><br><span class=\"line-number\">6</span><br><span class=\"line-number\">7</span><br><span class=\"line-number\">8</span><br><span class=\"line-number\">9</span><br><span class=\"line-number\">10</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "async 函数",
      "frontmatter": {
        "title": "async 函数",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/3777253e65bac487",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/20.async%20%E5%87%BD%E6%95%B0.html",
      "relativePath": "《ES6 教程》笔记/20.async 函数.md",
      "key": "v-097898b6",
      "path": "/pages/3777253e65bac487/",
      "headers": [
        {
          "level": 2,
          "title": "含义",
          "slug": "含义"
        },
        {
          "level": 2,
          "title": "基本用法",
          "slug": "基本用法"
        },
        {
          "level": 2,
          "title": "语法",
          "slug": "语法"
        },
        {
          "level": 3,
          "title": "返回 Promise 对象",
          "slug": "返回-promise-对象"
        },
        {
          "level": 3,
          "title": "Promise 对象的状态变化",
          "slug": "promise-对象的状态变化"
        },
        {
          "level": 3,
          "title": "await 命令",
          "slug": "await-命令"
        },
        {
          "level": 3,
          "title": "错误处理",
          "slug": "错误处理"
        },
        {
          "level": 3,
          "title": "使用注意点",
          "slug": "使用注意点"
        },
        {
          "level": 2,
          "title": "async 函数的实现原理",
          "slug": "async-函数的实现原理"
        },
        {
          "level": 2,
          "title": "与其他异步处理方法的比较",
          "slug": "与其他异步处理方法的比较"
        },
        {
          "level": 2,
          "title": "实例：按顺序完成异步操作",
          "slug": "实例：按顺序完成异步操作"
        },
        {
          "level": 2,
          "title": "顶层 await",
          "slug": "顶层-await"
        }
      ],
      "excerpt": "<h1 id=\"async-函数\"><a class=\"header-anchor\" href=\"#async-函数\">#</a> async 函数</h1>\n<h2 id=\"含义\"><a class=\"header-anchor\" href=\"#含义\">#</a> 含义</h2>\n<p>ES2017 标准引入了 async 函数，使得异步操作变得更加方便。</p>\n<p>async 函数是什么？一句话，它就是 Generator 函数的语法糖。</p>\n<p>前文有一个 Generator 函数，依次读取两个文件。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Module 的加载实现",
      "frontmatter": {
        "title": "Module 的加载实现",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/a79ca2e64ceae213",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/24.Module%20%E7%9A%84%E5%8A%A0%E8%BD%BD%E5%AE%9E%E7%8E%B0.html",
      "relativePath": "《ES6 教程》笔记/24.Module 的加载实现.md",
      "key": "v-7c946970",
      "path": "/pages/a79ca2e64ceae213/",
      "headers": [
        {
          "level": 2,
          "title": "浏览器加载",
          "slug": "浏览器加载"
        },
        {
          "level": 3,
          "title": "传统方法",
          "slug": "传统方法"
        },
        {
          "level": 3,
          "title": "加载规则",
          "slug": "加载规则"
        },
        {
          "level": 2,
          "title": "ES6 模块与 CommonJS 模块的差异",
          "slug": "es6-模块与-commonjs-模块的差异"
        },
        {
          "level": 2,
          "title": "Node.js 加载",
          "slug": "node-js-加载"
        },
        {
          "level": 3,
          "title": "概述",
          "slug": "概述"
        },
        {
          "level": 3,
          "title": "main 字段",
          "slug": "main-字段"
        },
        {
          "level": 3,
          "title": "exports 字段",
          "slug": "exports-字段"
        },
        {
          "level": 3,
          "title": "ES6 模块加载 CommonJS 模块",
          "slug": "es6-模块加载-commonjs-模块"
        },
        {
          "level": 3,
          "title": "CommonJS 模块加载 ES6 模块",
          "slug": "commonjs-模块加载-es6-模块"
        },
        {
          "level": 3,
          "title": "Node.js 的内置模块",
          "slug": "node-js-的内置模块"
        },
        {
          "level": 3,
          "title": "加载路径",
          "slug": "加载路径"
        },
        {
          "level": 3,
          "title": "内部变量",
          "slug": "内部变量"
        },
        {
          "level": 2,
          "title": "循环加载",
          "slug": "循环加载"
        },
        {
          "level": 3,
          "title": "CommonJS 模块的加载原理",
          "slug": "commonjs-模块的加载原理"
        },
        {
          "level": 3,
          "title": "CommonJS 模块的循环加载",
          "slug": "commonjs-模块的循环加载"
        },
        {
          "level": 3,
          "title": "ES6 模块的循环加载",
          "slug": "es6-模块的循环加载"
        }
      ],
      "excerpt": "<h1 id=\"module-的加载实现\"><a class=\"header-anchor\" href=\"#module-的加载实现\">#</a> Module 的加载实现</h1>\n<p>上一章介绍了模块的语法，本章介绍如何在浏览器和 Node.js 之中加载 ES6 模块，以及实际开发中经常遇到的一些问题（比如循环加载）。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "SIMD",
      "frontmatter": {
        "title": "SIMD",
        "date": "2020-02-09T16:00:30.000Z",
        "permalink": "/pages/8e8f80f69b775a56",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/33.SIMD.html",
      "relativePath": "《ES6 教程》笔记/33.SIMD.md",
      "key": "v-0be141dd",
      "path": "/pages/8e8f80f69b775a56/",
      "headers": [
        {
          "level": 2,
          "title": "概述",
          "slug": "概述"
        },
        {
          "level": 2,
          "title": "数据类型",
          "slug": "数据类型"
        },
        {
          "level": 2,
          "title": "静态方法：数学运算",
          "slug": "静态方法：数学运算"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.abs()，SIMD.%type%.neg()",
          "slug": "simd-type-abs-，simd-type-neg"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.add()，SIMD.%type%.addSaturate()",
          "slug": "simd-type-add-，simd-type-addsaturate"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.sub()，SIMD.%type%.subSaturate()",
          "slug": "simd-type-sub-，simd-type-subsaturate"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.mul()，SIMD.%type%.div()，SIMD.%type%.sqrt()",
          "slug": "simd-type-mul-，simd-type-div-，simd-type-sqrt"
        },
        {
          "level": 3,
          "title": "SIMD.%FloatType%.reciprocalApproximation()，SIMD.%type%.reciprocalSqrtApproximation()",
          "slug": "simd-floattype-reciprocalapproximation-，simd-type-reciprocalsqrtapproximation"
        },
        {
          "level": 3,
          "title": "SIMD.%IntegerType%.shiftLeftByScalar()",
          "slug": "simd-integertype-shiftleftbyscalar"
        },
        {
          "level": 3,
          "title": "SIMD.%IntegerType%.shiftRightByScalar()",
          "slug": "simd-integertype-shiftrightbyscalar"
        },
        {
          "level": 2,
          "title": "静态方法：通道处理",
          "slug": "静态方法：通道处理"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.check()",
          "slug": "simd-type-check"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.extractLane()，SIMD.%type%.replaceLane()",
          "slug": "simd-type-extractlane-，simd-type-replacelane"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.load()",
          "slug": "simd-type-load"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.store()",
          "slug": "simd-type-store"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.splat()",
          "slug": "simd-type-splat"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.swizzle()",
          "slug": "simd-type-swizzle"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.shuffle()",
          "slug": "simd-type-shuffle"
        },
        {
          "level": 2,
          "title": "静态方法：比较运算",
          "slug": "静态方法：比较运算"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.equal()，SIMD.%type%.notEqual()",
          "slug": "simd-type-equal-，simd-type-notequal"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.greaterThan()，SIMD.%type%.greaterThanOrEqual()",
          "slug": "simd-type-greaterthan-，simd-type-greaterthanorequal"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.lessThan()，SIMD.%type%.lessThanOrEqual()",
          "slug": "simd-type-lessthan-，simd-type-lessthanorequal"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.select()",
          "slug": "simd-type-select"
        },
        {
          "level": 3,
          "title": "SIMD.%BooleanType%.allTrue()，SIMD.%BooleanType%.anyTrue()",
          "slug": "simd-booleantype-alltrue-，simd-booleantype-anytrue"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.min()，SIMD.%type%.minNum()",
          "slug": "simd-type-min-，simd-type-minnum"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.max()，SIMD.%type%.maxNum()",
          "slug": "simd-type-max-，simd-type-maxnum"
        },
        {
          "level": 2,
          "title": "静态方法：位运算",
          "slug": "静态方法：位运算"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.and()，SIMD.%type%.or()，SIMD.%type%.xor()，SIMD.%type%.not()",
          "slug": "simd-type-and-，simd-type-or-，simd-type-xor-，simd-type-not"
        },
        {
          "level": 2,
          "title": "静态方法：数据类型转换",
          "slug": "静态方法：数据类型转换"
        },
        {
          "level": 2,
          "title": "实例方法",
          "slug": "实例方法"
        },
        {
          "level": 3,
          "title": "SIMD.%type%.prototype.toString()",
          "slug": "simd-type-prototype-tostring"
        },
        {
          "level": 2,
          "title": "实例：求平均值",
          "slug": "实例：求平均值"
        }
      ],
      "excerpt": "<h1 id=\"simd\"><a class=\"header-anchor\" href=\"#simd\">#</a> SIMD</h1>\n<h2 id=\"概述\"><a class=\"header-anchor\" href=\"#概述\">#</a> 概述</h2>\n<p>SIMD（发音<code>/sim-dee/</code>）是“Single Instruction/Multiple Data”的缩写，意为“单指令，多数据”。它是 JavaScript 操作 CPU 对应指令的接口，你可以看做这是一种不同的运算执行模式。与它相对的是 SISD（“Single Instruction/Single Data”），即“单指令，单数据”。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "参考链接",
      "frontmatter": {
        "title": "参考链接",
        "date": "2020-02-09T16:00:30.000Z",
        "permalink": "/pages/ea6f3b870f6dab69",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/34.%E5%8F%82%E8%80%83%E9%93%BE%E6%8E%A5.html",
      "relativePath": "《ES6 教程》笔记/34.参考链接.md",
      "key": "v-dd286c88",
      "path": "/pages/ea6f3b870f6dab69/",
      "headers": [
        {
          "level": 2,
          "title": "官方文件",
          "slug": "官方文件"
        },
        {
          "level": 2,
          "title": "综合介绍",
          "slug": "综合介绍"
        },
        {
          "level": 2,
          "title": "let 和 const",
          "slug": "let-和-const"
        },
        {
          "level": 2,
          "title": "解构赋值",
          "slug": "解构赋值"
        },
        {
          "level": 2,
          "title": "字符串",
          "slug": "字符串"
        },
        {
          "level": 2,
          "title": "正则",
          "slug": "正则"
        },
        {
          "level": 2,
          "title": "数值",
          "slug": "数值"
        },
        {
          "level": 2,
          "title": "数组",
          "slug": "数组"
        },
        {
          "level": 2,
          "title": "函数",
          "slug": "函数"
        },
        {
          "level": 2,
          "title": "对象",
          "slug": "对象"
        },
        {
          "level": 2,
          "title": "Symbol",
          "slug": "symbol"
        },
        {
          "level": 2,
          "title": "Set 和 Map",
          "slug": "set-和-map"
        },
        {
          "level": 2,
          "title": "Proxy 和 Reflect",
          "slug": "proxy-和-reflect"
        },
        {
          "level": 2,
          "title": "Promise 对象",
          "slug": "promise-对象"
        },
        {
          "level": 2,
          "title": "Iterator",
          "slug": "iterator"
        },
        {
          "level": 2,
          "title": "Generator",
          "slug": "generator"
        },
        {
          "level": 2,
          "title": "异步操作和 Async 函数",
          "slug": "异步操作和-async-函数"
        },
        {
          "level": 2,
          "title": "Class",
          "slug": "class"
        },
        {
          "level": 2,
          "title": "Decorator",
          "slug": "decorator"
        },
        {
          "level": 2,
          "title": "Module",
          "slug": "module"
        },
        {
          "level": 2,
          "title": "二进制数组",
          "slug": "二进制数组"
        },
        {
          "level": 2,
          "title": "SIMD",
          "slug": "simd"
        },
        {
          "level": 2,
          "title": "工具",
          "slug": "工具"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "函数的扩展",
      "frontmatter": {
        "title": "函数的扩展",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/8ed309d668b20264",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/08.%E5%87%BD%E6%95%B0%E7%9A%84%E6%89%A9%E5%B1%95.html",
      "relativePath": "《ES6 教程》笔记/08.函数的扩展.md",
      "key": "v-f1d3b2b4",
      "path": "/pages/8ed309d668b20264/",
      "headers": [
        {
          "level": 2,
          "title": "函数参数的默认值",
          "slug": "函数参数的默认值"
        },
        {
          "level": 3,
          "title": "基本用法",
          "slug": "基本用法"
        },
        {
          "level": 3,
          "title": "与解构赋值默认值结合使用",
          "slug": "与解构赋值默认值结合使用"
        },
        {
          "level": 3,
          "title": "参数默认值的位置",
          "slug": "参数默认值的位置"
        },
        {
          "level": 3,
          "title": "函数的 length 属性",
          "slug": "函数的-length-属性"
        },
        {
          "level": 3,
          "title": "作用域",
          "slug": "作用域"
        },
        {
          "level": 3,
          "title": "应用",
          "slug": "应用"
        },
        {
          "level": 2,
          "title": "rest 参数",
          "slug": "rest-参数"
        },
        {
          "level": 2,
          "title": "严格模式",
          "slug": "严格模式"
        },
        {
          "level": 2,
          "title": "name 属性",
          "slug": "name-属性"
        },
        {
          "level": 2,
          "title": "箭头函数",
          "slug": "箭头函数"
        },
        {
          "level": 3,
          "title": "基本用法",
          "slug": "基本用法-2"
        },
        {
          "level": 3,
          "title": "使用注意点",
          "slug": "使用注意点"
        },
        {
          "level": 3,
          "title": "不适用场合",
          "slug": "不适用场合"
        },
        {
          "level": 3,
          "title": "嵌套的箭头函数",
          "slug": "嵌套的箭头函数"
        },
        {
          "level": 2,
          "title": "尾调用优化",
          "slug": "尾调用优化"
        },
        {
          "level": 3,
          "title": "什么是尾调用？",
          "slug": "什么是尾调用？"
        },
        {
          "level": 3,
          "title": "尾调用优化",
          "slug": "尾调用优化-2"
        },
        {
          "level": 3,
          "title": "尾递归",
          "slug": "尾递归"
        },
        {
          "level": 3,
          "title": "递归函数的改写",
          "slug": "递归函数的改写"
        },
        {
          "level": 3,
          "title": "严格模式",
          "slug": "严格模式-2"
        },
        {
          "level": 3,
          "title": "尾递归优化的实现",
          "slug": "尾递归优化的实现"
        },
        {
          "level": 2,
          "title": "函数参数的尾逗号",
          "slug": "函数参数的尾逗号"
        },
        {
          "level": 2,
          "title": "Function.prototype.toString()",
          "slug": "function-prototype-tostring"
        },
        {
          "level": 2,
          "title": "catch 命令的参数省略",
          "slug": "catch-命令的参数省略"
        }
      ],
      "excerpt": "<h1 id=\"函数的扩展\"><a class=\"header-anchor\" href=\"#函数的扩展\">#</a> 函数的扩展</h1>\n<h2 id=\"函数参数的默认值\"><a class=\"header-anchor\" href=\"#函数参数的默认值\">#</a> 函数参数的默认值</h2>\n<h3 id=\"基本用法\"><a class=\"header-anchor\" href=\"#基本用法\">#</a> 基本用法</h3>\n<p>ES6 之前，不能直接为函数的参数指定默认值，只能采用变通的方法。</p>\n<!--beforebegin--><div class=\"language-javascript line-numbers-mode\"><!--afterbegin--><pre v-pre class=\"language-javascript\"><code><span class=\"token keyword\">function</span> <span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">x<span class=\"token punctuation\">,</span> y</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  y <span class=\"token operator\">=</span> y <span class=\"token operator\">||</span> <span class=\"token string\">'World'</span><span class=\"token punctuation\">;</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Hello'</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// Hello World</span>\n<span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Hello'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'China'</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// Hello China</span>\n<span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Hello'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">''</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// Hello World</span>\n</code></pre>\n<div class=\"line-numbers-wrapper\"><span class=\"line-number\">1</span><br><span class=\"line-number\">2</span><br><span class=\"line-number\">3</span><br><span class=\"line-number\">4</span><br><span class=\"line-number\">5</span><br><span class=\"line-number\">6</span><br><span class=\"line-number\">7</span><br><span class=\"line-number\">8</span><br></div><!--beforeend--></div><!--afterend-->",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Proxy",
      "frontmatter": {
        "title": "Proxy",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/f56ec2ab97d60483",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/14.Proxy.html",
      "relativePath": "《ES6 教程》笔记/14.Proxy.md",
      "key": "v-f38d914e",
      "path": "/pages/f56ec2ab97d60483/",
      "headers": [
        {
          "level": 2,
          "title": "概述",
          "slug": "概述"
        },
        {
          "level": 2,
          "title": "Proxy 实例的方法",
          "slug": "proxy-实例的方法"
        },
        {
          "level": 3,
          "title": "get()",
          "slug": "get"
        },
        {
          "level": 3,
          "title": "set()",
          "slug": "set"
        },
        {
          "level": 3,
          "title": "apply()",
          "slug": "apply"
        },
        {
          "level": 3,
          "title": "has()",
          "slug": "has"
        },
        {
          "level": 3,
          "title": "construct()",
          "slug": "construct"
        },
        {
          "level": 3,
          "title": "deleteProperty()",
          "slug": "deleteproperty"
        },
        {
          "level": 3,
          "title": "defineProperty()",
          "slug": "defineproperty"
        },
        {
          "level": 3,
          "title": "getOwnPropertyDescriptor()",
          "slug": "getownpropertydescriptor"
        },
        {
          "level": 3,
          "title": "getPrototypeOf()",
          "slug": "getprototypeof"
        },
        {
          "level": 3,
          "title": "isExtensible()",
          "slug": "isextensible"
        },
        {
          "level": 3,
          "title": "ownKeys()",
          "slug": "ownkeys"
        },
        {
          "level": 3,
          "title": "preventExtensions()",
          "slug": "preventextensions"
        },
        {
          "level": 3,
          "title": "setPrototypeOf()",
          "slug": "setprototypeof"
        },
        {
          "level": 2,
          "title": "Proxy.revocable()",
          "slug": "proxy-revocable"
        },
        {
          "level": 2,
          "title": "this 问题",
          "slug": "this-问题"
        },
        {
          "level": 2,
          "title": "实例：Web 服务的客户端",
          "slug": "实例：web-服务的客户端"
        }
      ],
      "excerpt": "<h1 id=\"proxy\"><a class=\"header-anchor\" href=\"#proxy\">#</a> Proxy</h1>\n<h2 id=\"概述\"><a class=\"header-anchor\" href=\"#概述\">#</a> 概述</h2>\n<p>Proxy 用于修改某些操作的默认行为，等同于在语言层面做出修改，所以属于一种“元编程”（meta programming），即对编程语言进行编程。</p>\n<p>Proxy 可以理解成，在目标对象之前架设一层“拦截”，外界对该对象的访问，都必须先通过这层拦截，因此提供了一种机制，可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理，用在这里表示由它来“代理”某些操作，可以译为“代理器”。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Promise 对象",
      "frontmatter": {
        "title": "Promise 对象",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/2810ae8985e9bd52",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/16.Promise%20%E5%AF%B9%E8%B1%A1.html",
      "relativePath": "《ES6 教程》笔记/16.Promise 对象.md",
      "key": "v-c9cb0acc",
      "path": "/pages/2810ae8985e9bd52/",
      "headers": [
        {
          "level": 2,
          "title": "Promise 的含义",
          "slug": "promise-的含义"
        },
        {
          "level": 2,
          "title": "基本用法",
          "slug": "基本用法"
        },
        {
          "level": 2,
          "title": "Promise.prototype.then()",
          "slug": "promise-prototype-then"
        },
        {
          "level": 2,
          "title": "Promise.prototype.catch()",
          "slug": "promise-prototype-catch"
        },
        {
          "level": 2,
          "title": "Promise.prototype.finally()",
          "slug": "promise-prototype-finally"
        },
        {
          "level": 2,
          "title": "Promise.all()",
          "slug": "promise-all"
        },
        {
          "level": 2,
          "title": "Promise.race()",
          "slug": "promise-race"
        },
        {
          "level": 2,
          "title": "Promise.allSettled()",
          "slug": "promise-allsettled"
        },
        {
          "level": 2,
          "title": "Promise.any()",
          "slug": "promise-any"
        },
        {
          "level": 2,
          "title": "Promise.resolve()",
          "slug": "promise-resolve"
        },
        {
          "level": 2,
          "title": "Promise.reject()",
          "slug": "promise-reject"
        },
        {
          "level": 2,
          "title": "应用",
          "slug": "应用"
        },
        {
          "level": 3,
          "title": "加载图片",
          "slug": "加载图片"
        },
        {
          "level": 3,
          "title": "Generator 函数与 Promise 的结合",
          "slug": "generator-函数与-promise-的结合"
        },
        {
          "level": 2,
          "title": "Promise.try()",
          "slug": "promise-try"
        }
      ],
      "excerpt": "<h1 id=\"promise-对象\"><a class=\"header-anchor\" href=\"#promise-对象\">#</a> Promise 对象</h1>\n<h2 id=\"promise-的含义\"><a class=\"header-anchor\" href=\"#promise-的含义\">#</a> Promise 的含义</h2>\n<p>Promise 是异步编程的一种解决方案，比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现，ES6 将其写进了语言标准，统一了用法，原生提供了<code>Promise</code>对象。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Generator 函数的语法",
      "frontmatter": {
        "title": "Generator 函数的语法",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/718b48ed9ce0adce",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/18.Generator%20%E5%87%BD%E6%95%B0%E7%9A%84%E8%AF%AD%E6%B3%95.html",
      "relativePath": "《ES6 教程》笔记/18.Generator 函数的语法.md",
      "key": "v-1dc8d0ef",
      "path": "/pages/718b48ed9ce0adce/",
      "headers": [
        {
          "level": 2,
          "title": "简介",
          "slug": "简介"
        },
        {
          "level": 3,
          "title": "基本概念",
          "slug": "基本概念"
        },
        {
          "level": 3,
          "title": "yield 表达式",
          "slug": "yield-表达式"
        },
        {
          "level": 3,
          "title": "与 Iterator 接口的关系",
          "slug": "与-iterator-接口的关系"
        },
        {
          "level": 2,
          "title": "next 方法的参数",
          "slug": "next-方法的参数"
        },
        {
          "level": 2,
          "title": "for...of 循环",
          "slug": "for-of-循环"
        },
        {
          "level": 2,
          "title": "Generator.prototype.throw()",
          "slug": "generator-prototype-throw"
        },
        {
          "level": 2,
          "title": "Generator.prototype.return()",
          "slug": "generator-prototype-return"
        },
        {
          "level": 2,
          "title": "next()、throw()、return() 的共同点",
          "slug": "next-、throw-、return-的共同点"
        },
        {
          "level": 2,
          "title": "yield* 表达式",
          "slug": "yield-表达式-2"
        },
        {
          "level": 2,
          "title": "作为对象属性的 Generator 函数",
          "slug": "作为对象属性的-generator-函数"
        },
        {
          "level": 2,
          "title": "Generator 函数的this",
          "slug": "generator-函数的this"
        },
        {
          "level": 2,
          "title": "含义",
          "slug": "含义"
        },
        {
          "level": 3,
          "title": "Generator 与状态机",
          "slug": "generator-与状态机"
        },
        {
          "level": 3,
          "title": "Generator 与协程",
          "slug": "generator-与协程"
        },
        {
          "level": 3,
          "title": "Generator 与上下文",
          "slug": "generator-与上下文"
        },
        {
          "level": 2,
          "title": "应用",
          "slug": "应用"
        },
        {
          "level": 3,
          "title": "（1）异步操作的同步化表达",
          "slug": "（1）异步操作的同步化表达"
        },
        {
          "level": 3,
          "title": "（2）控制流管理",
          "slug": "（2）控制流管理"
        },
        {
          "level": 3,
          "title": "（3）部署 Iterator 接口",
          "slug": "（3）部署-iterator-接口"
        },
        {
          "level": 3,
          "title": "（4）作为数据结构",
          "slug": "（4）作为数据结构"
        }
      ],
      "excerpt": "<h1 id=\"generator-函数的语法\"><a class=\"header-anchor\" href=\"#generator-函数的语法\">#</a> Generator 函数的语法</h1>\n<h2 id=\"简介\"><a class=\"header-anchor\" href=\"#简介\">#</a> 简介</h2>\n<h3 id=\"基本概念\"><a class=\"header-anchor\" href=\"#基本概念\">#</a> 基本概念</h3>\n<p>Generator 函数是 ES6 提供的一种异步编程解决方案，语法行为与传统函数完全不同。本章详细介绍 Generator 函数的语法和 API，它的异步编程应用请看《Generator 函数的异步应用》一章。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "ArrayBuffer",
      "frontmatter": {
        "title": "ArrayBuffer",
        "date": "2020-02-09T16:00:29.000Z",
        "permalink": "/pages/a2ba314746bfdbdd",
        "author": "阮一峰",
        "categories": [
          "《ES6 教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AES6%20%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/28.ArrayBuffer.html",
      "relativePath": "《ES6 教程》笔记/28.ArrayBuffer.md",
      "key": "v-9c6fcdce",
      "path": "/pages/a2ba314746bfdbdd/",
      "headers": [
        {
          "level": 2,
          "title": "ArrayBuffer 对象",
          "slug": "arraybuffer-对象"
        },
        {
          "level": 3,
          "title": "概述",
          "slug": "概述"
        },
        {
          "level": 3,
          "title": "ArrayBuffer.prototype.byteLength",
          "slug": "arraybuffer-prototype-bytelength"
        },
        {
          "level": 3,
          "title": "ArrayBuffer.prototype.slice()",
          "slug": "arraybuffer-prototype-slice"
        },
        {
          "level": 3,
          "title": "ArrayBuffer.isView()",
          "slug": "arraybuffer-isview"
        },
        {
          "level": 2,
          "title": "TypedArray 视图",
          "slug": "typedarray-视图"
        },
        {
          "level": 3,
          "title": "概述",
          "slug": "概述-2"
        },
        {
          "level": 3,
          "title": "构造函数",
          "slug": "构造函数"
        },
        {
          "level": 3,
          "title": "数组方法",
          "slug": "数组方法"
        },
        {
          "level": 3,
          "title": "字节序",
          "slug": "字节序"
        },
        {
          "level": 3,
          "title": "BYTESPERELEMENT 属性",
          "slug": "bytes-per-element-属性"
        },
        {
          "level": 3,
          "title": "ArrayBuffer 与字符串的互相转换",
          "slug": "arraybuffer-与字符串的互相转换"
        },
        {
          "level": 3,
          "title": "溢出",
          "slug": "溢出"
        },
        {
          "level": 3,
          "title": "TypedArray.prototype.buffer",
          "slug": "typedarray-prototype-buffer"
        },
        {
          "level": 3,
          "title": "TypedArray.prototype.byteLength，TypedArray.prototype.byteOffset",
          "slug": "typedarray-prototype-bytelength，typedarray-prototype-byteoffset"
        },
        {
          "level": 3,
          "title": "TypedArray.prototype.length",
          "slug": "typedarray-prototype-length"
        },
        {
          "level": 3,
          "title": "TypedArray.prototype.set()",
          "slug": "typedarray-prototype-set"
        },
        {
          "level": 3,
          "title": "TypedArray.prototype.subarray()",
          "slug": "typedarray-prototype-subarray"
        },
        {
          "level": 3,
          "title": "TypedArray.prototype.slice()",
          "slug": "typedarray-prototype-slice"
        },
        {
          "level": 3,
          "title": "TypedArray.of()",
          "slug": "typedarray-of"
        },
        {
          "level": 3,
          "title": "TypedArray.from()",
          "slug": "typedarray-from"
        },
        {
          "level": 2,
          "title": "复合视图",
          "slug": "复合视图"
        },
        {
          "level": 2,
          "title": "DataView 视图",
          "slug": "dataview-视图"
        },
        {
          "level": 2,
          "title": "二进制数组的应用",
          "slug": "二进制数组的应用"
        },
        {
          "level": 3,
          "title": "AJAX",
          "slug": "ajax"
        },
        {
          "level": 3,
          "title": "Canvas",
          "slug": "canvas"
        },
        {
          "level": 3,
          "title": "WebSocket",
          "slug": "websocket"
        },
        {
          "level": 3,
          "title": "Fetch API",
          "slug": "fetch-api"
        },
        {
          "level": 3,
          "title": "File API",
          "slug": "file-api"
        },
        {
          "level": 2,
          "title": "SharedArrayBuffer",
          "slug": "sharedarraybuffer"
        },
        {
          "level": 2,
          "title": "Atomics 对象",
          "slug": "atomics-对象"
        }
      ],
      "excerpt": "<h1 id=\"arraybuffer\"><a class=\"header-anchor\" href=\"#arraybuffer\">#</a> ArrayBuffer</h1>\n<p><code>ArrayBuffer</code>对象、<code>TypedArray</code>视图和<code>DataView</code>视图是 JavaScript 操作二进制数据的一个接口。这些对象早就存在，属于独立的规格（2011 年 2 月发布），ES6 将它们纳入了 ECMAScript 规格，并且增加了新的方法。它们都是以数组的语法处理二进制数据，所以统称为二进制数组。</p>\n",
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "小程序笔记",
      "frontmatter": {
        "title": "小程序笔记",
        "date": "2019-12-25T14:27:01.000Z",
        "permalink": "/note/wx-miniprogram",
        "tags": [
          null
        ],
        "categories": [
          "前端",
          "学习笔记"
        ]
      },
      "regularPath": "/01.%E5%89%8D%E7%AB%AF/40.%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/40.%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AC%94%E8%AE%B0.html",
      "relativePath": "01.前端/40.学习笔记/40.小程序笔记.md",
      "key": "v-3b655aa9",
      "path": "/note/wx-miniprogram/",
      "headers": [
        {
          "level": 2,
          "title": "基础课程部分",
          "slug": "基础课程部分"
        },
        {
          "level": 2,
          "title": "实战课程部分",
          "slug": "实战课程部分"
        },
        {
          "level": 2,
          "title": "《发现》页面",
          "slug": "《发现》页面"
        },
        {
          "level": 2,
          "title": "《我的》页面",
          "slug": "《我的》页面"
        },
        {
          "level": 3,
          "title": "版本更新检测",
          "slug": "版本更新检测"
        },
        {
          "level": 3,
          "title": "性能优化",
          "slug": "性能优化"
        },
        {
          "level": 3,
          "title": "场景值scene的作用与应用场景",
          "slug": "场景值scene的作用与应用场景"
        },
        {
          "level": 3,
          "title": "小程序的\"SEO\"---页面收录sitemap",
          "slug": "小程序的-seo-页面收录sitemap"
        },
        {
          "level": 3,
          "title": "小程序上线审核流程",
          "slug": "小程序上线审核流程"
        },
        {
          "level": 2,
          "title": "后台管理系统",
          "slug": "后台管理系统"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "面向对象",
      "frontmatter": {
        "title": "面向对象",
        "date": "2020-01-12T11:49:16.000Z",
        "permalink": "/pages/659b5af5e2e704e0",
        "categories": [
          "《JavaScript教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AJavaScript%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/03.%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1.html",
      "relativePath": "《JavaScript教程》笔记/03.面向对象.md",
      "key": "v-76929004",
      "path": "/pages/659b5af5e2e704e0/",
      "headers": [
        {
          "level": 2,
          "title": "一、实例对象与new命令",
          "slug": "一、实例对象与new命令"
        },
        {
          "level": 3,
          "title": "1、对象是什么",
          "slug": "_1、对象是什么"
        },
        {
          "level": 3,
          "title": "2、构造函数",
          "slug": "_2、构造函数"
        },
        {
          "level": 3,
          "title": "3、new命令",
          "slug": "_3、new命令"
        },
        {
          "level": 3,
          "title": "4、Object.create()创建实例对象",
          "slug": "_4、object-create-创建实例对象"
        },
        {
          "level": 2,
          "title": "二、this关键字",
          "slug": "二、this关键字"
        },
        {
          "level": 3,
          "title": "1、涵义",
          "slug": "_1、涵义"
        },
        {
          "level": 3,
          "title": "2、实质",
          "slug": "_2、实质"
        },
        {
          "level": 3,
          "title": "3、使用场合",
          "slug": "_3、使用场合"
        },
        {
          "level": 3,
          "title": "4、使用注意点",
          "slug": "_4、使用注意点"
        },
        {
          "level": 3,
          "title": "5、绑定 this 的方法",
          "slug": "_5、绑定-this-的方法"
        },
        {
          "level": 2,
          "title": "三、对象的继承",
          "slug": "三、对象的继承"
        },
        {
          "level": 3,
          "title": "1、原型对象概述",
          "slug": "_1、原型对象概述"
        },
        {
          "level": 3,
          "title": "2、instanceof 运算符",
          "slug": "_2、instanceof-运算符"
        },
        {
          "level": 3,
          "title": "3、构造函数的继承",
          "slug": "_3、构造函数的继承"
        },
        {
          "level": 3,
          "title": "4、多重继承",
          "slug": "_4、多重继承"
        },
        {
          "level": 3,
          "title": "5、模块",
          "slug": "_5、模块"
        },
        {
          "level": 2,
          "title": "四、Object 对象的相关方法",
          "slug": "四、object-对象的相关方法"
        },
        {
          "level": 3,
          "title": "1、Object.getPrototypeOf() 获取原型对象",
          "slug": "_1、object-getprototypeof-获取原型对象"
        },
        {
          "level": 3,
          "title": "2、Object.setPrototypeOf() 设置原型对象",
          "slug": "_2、object-setprototypeof-设置原型对象"
        },
        {
          "level": 3,
          "title": "3、 Object.create() 创建实例对象，指向目标对象的原型",
          "slug": "_3、-object-create-创建实例对象，指向目标对象的原型"
        },
        {
          "level": 3,
          "title": "4、Object.prototype.isPrototypeOf()判断某个对象是否为参数对象的原型",
          "slug": "_4、object-prototype-isprototypeof-判断某个对象是否为参数对象的原型"
        },
        {
          "level": 3,
          "title": "5、Object.prototype.__proto__ 返回该对象的原型，可读写",
          "slug": "_5、object-prototype-proto-返回该对象的原型，可读写"
        },
        {
          "level": 3,
          "title": "6、获取原型对象方法的比较",
          "slug": "_6、获取原型对象方法的比较"
        },
        {
          "level": 3,
          "title": "7、Object.getOwnPropertyNames()",
          "slug": "_7、object-getownpropertynames"
        },
        {
          "level": 3,
          "title": "8、Object.prototype.hasOwnProperty()",
          "slug": "_8、object-prototype-hasownproperty"
        },
        {
          "level": 3,
          "title": "9、in 运算符和 for...in 循环",
          "slug": "_9、in-运算符和-for-in-循环"
        },
        {
          "level": 3,
          "title": "10、对象的拷贝",
          "slug": "_10、对象的拷贝"
        },
        {
          "level": 2,
          "title": "五、严格模式",
          "slug": "五、严格模式"
        },
        {
          "level": 3,
          "title": "1、设计目的",
          "slug": "_1、设计目的"
        },
        {
          "level": 3,
          "title": "2、启用方法",
          "slug": "_2、启用方法"
        },
        {
          "level": 2,
          "title": "文档",
          "slug": "文档"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "事件",
      "frontmatter": {
        "title": "事件",
        "date": "2020-01-12T11:49:16.000Z",
        "permalink": "/pages/10b2761db5a8e089",
        "categories": [
          "《JavaScript教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AJavaScript%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/06.%E4%BA%8B%E4%BB%B6.html",
      "relativePath": "《JavaScript教程》笔记/06.事件.md",
      "key": "v-7126b814",
      "path": "/pages/10b2761db5a8e089/",
      "headers": [
        {
          "level": 2,
          "title": "一、EventTarget 接口",
          "slug": "一、eventtarget-接口"
        },
        {
          "level": 3,
          "title": "1、概述",
          "slug": "_1、概述"
        },
        {
          "level": 3,
          "title": "2、EventTarget.addEventListener()",
          "slug": "_2、eventtarget-addeventlistener"
        },
        {
          "level": 3,
          "title": "3、EventTarget.removeEventListener()",
          "slug": "_3、eventtarget-removeeventlistener"
        },
        {
          "level": 3,
          "title": "4、EventTarget.dispatchEvent()",
          "slug": "_4、eventtarget-dispatchevent"
        },
        {
          "level": 2,
          "title": "二、事件模型",
          "slug": "二、事件模型"
        },
        {
          "level": 3,
          "title": "1、监听函数",
          "slug": "_1、监听函数"
        },
        {
          "level": 3,
          "title": "2、this 的指向 （指向元素节点）",
          "slug": "_2、this-的指向-（指向元素节点）"
        },
        {
          "level": 3,
          "title": "3、事件的传播（捕获、目标、冒泡）",
          "slug": "_3、事件的传播（捕获、目标、冒泡）"
        },
        {
          "level": 3,
          "title": "4、事件的代理",
          "slug": "_4、事件的代理"
        },
        {
          "level": 2,
          "title": "三、Event 对象",
          "slug": "三、event-对象"
        },
        {
          "level": 3,
          "title": "1. 概述",
          "slug": "_1-概述"
        },
        {
          "level": 3,
          "title": "2. 实例属性",
          "slug": "_2-实例属性"
        },
        {
          "level": 3,
          "title": "3、实例方法",
          "slug": "_3、实例方法"
        },
        {
          "level": 2,
          "title": "四、鼠标事件",
          "slug": "四、鼠标事件"
        },
        {
          "level": 3,
          "title": "1、鼠标事件的种类",
          "slug": "_1、鼠标事件的种类"
        },
        {
          "level": 3,
          "title": "2、MouseEvent 接口概述",
          "slug": "_2、mouseevent-接口概述"
        },
        {
          "level": 3,
          "title": "3、MouseEvent 接口的实例属性",
          "slug": "_3、mouseevent-接口的实例属性"
        },
        {
          "level": 3,
          "title": "4、MouseEvent 接口的实例方法",
          "slug": "_4、mouseevent-接口的实例方法"
        },
        {
          "level": 3,
          "title": "5、WheelEvent 接口 （滚轮）",
          "slug": "_5、wheelevent-接口-（滚轮）"
        },
        {
          "level": 2,
          "title": "五、键盘事件",
          "slug": "五、键盘事件"
        },
        {
          "level": 3,
          "title": "1、键盘事件的种类",
          "slug": "_1、键盘事件的种类"
        },
        {
          "level": 3,
          "title": "2、KeyboardEvent 接口概述",
          "slug": "_2、keyboardevent-接口概述"
        },
        {
          "level": 3,
          "title": "3、KeyboardEvent 的实例属性",
          "slug": "_3、keyboardevent-的实例属性"
        },
        {
          "level": 3,
          "title": "4、KeyboardEvent 的实例方法",
          "slug": "_4、keyboardevent-的实例方法"
        },
        {
          "level": 2,
          "title": "六、进度事件",
          "slug": "六、进度事件"
        },
        {
          "level": 3,
          "title": "1、进度事件的种类",
          "slug": "_1、进度事件的种类"
        },
        {
          "level": 3,
          "title": "2、ProgressEvent 接口",
          "slug": "_2、progressevent-接口"
        },
        {
          "level": 2,
          "title": "七、表单事件",
          "slug": "七、表单事件"
        },
        {
          "level": 3,
          "title": "1、表单事件的种类",
          "slug": "_1、表单事件的种类"
        },
        {
          "level": 3,
          "title": "2、InputEvent 接口（input事件的实例）",
          "slug": "_2、inputevent-接口（input事件的实例）"
        },
        {
          "level": 2,
          "title": "八、触摸事件",
          "slug": "八、触摸事件"
        },
        {
          "level": 3,
          "title": "1、触摸操作概述",
          "slug": "_1、触摸操作概述"
        },
        {
          "level": 3,
          "title": "2、Touch 接口",
          "slug": "_2、touch-接口"
        },
        {
          "level": 3,
          "title": "3、TouchList 接口",
          "slug": "_3、touchlist-接口"
        },
        {
          "level": 3,
          "title": "4、TouchEvent 接口",
          "slug": "_4、touchevent-接口"
        },
        {
          "level": 3,
          "title": "5、触摸事件的种类",
          "slug": "_5、触摸事件的种类"
        },
        {
          "level": 2,
          "title": "九、拖拉事件",
          "slug": "九、拖拉事件"
        },
        {
          "level": 3,
          "title": "1、拖拉事件的种类",
          "slug": "_1、拖拉事件的种类"
        },
        {
          "level": 3,
          "title": "2、DragEvent 接口",
          "slug": "_2、dragevent-接口"
        },
        {
          "level": 3,
          "title": "3、DataTransfer 接口概述",
          "slug": "_3、datatransfer-接口概述"
        },
        {
          "level": 3,
          "title": "4、DataTransfer 的实例属性",
          "slug": "_4、datatransfer-的实例属性"
        },
        {
          "level": 3,
          "title": "5、DataTransfer 的实例方法",
          "slug": "_5、datatransfer-的实例方法"
        },
        {
          "level": 2,
          "title": "十、其他常见事件",
          "slug": "十、其他常见事件"
        },
        {
          "level": 3,
          "title": "1、资源事件",
          "slug": "_1、资源事件"
        },
        {
          "level": 3,
          "title": "2、session 历史事件",
          "slug": "_2、session-历史事件"
        },
        {
          "level": 3,
          "title": "3、网页状态事件",
          "slug": "_3、网页状态事件"
        },
        {
          "level": 3,
          "title": "4、窗口事件",
          "slug": "_4、窗口事件"
        },
        {
          "level": 3,
          "title": "5、剪贴板事件",
          "slug": "_5、剪贴板事件"
        },
        {
          "level": 3,
          "title": "6、焦点事件",
          "slug": "_6、焦点事件"
        },
        {
          "level": 3,
          "title": "7、CustomEvent 接口（自定义事件）",
          "slug": "_7、customevent-接口（自定义事件）"
        },
        {
          "level": 2,
          "title": "十一、GlobalEventHandlers 接口 （全局事件处理接口）",
          "slug": "十一、globaleventhandlers-接口-（全局事件处理接口）"
        },
        {
          "level": 3,
          "title": "1、GlobalEventHandlers.onabort （中断事件）",
          "slug": "_1、globaleventhandlers-onabort-（中断事件）"
        },
        {
          "level": 3,
          "title": "2、GlobalEventHandlers.onerror （错误事件）",
          "slug": "_2、globaleventhandlers-onerror-（错误事件）"
        },
        {
          "level": 3,
          "title": "3、GlobalEventHandlers.onload（加载完成事件）、GlobalEventHandlers.onloadstart（开始加载事件）",
          "slug": "_3、globaleventhandlers-onload（加载完成事件）、globaleventhandlers-onloadstart（开始加载事件）"
        },
        {
          "level": 3,
          "title": "4、GlobalEventHandlers.onfocus（获取焦点事件），GlobalEventHandlers.onblur（失去焦点事件）",
          "slug": "_4、globaleventhandlers-onfocus（获取焦点事件），globaleventhandlers-onblur（失去焦点事件）"
        },
        {
          "level": 3,
          "title": "5、GlobalEventHandlers.onscroll（滚动事件）",
          "slug": "_5、globaleventhandlers-onscroll（滚动事件）"
        },
        {
          "level": 3,
          "title": "6、GlobalEventHandlers.oncontextmenu（右键菜单事件），GlobalEventHandlers.onshow（显示右键菜单时触发）",
          "slug": "_6、globaleventhandlers-oncontextmenu（右键菜单事件），globaleventhandlers-onshow（显示右键菜单时触发）"
        },
        {
          "level": 3,
          "title": "7、其他的事件属性",
          "slug": "_7、其他的事件属性"
        },
        {
          "level": 2,
          "title": "文档",
          "slug": "文档"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "内置对象",
      "frontmatter": {
        "title": "内置对象",
        "date": "2020-01-12T11:49:16.000Z",
        "permalink": "/pages/74d2ab3fbfeaaa68",
        "categories": [
          "《JavaScript教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AJavaScript%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/02.%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1.html",
      "relativePath": "《JavaScript教程》笔记/02.内置对象.md",
      "key": "v-927fa10c",
      "path": "/pages/74d2ab3fbfeaaa68/",
      "headers": [
        {
          "level": 2,
          "title": "一、Object对象",
          "slug": "一、object对象"
        },
        {
          "level": 2,
          "title": "1、概述",
          "slug": "_1、概述"
        },
        {
          "level": 2,
          "title": "2、Object() 当作工具方法（不通过new创建）",
          "slug": "_2、object-当作工具方法（不通过new创建）"
        },
        {
          "level": 2,
          "title": "3、Object构造函数（通过new创建）",
          "slug": "_3、object构造函数（通过new创建）"
        },
        {
          "level": 2,
          "title": "4、Object 的静态方法",
          "slug": "_4、object-的静态方法"
        },
        {
          "level": 3,
          "title": "Object.keys()",
          "slug": "object-keys"
        },
        {
          "level": 3,
          "title": "Object.getOwnPropertyNames()",
          "slug": "object-getownpropertynames"
        },
        {
          "level": 3,
          "title": "Object的其他静态方法",
          "slug": "object的其他静态方法"
        },
        {
          "level": 2,
          "title": "5、Object 的实例方法",
          "slug": "_5、object-的实例方法"
        },
        {
          "level": 3,
          "title": "Object.prototype.valueOf()",
          "slug": "object-prototype-valueof"
        },
        {
          "level": 3,
          "title": "Object.prototype.toString()",
          "slug": "object-prototype-tostring"
        },
        {
          "level": 3,
          "title": "Object.prototype.toLocaleString()",
          "slug": "object-prototype-tolocalestring"
        },
        {
          "level": 3,
          "title": "Object.prototype.hasOwnProperty()",
          "slug": "object-prototype-hasownproperty"
        },
        {
          "level": 2,
          "title": "二、属性描述对象",
          "slug": "二、属性描述对象"
        },
        {
          "level": 2,
          "title": "1、概述",
          "slug": "_1、概述-2"
        },
        {
          "level": 2,
          "title": "2、Object.getOwnPropertyDescriptor()",
          "slug": "_2、object-getownpropertydescriptor"
        },
        {
          "level": 2,
          "title": "3、Object.getOwnPropertyNames()",
          "slug": "_3、object-getownpropertynames"
        },
        {
          "level": 2,
          "title": "4、Object.defineProperty()，Object.defineProperties()",
          "slug": "_4、object-defineproperty-，object-defineproperties"
        },
        {
          "level": 2,
          "title": "5、Object.prototype.propertyIsEnumerable()",
          "slug": "_5、object-prototype-propertyisenumerable"
        },
        {
          "level": 2,
          "title": "6、元属性",
          "slug": "_6、元属性"
        },
        {
          "level": 3,
          "title": "value目标属性的值",
          "slug": "value目标属性的值"
        },
        {
          "level": 3,
          "title": "writable可写性",
          "slug": "writable可写性"
        },
        {
          "level": 3,
          "title": "enumerable可遍历性",
          "slug": "enumerable可遍历性"
        },
        {
          "level": 3,
          "title": "configurable可配置性",
          "slug": "configurable可配置性"
        },
        {
          "level": 2,
          "title": "7、存取器（get和set）",
          "slug": "_7、存取器（get和set）"
        },
        {
          "level": 2,
          "title": "8、对象的拷贝",
          "slug": "_8、对象的拷贝"
        },
        {
          "level": 2,
          "title": "9、控制对象读写状态",
          "slug": "_9、控制对象读写状态"
        },
        {
          "level": 3,
          "title": "Object.preventExtensions() 防止新增",
          "slug": "object-preventextensions-防止新增"
        },
        {
          "level": 3,
          "title": "Object.isExtensible() 是可新增的？",
          "slug": "object-isextensible-是可新增的？"
        },
        {
          "level": 3,
          "title": "Object.seal() 密封",
          "slug": "object-seal-密封"
        },
        {
          "level": 3,
          "title": "Object.isSealed() 是密封的？",
          "slug": "object-issealed-是密封的？"
        },
        {
          "level": 3,
          "title": "Object.freeze() 冻结",
          "slug": "object-freeze-冻结"
        },
        {
          "level": 3,
          "title": "Object.isFrozen() 是冻结的？",
          "slug": "object-isfrozen-是冻结的？"
        },
        {
          "level": 3,
          "title": "局限性",
          "slug": "局限性"
        },
        {
          "level": 2,
          "title": "三、Array对象",
          "slug": "三、array对象"
        },
        {
          "level": 2,
          "title": "1、Array构造函数",
          "slug": "_1、array构造函数"
        },
        {
          "level": 2,
          "title": "2、静态方法",
          "slug": "_2、静态方法"
        },
        {
          "level": 3,
          "title": "Array.isArray()",
          "slug": "array-isarray"
        },
        {
          "level": 2,
          "title": "3、实例方法",
          "slug": "_3、实例方法"
        },
        {
          "level": 3,
          "title": "valueOf() 原数组，toString() 转字符串",
          "slug": "valueof-原数组，tostring-转字符串"
        },
        {
          "level": 3,
          "title": "push() 末尾添加，pop() 删除末尾",
          "slug": "push-末尾添加，pop-删除末尾"
        },
        {
          "level": 3,
          "title": "unshift() 首位添加, shift() 删除首位",
          "slug": "unshift-首位添加-shift-删除首位"
        },
        {
          "level": 3,
          "title": "join() 连接每个成员-转字符串",
          "slug": "join-连接每个成员-转字符串"
        },
        {
          "level": 3,
          "title": "concat() 合并数组",
          "slug": "concat-合并数组"
        },
        {
          "level": 3,
          "title": "reverse() 反转",
          "slug": "reverse-反转"
        },
        {
          "level": 3,
          "title": "slice() 部分-提取部分成员",
          "slug": "slice-部分-提取部分成员"
        },
        {
          "level": 3,
          "title": "splice()  从第几个开始，删除几个，并添加成员，返回被删除成员。",
          "slug": "splice-从第几个开始，删除几个，并添加成员，返回被删除成员。"
        },
        {
          "level": 3,
          "title": "sort() 排序",
          "slug": "sort-排序"
        },
        {
          "level": 3,
          "title": "map() 映射 每个成员 并返回",
          "slug": "map-映射-每个成员-并返回"
        },
        {
          "level": 3,
          "title": "forEach() 循环每个成员",
          "slug": "foreach-循环每个成员"
        },
        {
          "level": 3,
          "title": "filter() 过滤",
          "slug": "filter-过滤"
        },
        {
          "level": 3,
          "title": "some()某个，every()每个",
          "slug": "some-某个，every-每个"
        },
        {
          "level": 3,
          "title": "reduce() 累计器，reduceRight() 反向累计器",
          "slug": "reduce-累计器，reduceright-反向累计器"
        },
        {
          "level": 3,
          "title": "indexOf() 搜索成员第一个出现的位置，lastIndexOf() 搜索成员最后出现的位置",
          "slug": "indexof-搜索成员第一个出现的位置，lastindexof-搜索成员最后出现的位置"
        },
        {
          "level": 3,
          "title": "链式使用",
          "slug": "链式使用"
        },
        {
          "level": 2,
          "title": "四、包装对象",
          "slug": "四、包装对象"
        },
        {
          "level": 2,
          "title": "1、定义",
          "slug": "_1、定义"
        },
        {
          "level": 2,
          "title": "2、实例方法",
          "slug": "_2、实例方法"
        },
        {
          "level": 3,
          "title": "2.1 valueOf()",
          "slug": "_2-1-valueof"
        },
        {
          "level": 3,
          "title": "2.2 toString()",
          "slug": "_2-2-tostring"
        },
        {
          "level": 2,
          "title": "3、原始类型与实例对象的自动转换",
          "slug": "_3、原始类型与实例对象的自动转换"
        },
        {
          "level": 2,
          "title": "4、自定义方法",
          "slug": "_4、自定义方法"
        },
        {
          "level": 2,
          "title": "五、Boolean对象",
          "slug": "五、boolean对象"
        },
        {
          "level": 2,
          "title": "1、概述",
          "slug": "_1、概述-3"
        },
        {
          "level": 2,
          "title": "2、Boolean 函数的类型转换作用",
          "slug": "_2、boolean-函数的类型转换作用"
        },
        {
          "level": 2,
          "title": "六、Number对象",
          "slug": "六、number对象"
        },
        {
          "level": 2,
          "title": "1、概述",
          "slug": "_1、概述-4"
        },
        {
          "level": 2,
          "title": "2、静态属性",
          "slug": "_2、静态属性"
        },
        {
          "level": 2,
          "title": "3、实例方法",
          "slug": "_3、实例方法-2"
        },
        {
          "level": 3,
          "title": "3.1 Number.prototype.toString() 可转成多种进制字符串",
          "slug": "_3-1-number-prototype-tostring-可转成多种进制字符串"
        },
        {
          "level": 3,
          "title": "3.2 Number.prototype.toFixed() 转成保留指定小数位数的字符串",
          "slug": "_3-2-number-prototype-tofixed-转成保留指定小数位数的字符串"
        },
        {
          "level": 3,
          "title": "3.3 Number.prototype.toExponential() 转成科学计数法形式字符串",
          "slug": "_3-3-number-prototype-toexponential-转成科学计数法形式字符串"
        },
        {
          "level": 3,
          "title": "3.4 Number.prototype.toPrecision()转为指定位数的有效数字",
          "slug": "_3-4-number-prototype-toprecision-转为指定位数的有效数字"
        },
        {
          "level": 3,
          "title": "4.5 Number.prototype.toLocaleString()",
          "slug": "_4-5-number-prototype-tolocalestring"
        },
        {
          "level": 2,
          "title": "4、自定义方法",
          "slug": "_4、自定义方法-2"
        },
        {
          "level": 2,
          "title": "七、String对象",
          "slug": "七、string对象"
        },
        {
          "level": 2,
          "title": "1、概述",
          "slug": "_1、概述-5"
        },
        {
          "level": 2,
          "title": "2、静态方法",
          "slug": "_2、静态方法-2"
        },
        {
          "level": 3,
          "title": "String.fromCharCode()",
          "slug": "string-fromcharcode"
        },
        {
          "level": 2,
          "title": "3、实例属性",
          "slug": "_3、实例属性"
        },
        {
          "level": 3,
          "title": "String.prototype.length",
          "slug": "string-prototype-length"
        },
        {
          "level": 2,
          "title": "4、实例方法",
          "slug": "_4、实例方法"
        },
        {
          "level": 3,
          "title": "4.1 String.prototype.charAt() 返回指定位置的字符",
          "slug": "_4-1-string-prototype-charat-返回指定位置的字符"
        },
        {
          "level": 3,
          "title": "4.2 String.prototype.charCodeAt()返回字符串指定位置的 Unicode 码点（十进制表示）",
          "slug": "_4-2-string-prototype-charcodeat-返回字符串指定位置的-unicode-码点（十进制表示）"
        },
        {
          "level": 3,
          "title": "4.3 String.prototype.concat() 合并字符串，返回新字符串，不改变原字符串",
          "slug": "_4-3-string-prototype-concat-合并字符串，返回新字符串，不改变原字符串"
        },
        {
          "level": 3,
          "title": "4.4 String.prototype.slice() 取出部分子字符串，不改变原字符串",
          "slug": "_4-4-string-prototype-slice-取出部分子字符串，不改变原字符串"
        },
        {
          "level": 3,
          "title": "4.5 String.prototype.substring() 和slice类似",
          "slug": "_4-5-string-prototype-substring-和slice类似"
        },
        {
          "level": 3,
          "title": "4.6 String.prototype.substr() 和 slice、substring类似，区别是参数二表示长度",
          "slug": "_4-6-string-prototype-substr-和-slice、substring类似，区别是参数二表示长度"
        },
        {
          "level": 3,
          "title": "4.7 String.prototype.indexOf() 搜索子串第一个出现的位置，String.prototype.lastIndexOf() 搜索子串最后出现的位置",
          "slug": "_4-7-string-prototype-indexof-搜索子串第一个出现的位置，string-prototype-lastindexof-搜索子串最后出现的位置"
        },
        {
          "level": 3,
          "title": "4.8 String.prototype.trim()  ''修剪'‘两端空格，不改变原字符串",
          "slug": "_4-8-string-prototype-trim-修剪-两端空格，不改变原字符串"
        },
        {
          "level": 3,
          "title": "4.9 String.prototype.toLowerCase() 全转小写，String.prototype.toUpperCase() 全转大写，都不改变原字符串",
          "slug": "_4-9-string-prototype-tolowercase-全转小写，string-prototype-touppercase-全转大写，都不改变原字符串"
        },
        {
          "level": 3,
          "title": "4.10 String.prototype.match() 匹配子串，返回数组（数组带index、input属性）",
          "slug": "_4-10-string-prototype-match-匹配子串，返回数组（数组带index、input属性）"
        },
        {
          "level": 3,
          "title": "4.11 String.prototype.search() 搜索子串第一次出现的位置，没有则返-1，String.prototype.replace() 替换子串，参数二替换参数一，不改变原字符串",
          "slug": "_4-11-string-prototype-search-搜索子串第一次出现的位置，没有则返-1，string-prototype-replace-替换子串，参数二替换参数一，不改变原字符串"
        },
        {
          "level": 3,
          "title": "4.12 String.prototype.split() 按给定规则分割字符串，返回数组",
          "slug": "_4-12-string-prototype-split-按给定规则分割字符串，返回数组"
        },
        {
          "level": 3,
          "title": "4.13 String.prototype.localeCompare() 比较两个字符串，返回整数。",
          "slug": "_4-13-string-prototype-localecompare-比较两个字符串，返回整数。"
        },
        {
          "level": 2,
          "title": "八、Math对象",
          "slug": "八、math对象"
        },
        {
          "level": 2,
          "title": "1、静态属性",
          "slug": "_1、静态属性"
        },
        {
          "level": 2,
          "title": "2、静态方法",
          "slug": "_2、静态方法-3"
        },
        {
          "level": 3,
          "title": "2.1 Math.abs() 绝对值",
          "slug": "_2-1-math-abs-绝对值"
        },
        {
          "level": 3,
          "title": "2.2 Math.max() 最大值，Math.min()最 小值",
          "slug": "_2-2-math-max-最大值，math-min-最-小值"
        },
        {
          "level": 3,
          "title": "2.3 Math.floor() 向下取整，Math.ceil() 向上取整",
          "slug": "_2-3-math-floor-向下取整，math-ceil-向上取整"
        },
        {
          "level": 3,
          "title": "2.4 Math.round() 四舍五入",
          "slug": "_2-4-math-round-四舍五入"
        },
        {
          "level": 3,
          "title": "2.5 Math.pow() 指数运算 （次方运算）",
          "slug": "_2-5-math-pow-指数运算-（次方运算）"
        },
        {
          "level": 3,
          "title": "2.6 Math.sqrt() 平方根",
          "slug": "_2-6-math-sqrt-平方根"
        },
        {
          "level": 3,
          "title": "2.7 Math.log() 自然对数",
          "slug": "_2-7-math-log-自然对数"
        },
        {
          "level": 3,
          "title": "2.8 Math.exp() e的指数",
          "slug": "_2-8-math-exp-e的指数"
        },
        {
          "level": 3,
          "title": "2.9 Math.random() 0到1的随机数（可能等于0，但一定小于1）",
          "slug": "_2-9-math-random-0到1的随机数（可能等于0，但一定小于1）"
        },
        {
          "level": 3,
          "title": "2.10 三角函数方法",
          "slug": "_2-10-三角函数方法"
        },
        {
          "level": 2,
          "title": "九、Date对象",
          "slug": "九、date对象"
        },
        {
          "level": 2,
          "title": "1、普通函数的用法",
          "slug": "_1、普通函数的用法"
        },
        {
          "level": 2,
          "title": "2、构造函数的用法",
          "slug": "_2、构造函数的用法"
        },
        {
          "level": 2,
          "title": "3、日期的运算",
          "slug": "_3、日期的运算"
        },
        {
          "level": 2,
          "title": "4、静态方法",
          "slug": "_4、静态方法"
        },
        {
          "level": 3,
          "title": "4.1 Date.now() 当前时间戳",
          "slug": "_4-1-date-now-当前时间戳"
        },
        {
          "level": 3,
          "title": "4.2 Date.parse() 解析日期字符串，返回该时间点的时间戳",
          "slug": "_4-2-date-parse-解析日期字符串，返回该时间点的时间戳"
        },
        {
          "level": 3,
          "title": "4.3 Date.UTC() 以年、月、日等变量作为参数，返回该时间点的时间戳",
          "slug": "_4-3-date-utc-以年、月、日等变量作为参数，返回该时间点的时间戳"
        },
        {
          "level": 2,
          "title": "5、实例方法",
          "slug": "_5、实例方法"
        },
        {
          "level": 3,
          "title": "5.1 Date.prototype.valueOf() 返回时间戳，等同于getTime()。（减法运算默认调用）",
          "slug": "_5-1-date-prototype-valueof-返回时间戳，等同于gettime-。（减法运算默认调用）"
        },
        {
          "level": 3,
          "title": "5.2 to 类方法（返回字符串相关）",
          "slug": "_5-2-to-类方法（返回字符串相关）"
        },
        {
          "level": 3,
          "title": "5.3 get类 （获取年、月、日、时、分、秒等）",
          "slug": "_5-3-get类-（获取年、月、日、时、分、秒等）"
        },
        {
          "level": 3,
          "title": "5.4 set 类方法",
          "slug": "_5-4-set-类方法"
        },
        {
          "level": 2,
          "title": "十、RegExp 对象",
          "slug": "十、regexp-对象"
        },
        {
          "level": 2,
          "title": "1、概述",
          "slug": "_1、概述-6"
        },
        {
          "level": 2,
          "title": "2、实例属性",
          "slug": "_2、实例属性"
        },
        {
          "level": 2,
          "title": "3、实例方法",
          "slug": "_3、实例方法-3"
        },
        {
          "level": 3,
          "title": "3.1 RegExp.prototype.test() 当前模式是否匹配参数字符串，返回布尔值",
          "slug": "_3-1-regexp-prototype-test-当前模式是否匹配参数字符串，返回布尔值"
        },
        {
          "level": 3,
          "title": "3.2 RegExp.prototype.exec() 返回匹配结果，如匹配则返回一个数组，成员是匹配到的子字符串，否则返回null",
          "slug": "_3-2-regexp-prototype-exec-返回匹配结果，如匹配则返回一个数组，成员是匹配到的子字符串，否则返回null"
        },
        {
          "level": 2,
          "title": "4、字符串的实例方法",
          "slug": "_4、字符串的实例方法"
        },
        {
          "level": 3,
          "title": "4.1 String.prototype.match() 匹配，返回匹配结果数组或null",
          "slug": "_4-1-string-prototype-match-匹配，返回匹配结果数组或null"
        },
        {
          "level": 3,
          "title": "4.2 String.prototype.search() 返回第一个满足匹配条件的位置，不满足则返-1",
          "slug": "_4-2-string-prototype-search-返回第一个满足匹配条件的位置，不满足则返-1"
        },
        {
          "level": 3,
          "title": "4.3 String.prototype.replace() 替换匹配的值，参数一是子串或正则，参数二是替换内容",
          "slug": "_4-3-string-prototype-replace-替换匹配的值，参数一是子串或正则，参数二是替换内容"
        },
        {
          "level": 3,
          "title": "4.4 String.prototype.split() 按给定规则分割字符串，返回数组",
          "slug": "_4-4-string-prototype-split-按给定规则分割字符串，返回数组"
        },
        {
          "level": 2,
          "title": "5、匹配规则",
          "slug": "_5、匹配规则"
        },
        {
          "level": 3,
          "title": "5.1 字面量字符和元字符",
          "slug": "_5-1-字面量字符和元字符"
        },
        {
          "level": 3,
          "title": "5.2 转义符（\\ 反斜杠）",
          "slug": "_5-2-转义符（-反斜杠）"
        },
        {
          "level": 3,
          "title": "5.3 特殊字符",
          "slug": "_5-3-特殊字符"
        },
        {
          "level": 3,
          "title": "5.4 字符类",
          "slug": "_5-4-字符类"
        },
        {
          "level": 3,
          "title": "5.5 预定义模式 (常见模式简写\\d\\D\\w\\W\\s\\S\\b\\B)",
          "slug": "_5-5-预定义模式-常见模式简写-d-d-w-w-s-s-b-b"
        },
        {
          "level": 3,
          "title": "5.6 重复类 （ {n} {n,} {n,m} ）",
          "slug": "_5-6-重复类-（-n-n-n-m-）"
        },
        {
          "level": 3,
          "title": "5.7 量词符（?）（*）（+）",
          "slug": "_5-7-量词符（-）（-）（-）"
        },
        {
          "level": 3,
          "title": "5.8 贪婪模式（对量词符可使用非贪婪模式）",
          "slug": "_5-8-贪婪模式（对量词符可使用非贪婪模式）"
        },
        {
          "level": 3,
          "title": "5.9 修饰符",
          "slug": "_5-9-修饰符"
        },
        {
          "level": 3,
          "title": "5.10 组匹配",
          "slug": "_5-10-组匹配"
        },
        {
          "level": 2,
          "title": "十一、JSON对象",
          "slug": "十一、json对象"
        },
        {
          "level": 2,
          "title": "1、JSON 格式",
          "slug": "_1、json-格式"
        },
        {
          "level": 2,
          "title": "2、JSON 对象",
          "slug": "_2、json-对象"
        },
        {
          "level": 2,
          "title": "3、JSON.stringify() 转为JSON字符串",
          "slug": "_3、json-stringify-转为json字符串"
        },
        {
          "level": 3,
          "title": "3.1 基本用法",
          "slug": "_3-1-基本用法"
        },
        {
          "level": 3,
          "title": "3.2 第二个参数 （一个数组，对象属性白名单；或一个函数，改写返回值）",
          "slug": "_3-2-第二个参数-（一个数组，对象属性白名单；或一个函数，改写返回值）"
        },
        {
          "level": 3,
          "title": "3.3 第三个参数 （增加返回JSON字符串的可读性；json格式）",
          "slug": "_3-3-第三个参数-（增加返回json字符串的可读性；json格式）"
        },
        {
          "level": 3,
          "title": "3.4 参数对象的 toJSON 方法（对象自定义toJSON方法，转字符串只取该方法返回值）",
          "slug": "_3-4-参数对象的-tojson-方法（对象自定义tojson方法，转字符串只取该方法返回值）"
        },
        {
          "level": 2,
          "title": "4、JSON.parse()",
          "slug": "_4、json-parse"
        },
        {
          "level": 2,
          "title": "文档",
          "slug": "文档"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "DOM",
      "frontmatter": {
        "title": "DOM",
        "date": "2020-01-12T11:49:16.000Z",
        "permalink": "/pages/7d961b8030c6099e",
        "categories": [
          "《JavaScript教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AJavaScript%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/05.DOM.html",
      "relativePath": "《JavaScript教程》笔记/05.DOM.md",
      "key": "v-4098355c",
      "path": "/pages/7d961b8030c6099e/",
      "headers": [
        {
          "level": 2,
          "title": "一、概述",
          "slug": "一、概述"
        },
        {
          "level": 3,
          "title": "1、DOM",
          "slug": "_1、dom"
        },
        {
          "level": 3,
          "title": "2、节点",
          "slug": "_2、节点"
        },
        {
          "level": 3,
          "title": "3、节点树",
          "slug": "_3、节点树"
        },
        {
          "level": 2,
          "title": "二、Node接口",
          "slug": "二、node接口"
        },
        {
          "level": 3,
          "title": "1、属性",
          "slug": "_1、属性"
        },
        {
          "level": 3,
          "title": "2、方法",
          "slug": "_2、方法"
        },
        {
          "level": 2,
          "title": "三、NodeList 接口 与 HTMLCollection 接口 （节点的集合）",
          "slug": "三、nodelist-接口-与-htmlcollection-接口-（节点的集合）"
        },
        {
          "level": 3,
          "title": "1、NodeList 接口 （各类节点的集合）",
          "slug": "_1、nodelist-接口-（各类节点的集合）"
        },
        {
          "level": 3,
          "title": "2、HTMLCollection 接口 （HTML元素节点的集合）",
          "slug": "_2、htmlcollection-接口-（html元素节点的集合）"
        },
        {
          "level": 2,
          "title": "四、ParentNode 接口（父节点接口），ChildNode 接口（子节点接口）",
          "slug": "四、parentnode-接口（父节点接口），childnode-接口（子节点接口）"
        },
        {
          "level": 3,
          "title": "1、ParentNode 接口",
          "slug": "_1、parentnode-接口"
        },
        {
          "level": 3,
          "title": "2、ChildNode 接口",
          "slug": "_2、childnode-接口"
        },
        {
          "level": 2,
          "title": "五、Document节点",
          "slug": "五、document节点"
        },
        {
          "level": 3,
          "title": "1、概述",
          "slug": "_1、概述"
        },
        {
          "level": 3,
          "title": "2、属性",
          "slug": "_2、属性"
        },
        {
          "level": 3,
          "title": "3、方法",
          "slug": "_3、方法"
        },
        {
          "level": 2,
          "title": "六、Element节点",
          "slug": "六、element节点"
        },
        {
          "level": 3,
          "title": "1、实例属性",
          "slug": "_1、实例属性"
        },
        {
          "level": 3,
          "title": "2、实例方法",
          "slug": "_2、实例方法"
        },
        {
          "level": 2,
          "title": "七、元素属性的操作",
          "slug": "七、元素属性的操作"
        },
        {
          "level": 3,
          "title": "1、Element.attributes 属性 （返回包含标签所有属性的类数组动态对象）",
          "slug": "_1、element-attributes-属性-（返回包含标签所有属性的类数组动态对象）"
        },
        {
          "level": 3,
          "title": "2、元素的标准属性",
          "slug": "_2、元素的标准属性"
        },
        {
          "level": 3,
          "title": "3、属性操作的标准方法",
          "slug": "_3、属性操作的标准方法"
        },
        {
          "level": 3,
          "title": "4、dataset 属性   获取data-*自定义属性",
          "slug": "_4、dataset-属性-获取data-自定义属性"
        },
        {
          "level": 2,
          "title": "八、Text 节点和 DocumentFragment 节点",
          "slug": "八、text-节点和-documentfragment-节点"
        },
        {
          "level": 3,
          "title": "1、Text 节点的概念",
          "slug": "_1、text-节点的概念"
        },
        {
          "level": 3,
          "title": "2、Text 节点的属性",
          "slug": "_2、text-节点的属性"
        },
        {
          "level": 3,
          "title": "3、Text 节点的方法",
          "slug": "_3、text-节点的方法"
        },
        {
          "level": 3,
          "title": "4、DocumentFragment 文档片段节点",
          "slug": "_4、documentfragment-文档片段节点"
        },
        {
          "level": 2,
          "title": "八、CSS 操作",
          "slug": "八、css-操作"
        },
        {
          "level": 3,
          "title": "1、HTML 元素的 style 属性",
          "slug": "_1、html-元素的-style-属性"
        },
        {
          "level": 3,
          "title": "2、CSSStyleDeclaration 接口",
          "slug": "_2、cssstyledeclaration-接口"
        },
        {
          "level": 3,
          "title": "3、CSS 模块的侦测（判断浏览器是否支持某个样式）",
          "slug": "_3、css-模块的侦测（判断浏览器是否支持某个样式）"
        },
        {
          "level": 3,
          "title": "4、原生CSS 对象",
          "slug": "_4、原生css-对象"
        },
        {
          "level": 3,
          "title": "5、window.getComputedStyle() 返回元素最终样式",
          "slug": "_5、window-getcomputedstyle-返回元素最终样式"
        },
        {
          "level": 3,
          "title": "6、CSS 伪元素样式的获取",
          "slug": "_6、css-伪元素样式的获取"
        },
        {
          "level": 3,
          "title": "7、StyleSheet 接口",
          "slug": "_7、stylesheet-接口"
        },
        {
          "level": 3,
          "title": "8、实例：添加样式表",
          "slug": "_8、实例：添加样式表"
        },
        {
          "level": 3,
          "title": "9、CSSRuleList 接口",
          "slug": "_9、cssrulelist-接口"
        },
        {
          "level": 3,
          "title": "10、CSSRule 接口",
          "slug": "_10、cssrule-接口"
        },
        {
          "level": 3,
          "title": "11、window.matchMedia()",
          "slug": "_11、window-matchmedia"
        },
        {
          "level": 3,
          "title": "12、本章小结",
          "slug": "_12、本章小结"
        },
        {
          "level": 2,
          "title": "九、Mutation Observer API 监视DOM变动",
          "slug": "九、mutation-observer-api-监视dom变动"
        },
        {
          "level": 3,
          "title": "1、概述",
          "slug": "_1、概述-2"
        },
        {
          "level": 3,
          "title": "2、MutationObserver 构造函数 (使用方式)",
          "slug": "_2、mutationobserver-构造函数-使用方式"
        },
        {
          "level": 3,
          "title": "3、MutationObserver 的实例方法",
          "slug": "_3、mutationobserver-的实例方法"
        },
        {
          "level": 3,
          "title": "4、MutationRecord 对象 (变动记录)",
          "slug": "_4、mutationrecord-对象-变动记录"
        },
        {
          "level": 3,
          "title": "5、应用示例",
          "slug": "_5、应用示例"
        },
        {
          "level": 2,
          "title": "文档",
          "slug": "文档"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "Vue资源",
      "frontmatter": {
        "title": "Vue资源",
        "date": "2020-04-19T11:39:43.000Z",
        "permalink": "/pages/12df8ace52d493f6",
        "article": false
      },
      "regularPath": "/06.%E6%94%B6%E8%97%8F%E5%A4%B9/03.Vue%E8%B5%84%E6%BA%90.html",
      "relativePath": "06.收藏夹/03.Vue资源.md",
      "key": "v-188a8dc3",
      "path": "/pages/12df8ace52d493f6/",
      "headers": [
        {
          "level": 2,
          "title": "官方资源",
          "slug": "官方资源"
        },
        {
          "level": 2,
          "title": "外部资源",
          "slug": "外部资源"
        },
        {
          "level": 2,
          "title": "工作门户",
          "slug": "工作门户"
        },
        {
          "level": 2,
          "title": "社区",
          "slug": "社区"
        },
        {
          "level": 2,
          "title": "会议",
          "slug": "会议"
        },
        {
          "level": 2,
          "title": "播客",
          "slug": "播客"
        },
        {
          "level": 2,
          "title": "Youtube 渠道",
          "slug": "youtube-渠道"
        },
        {
          "level": 2,
          "title": "官方例子",
          "slug": "官方例子"
        },
        {
          "level": 2,
          "title": "讲解",
          "slug": "讲解"
        },
        {
          "level": 2,
          "title": "事例",
          "slug": "事例"
        },
        {
          "level": 2,
          "title": "书籍",
          "slug": "书籍"
        },
        {
          "level": 2,
          "title": "博客文章",
          "slug": "博客文章"
        },
        {
          "level": 2,
          "title": "开源的",
          "slug": "开源的"
        },
        {
          "level": 2,
          "title": "商业产品",
          "slug": "商业产品"
        },
        {
          "level": 2,
          "title": "应用/网站",
          "slug": "应用-网站"
        },
        {
          "level": 2,
          "title": "互动体验",
          "slug": "互动体验"
        },
        {
          "level": 2,
          "title": "企业用途",
          "slug": "企业用途"
        },
        {
          "level": 2,
          "title": "A11y",
          "slug": "a11y"
        },
        {
          "level": 2,
          "title": "表格",
          "slug": "表格"
        },
        {
          "level": 2,
          "title": "通知",
          "slug": "通知"
        },
        {
          "level": 2,
          "title": "装载机",
          "slug": "装载机"
        },
        {
          "level": 2,
          "title": "进度条",
          "slug": "进度条"
        },
        {
          "level": 2,
          "title": "工具提示",
          "slug": "工具提示"
        },
        {
          "level": 2,
          "title": "覆盖",
          "slug": "覆盖"
        },
        {
          "level": 2,
          "title": "视差",
          "slug": "视差"
        },
        {
          "level": 2,
          "title": "图标",
          "slug": "图标"
        },
        {
          "level": 2,
          "title": "菜单",
          "slug": "菜单"
        },
        {
          "level": 2,
          "title": "输入",
          "slug": "输入"
        },
        {
          "level": 2,
          "title": "轮播",
          "slug": "轮播"
        },
        {
          "level": 2,
          "title": "图表",
          "slug": "图表"
        },
        {
          "level": 2,
          "title": "时间",
          "slug": "时间"
        },
        {
          "level": 2,
          "title": "日历",
          "slug": "日历"
        },
        {
          "level": 2,
          "title": "地图",
          "slug": "地图"
        },
        {
          "level": 2,
          "title": "音频视频",
          "slug": "音频视频"
        },
        {
          "level": 2,
          "title": "无限滚动",
          "slug": "无限滚动"
        },
        {
          "level": 2,
          "title": "拉动刷新",
          "slug": "拉动刷新"
        },
        {
          "level": 2,
          "title": "降价",
          "slug": "降价"
        },
        {
          "level": 2,
          "title": "PDF",
          "slug": "pdf"
        },
        {
          "level": 2,
          "title": "树",
          "slug": "树"
        },
        {
          "level": 2,
          "title": "社交分享",
          "slug": "社交分享"
        },
        {
          "level": 2,
          "title": "搜索",
          "slug": "搜索"
        },
        {
          "level": 2,
          "title": "其他",
          "slug": "其他"
        },
        {
          "level": 2,
          "title": "标签",
          "slug": "标签"
        },
        {
          "level": 2,
          "title": "电话号码输入格式器",
          "slug": "电话号码输入格式器"
        },
        {
          "level": 2,
          "title": "选择器",
          "slug": "选择器"
        },
        {
          "level": 2,
          "title": "发电机",
          "slug": "发电机"
        },
        {
          "level": 2,
          "title": "日期选择器",
          "slug": "日期选择器"
        },
        {
          "level": 2,
          "title": "选择",
          "slug": "选择"
        },
        {
          "level": 2,
          "title": "滑块",
          "slug": "滑块"
        },
        {
          "level": 2,
          "title": "拖放",
          "slug": "拖放"
        },
        {
          "level": 2,
          "title": "自动完成",
          "slug": "自动完成"
        },
        {
          "level": 2,
          "title": "类型选择",
          "slug": "类型选择"
        },
        {
          "level": 2,
          "title": "颜色选择器",
          "slug": "颜色选择器"
        },
        {
          "level": 2,
          "title": "开关",
          "slug": "开关"
        },
        {
          "level": 2,
          "title": "屏蔽输入",
          "slug": "屏蔽输入"
        },
        {
          "level": 2,
          "title": "RTF 编辑",
          "slug": "rtf-编辑"
        },
        {
          "level": 2,
          "title": "图像处理",
          "slug": "图像处理"
        },
        {
          "level": 2,
          "title": "视频操作",
          "slug": "视频操作"
        },
        {
          "level": 2,
          "title": "上下文菜单",
          "slug": "上下文菜单"
        },
        {
          "level": 2,
          "title": "其他",
          "slug": "其他-2"
        },
        {
          "level": 2,
          "title": "向导",
          "slug": "向导"
        },
        {
          "level": 2,
          "title": "CSV",
          "slug": "csv"
        },
        {
          "level": 2,
          "title": "评论系统",
          "slug": "评论系统"
        },
        {
          "level": 2,
          "title": "帆布",
          "slug": "帆布"
        },
        {
          "level": 2,
          "title": "链接预览",
          "slug": "链接预览"
        },
        {
          "level": 2,
          "title": "游览",
          "slug": "游览"
        },
        {
          "level": 2,
          "title": "UI 布局",
          "slug": "ui-布局"
        },
        {
          "level": 2,
          "title": "自适应",
          "slug": "自适应"
        },
        {
          "level": 2,
          "title": "手机",
          "slug": "手机"
        },
        {
          "level": 2,
          "title": "组件集合",
          "slug": "组件集合"
        },
        {
          "level": 2,
          "title": "管理模板",
          "slug": "管理模板"
        },
        {
          "level": 2,
          "title": "服务器端渲染",
          "slug": "服务器端渲染"
        },
        {
          "level": 2,
          "title": "静态网站生成器",
          "slug": "静态网站生成器"
        },
        {
          "level": 2,
          "title": "其他",
          "slug": "其他-3"
        },
        {
          "level": 2,
          "title": "事件处理",
          "slug": "事件处理"
        },
        {
          "level": 2,
          "title": "响应式设计",
          "slug": "响应式设计"
        },
        {
          "level": 2,
          "title": "验证",
          "slug": "验证"
        },
        {
          "level": 2,
          "title": "调整大小",
          "slug": "调整大小"
        },
        {
          "level": 2,
          "title": "滚动",
          "slug": "滚动"
        },
        {
          "level": 2,
          "title": "路由",
          "slug": "路由"
        },
        {
          "level": 2,
          "title": "延迟加载",
          "slug": "延迟加载"
        },
        {
          "level": 2,
          "title": "分页",
          "slug": "分页"
        },
        {
          "level": 2,
          "title": "动画",
          "slug": "动画"
        },
        {
          "level": 2,
          "title": "元标记",
          "slug": "元标记"
        },
        {
          "level": 2,
          "title": "传送门",
          "slug": "传送门"
        },
        {
          "level": 2,
          "title": "过滤器",
          "slug": "过滤器"
        },
        {
          "level": 2,
          "title": "SVG",
          "slug": "svg"
        },
        {
          "level": 2,
          "title": "其他",
          "slug": "其他-4"
        },
        {
          "level": 2,
          "title": "WebGL",
          "slug": "webgl"
        },
        {
          "level": 2,
          "title": "全屏",
          "slug": "全屏"
        },
        {
          "level": 2,
          "title": "页面可见性",
          "slug": "页面可见性"
        },
        {
          "level": 2,
          "title": "打印",
          "slug": "打印"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    },
    {
      "title": "浏览器模型",
      "frontmatter": {
        "title": "浏览器模型",
        "date": "2020-01-12T11:49:16.000Z",
        "permalink": "/pages/bab4930124ad2c10",
        "categories": [
          "《JavaScript教程》笔记"
        ],
        "tags": [
          null
        ]
      },
      "regularPath": "/%E3%80%8AJavaScript%E6%95%99%E7%A8%8B%E3%80%8B%E7%AC%94%E8%AE%B0/07.%E6%B5%8F%E8%A7%88%E5%99%A8%E6%A8%A1%E5%9E%8B.html",
      "relativePath": "《JavaScript教程》笔记/07.浏览器模型.md",
      "key": "v-7415b314",
      "path": "/pages/bab4930124ad2c10/",
      "headers": [
        {
          "level": 2,
          "title": "一、浏览器环境概述",
          "slug": "一、浏览器环境概述"
        },
        {
          "level": 3,
          "title": "1、代码嵌入网页的方法",
          "slug": "_1、代码嵌入网页的方法"
        },
        {
          "level": 3,
          "title": "2、script 元素",
          "slug": "_2、script-元素"
        },
        {
          "level": 3,
          "title": "3、浏览器的组成",
          "slug": "_3、浏览器的组成"
        },
        {
          "level": 2,
          "title": "二、window 对象",
          "slug": "二、window-对象"
        },
        {
          "level": 3,
          "title": "1、概述",
          "slug": "_1、概述"
        },
        {
          "level": 3,
          "title": "2、window 对象的属性",
          "slug": "_2、window-对象的属性"
        },
        {
          "level": 3,
          "title": "3、window 对象的方法",
          "slug": "_3、window-对象的方法"
        },
        {
          "level": 3,
          "title": "4、事件",
          "slug": "_4、事件"
        },
        {
          "level": 3,
          "title": "5、多窗口操作",
          "slug": "_5、多窗口操作"
        },
        {
          "level": 2,
          "title": "三、Navigator 对象，Screen 对象",
          "slug": "三、navigator-对象，screen-对象"
        },
        {
          "level": 3,
          "title": "1、Navigator 对象的属性",
          "slug": "_1、navigator-对象的属性"
        },
        {
          "level": 3,
          "title": "2、Navigator 对象的方法",
          "slug": "_2、navigator-对象的方法"
        },
        {
          "level": 3,
          "title": "3、Screen 对象 （屏幕信息对象）",
          "slug": "_3、screen-对象-（屏幕信息对象）"
        },
        {
          "level": 2,
          "title": "四、Cookie",
          "slug": "四、cookie"
        },
        {
          "level": 3,
          "title": "1、概述",
          "slug": "_1、概述-2"
        },
        {
          "level": 3,
          "title": "2、Cookie 与 HTTP 协议",
          "slug": "_2、cookie-与-http-协议"
        },
        {
          "level": 3,
          "title": "3、Cookie 的属性",
          "slug": "_3、cookie-的属性"
        },
        {
          "level": 3,
          "title": "4、document.cookie 用于读写当前网页的 Cookie",
          "slug": "_4、document-cookie-用于读写当前网页的-cookie"
        },
        {
          "level": 2,
          "title": "五、XMLHttpRequest 对象",
          "slug": "五、xmlhttprequest-对象"
        },
        {
          "level": 3,
          "title": "1、简介",
          "slug": "_1、简介"
        },
        {
          "level": 3,
          "title": "2、XMLHttpRequest 的实例属性",
          "slug": "_2、xmlhttprequest-的实例属性"
        },
        {
          "level": 3,
          "title": "3、XMLHttpRequest 的实例方法",
          "slug": "_3、xmlhttprequest-的实例方法"
        },
        {
          "level": 3,
          "title": "4、XMLHttpRequest 实例的事件",
          "slug": "_4、xmlhttprequest-实例的事件"
        },
        {
          "level": 3,
          "title": "5、Navigator.sendBeacon() 卸载网页时发送数据",
          "slug": "_5、navigator-sendbeacon-卸载网页时发送数据"
        },
        {
          "level": 2,
          "title": "六、同源限制",
          "slug": "六、同源限制"
        },
        {
          "level": 3,
          "title": "1、概述",
          "slug": "_1、概述-3"
        },
        {
          "level": 3,
          "title": "2、Cookie",
          "slug": "_2、cookie"
        },
        {
          "level": 3,
          "title": "3、iframe 和多窗口通信",
          "slug": "_3、iframe-和多窗口通信"
        },
        {
          "level": 3,
          "title": "4、AJAX",
          "slug": "_4、ajax"
        },
        {
          "level": 2,
          "title": "七、CORS 通信",
          "slug": "七、cors-通信"
        },
        {
          "level": 3,
          "title": "1、简介",
          "slug": "_1、简介-2"
        },
        {
          "level": 3,
          "title": "2、两种请求",
          "slug": "_2、两种请求"
        },
        {
          "level": 3,
          "title": "3、简单请求",
          "slug": "_3、简单请求"
        },
        {
          "level": 3,
          "title": "4、非简单请求",
          "slug": "_4、非简单请求"
        },
        {
          "level": 3,
          "title": "5、与 JSONP 的比较",
          "slug": "_5、与-jsonp-的比较"
        },
        {
          "level": 2,
          "title": "八、Storage 接口",
          "slug": "八、storage-接口"
        },
        {
          "level": 3,
          "title": "1、概述",
          "slug": "_1、概述-4"
        },
        {
          "level": 3,
          "title": "2、属性和方法",
          "slug": "_2、属性和方法"
        },
        {
          "level": 3,
          "title": "3、storage 事件",
          "slug": "_3、storage-事件"
        },
        {
          "level": 2,
          "title": "九、History 对象",
          "slug": "九、history-对象"
        },
        {
          "level": 3,
          "title": "1、概述",
          "slug": "_1、概述-5"
        },
        {
          "level": 3,
          "title": "2、属性",
          "slug": "_2、属性"
        },
        {
          "level": 3,
          "title": "3、方法",
          "slug": "_3、方法"
        },
        {
          "level": 3,
          "title": "4、popstate 事件",
          "slug": "_4、popstate-事件"
        },
        {
          "level": 2,
          "title": "十、Location 对象，URL 对象，URLSearchParams 对象",
          "slug": "十、location-对象，url-对象，urlsearchparams-对象"
        },
        {
          "level": 3,
          "title": "1、Location 对象",
          "slug": "_1、location-对象"
        },
        {
          "level": 3,
          "title": "2、URL 的编码和解码",
          "slug": "_2、url-的编码和解码"
        },
        {
          "level": 3,
          "title": "3、URL 接口",
          "slug": "_3、url-接口"
        },
        {
          "level": 3,
          "title": "4、URLSearchParams 对象",
          "slug": "_4、urlsearchparams-对象"
        },
        {
          "level": 2,
          "title": "十一、ArrayBuffer 对象，Blob 对象",
          "slug": "十一、arraybuffer-对象，blob-对象"
        },
        {
          "level": 3,
          "title": "1、ArrayBuffer 对象",
          "slug": "_1、arraybuffer-对象"
        },
        {
          "level": 3,
          "title": "2、Blob 对象",
          "slug": "_2、blob-对象"
        },
        {
          "level": 2,
          "title": "十二、File 对象，FileList 对象，FileReader 对象",
          "slug": "十二、file-对象，filelist-对象，filereader-对象"
        },
        {
          "level": 3,
          "title": "1、File 对象",
          "slug": "_1、file-对象"
        },
        {
          "level": 3,
          "title": "2、FileList 对象",
          "slug": "_2、filelist-对象"
        },
        {
          "level": 3,
          "title": "3、FileReader 对象",
          "slug": "_3、filereader-对象"
        },
        {
          "level": 2,
          "title": "十三、表单，FormData 对象",
          "slug": "十三、表单，formdata-对象"
        },
        {
          "level": 3,
          "title": "1、表单概述",
          "slug": "_1、表单概述"
        },
        {
          "level": 3,
          "title": "2、FormData 对象",
          "slug": "_2、formdata-对象"
        },
        {
          "level": 3,
          "title": "3、表单的内置验证",
          "slug": "_3、表单的内置验证"
        },
        {
          "level": 3,
          "title": "4、enctype 属性",
          "slug": "_4、enctype-属性"
        },
        {
          "level": 3,
          "title": "5、文件上传",
          "slug": "_5、文件上传"
        },
        {
          "level": 2,
          "title": "十四、IndexedDB API",
          "slug": "十四、indexeddb-api"
        },
        {
          "level": 3,
          "title": "1、概述",
          "slug": "_1、概述-6"
        },
        {
          "level": 3,
          "title": "2、基本概念",
          "slug": "_2、基本概念"
        },
        {
          "level": 3,
          "title": "3、操作流程",
          "slug": "_3、操作流程"
        },
        {
          "level": 3,
          "title": "4、indexedDB 对象",
          "slug": "_4、indexeddb-对象"
        },
        {
          "level": 3,
          "title": "5、IDBRequest 对象",
          "slug": "_5、idbrequest-对象"
        },
        {
          "level": 3,
          "title": "6、IDBDatabase 对象",
          "slug": "_6、idbdatabase-对象"
        },
        {
          "level": 3,
          "title": "7、IDBObjectStore 对象",
          "slug": "_7、idbobjectstore-对象"
        },
        {
          "level": 3,
          "title": "8、IDBTransaction 对象",
          "slug": "_8、idbtransaction-对象"
        },
        {
          "level": 3,
          "title": "9、IDBIndex 对象",
          "slug": "_9、idbindex-对象"
        },
        {
          "level": 3,
          "title": "10、IDBCursor 对象",
          "slug": "_10、idbcursor-对象"
        },
        {
          "level": 3,
          "title": "11、IDBKeyRange 对象",
          "slug": "_11、idbkeyrange-对象"
        },
        {
          "level": 2,
          "title": "十五、Web Worker",
          "slug": "十五、web-worker"
        },
        {
          "level": 3,
          "title": "1、概述",
          "slug": "_1、概述-7"
        },
        {
          "level": 3,
          "title": "2、基本用法",
          "slug": "_2、基本用法"
        },
        {
          "level": 3,
          "title": "3、数据通信",
          "slug": "_3、数据通信"
        },
        {
          "level": 3,
          "title": "4、同页面的 Web Worker",
          "slug": "_4、同页面的-web-worker"
        },
        {
          "level": 3,
          "title": "5、实例：Worker 线程完成轮询",
          "slug": "_5、实例：worker-线程完成轮询"
        },
        {
          "level": 3,
          "title": "6、实例： Worker 新建 Worker",
          "slug": "_6、实例：-worker-新建-worker"
        },
        {
          "level": 3,
          "title": "7、API",
          "slug": "_7、api"
        },
        {
          "level": 2,
          "title": "文档",
          "slug": "文档"
        }
      ],
      "lastUpdated": "2020/07/13, 11:07:00"
    }
  ],
  "themeConfig": {
    "nav": [
      {
        "text": "首页",
        "link": "/"
      },
      {
        "text": "前端",
        "link": "/web/",
        "items": [
          {
            "text": "前端文章",
            "items": [
              {
                "text": "JavaScript",
                "link": "/pages/8143cc480faf9a11/"
              },
              {
                "text": "Vue",
                "link": "/pages/802a1ca6f7b71c59/"
              }
            ]
          },
          {
            "text": "学习笔记",
            "items": [
              {
                "text": "《JavaScript教程》笔记",
                "link": "/note/javascript/"
              },
              {
                "text": "《ES6 教程》笔记",
                "link": "/note/es6/"
              },
              {
                "text": "《Vue》笔记",
                "link": "/note/vue/"
              },
              {
                "text": "《TypeScript 从零实现 axios》",
                "link": "/note/typescript-axios/"
              },
              {
                "text": "小程序笔记",
                "link": "/note/wx-miniprogram/"
              },
              {
                "text": "TypeScript基础",
                "link": "/note/typescript-basic/"
              }
            ]
          }
        ]
      },
      {
        "text": "页面",
        "link": "/ui/",
        "items": [
          {
            "text": "HTML",
            "link": "/pages/8309a5b876fc95e3/"
          },
          {
            "text": "CSS",
            "link": "/pages/0a83b083bdf257cb/"
          }
        ]
      },
      {
        "text": "技术",
        "link": "/technology/",
        "items": [
          {
            "text": "技术文档",
            "link": "/pages/9a7ee40fc232253e/"
          },
          {
            "text": "GitHub技巧",
            "link": "/pages/4c778760be26d8b3/"
          },
          {
            "text": "Nodejs",
            "link": "/pages/117708e0af7f0bd9/"
          },
          {
            "text": "博客搭建",
            "link": "/pages/41f87d890d0a02af/"
          }
        ]
      },
      {
        "text": "更多",
        "link": "/more/",
        "items": [
          {
            "text": "学习",
            "link": "/pages/a8692ab3bdcb4588/"
          },
          {
            "text": "面试",
            "link": "/pages/aea6571b7a8bae86/"
          },
          {
            "text": "心情杂货",
            "link": "/pages/2d615df9a36a98ed/"
          },
          {
            "text": "友情链接",
            "link": "/friends/"
          }
        ]
      },
      {
        "text": "关于",
        "link": "/about/"
      },
      {
        "text": "收藏",
        "link": "/pages/beb6c0bd8a66cea6/",
        "items": [
          {
            "text": "网站",
            "link": "/pages/beb6c0bd8a66cea6/"
          },
          {
            "text": "资源",
            "link": "/pages/eee83a9211a70f9d/"
          },
          {
            "text": "Vue资源",
            "link": "/pages/12df8ace52d493f6/"
          }
        ]
      },
      {
        "text": "索引",
        "link": "/archives/",
        "items": [
          {
            "text": "分类",
            "link": "/categories/"
          },
          {
            "text": "标签",
            "link": "/tags/"
          },
          {
            "text": "归档",
            "link": "/archives/"
          }
        ]
      }
    ],
    "sidebarDepth": 2,
    "logo": "/img/fy_logo.png",
    "repo": "Mr0v0Feng/blog",
    "searchMaxSuggestions": 10,
    "lastUpdated": "上次更新",
    "docsDir": "docs",
    "editLinks": true,
    "editLinkText": "编辑",
    "bodyBgImg": [
      "https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200507175828.jpeg",
      "https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200507175845.jpeg",
      "https://cdn.jsdelivr.net/gh/xugaoyi/image_store/blog/20200507175846.jpeg"
    ],
    "sidebar": {
      "/00.目录页/": [
        [
          "01.前端.md",
          "前端",
          "/web"
        ],
        [
          "02.页面.md",
          "页面",
          "/ui"
        ],
        [
          "03.技术.md",
          "技术",
          "/technology"
        ],
        [
          "04.更多.md",
          "更多",
          "/more"
        ]
      ],
      "catalogue": {
        "前端": "/web",
        "页面": "/ui",
        "技术": "/technology",
        "更多": "/more",
        "《JavaScript教程》笔记": "/note/javascript",
        "《ES6 教程》笔记": "/note/es6",
        "《Vue》笔记": "/note/vue",
        "《TypeScript 从零实现 axios》": "/note/typescript-axios"
      },
      "/01.前端/": [
        {
          "title": "JavaScript文章",
          "collapsable": true,
          "children": [
            [
              "25.JavaScript文章/02.new命令原理.md",
              "new命令原理",
              "/pages/8143cc480faf9a11"
            ],
            [
              "25.JavaScript文章/03.ES5面向对象.md",
              "ES5面向对象",
              "/pages/b1af5cb8996363c5"
            ],
            [
              "25.JavaScript文章/04.ES6面向对象.md",
              "ES6面向对象",
              "/pages/1f4123be6f45abcd"
            ],
            [
              "25.JavaScript文章/06.多种数组去重性能对比.md",
              "多种数组去重性能对比",
              "/pages/e808fba1fa8fbab2"
            ],
            [
              "25.JavaScript文章/50.js随机打乱数组.md",
              "js随机打乱数组",
              "/pages/40b4db2d38ba85f2"
            ],
            [
              "25.JavaScript文章/60.判断是否为移动端浏览器.md",
              "判断是否为移动端浏览器",
              "/pages/40f623be692cf8bc"
            ],
            [
              "25.JavaScript文章/70.将一维数组按指定长度转为二维数组.md",
              "将一维数组按指定长度转为二维数组",
              "/pages/f1acb712033ac8da"
            ],
            [
              "25.JavaScript文章/80.防抖与节流函数.md",
              "防抖与节流函数",
              "/pages/0f6a0ac99b62ede5"
            ],
            [
              "25.JavaScript文章/90.JS获取和修改url参数.md",
              "JS获取和修改url参数",
              "/pages/7a91be2d502346ce"
            ],
            [
              "25.JavaScript文章/100.比typeof运算符更准确的类型判断.md",
              "比typeof运算符更准确的类型判断",
              "/pages/fd4a16d56b83c1bc"
            ]
          ]
        },
        {
          "title": "Vue文章",
          "collapsable": true,
          "children": [
            [
              "30.Vue文章/10.Vue项目开发前的一些准备工作.md",
              "Vue项目开发前的一些准备工作",
              "/pages/802a1ca6f7b71c59"
            ],
            [
              "30.Vue文章/20.Vue CLi3 修改webpack配置.md",
              "Vue CLi3 修改webpack配置",
              "/pages/5d463fbdb172d43b"
            ],
            [
              "30.Vue文章/30.Vue中的scoped和scoped穿透.md",
              "Vue中的scoped和scoped穿透",
              "/pages/c80d2751cf1f4268"
            ],
            [
              "30.Vue文章/40.Vue项目使用mock数据的几种方式.md",
              "Vue项目使用mock数据的几种方式",
              "/pages/bd1af2f75fd361fc"
            ]
          ]
        },
        {
          "title": "学习笔记",
          "collapsable": true,
          "children": [
            [
              "40.学习笔记/00.《JavaScript教程》笔记.md",
              "《JavaScript教程》笔记",
              "/note/javascript"
            ],
            [
              "40.学习笔记/10.《ES6 教程》笔记.md",
              "《ES6 教程》笔记",
              "/note/es6"
            ],
            [
              "40.学习笔记/20.《Vue》笔记.md",
              "《Vue》笔记",
              "/note/vue"
            ],
            [
              "40.学习笔记/30.《TypeScript 从零实现 axios》.md",
              "《TypeScript 从零实现 axios》",
              "/note/typescript-axios"
            ],
            [
              "40.学习笔记/40.小程序笔记.md",
              "小程序笔记",
              "/note/wx-miniprogram"
            ],
            [
              "40.学习笔记/50.Typescript入门笔记.md",
              "Typescript入门笔记",
              "/note/typescript-basic"
            ]
          ]
        }
      ],
      "/02.页面/": [
        {
          "title": "HTML",
          "collapsable": true,
          "children": [
            [
              "10.HTML/10.常用meta整理.md",
              "常用meta整理",
              "/pages/8309a5b876fc95e3"
            ]
          ]
        },
        {
          "title": "CSS",
          "collapsable": true,
          "children": [
            [
              "20.CSS/01.flex布局语法.md",
              "flex布局语法",
              "/pages/0a83b083bdf257cb"
            ],
            [
              "20.CSS/02.flex布局案例-基础.md",
              "flex布局案例-基础",
              "/pages/ea6db1530c42ad51"
            ],
            [
              "20.CSS/03.flex布局案例-骰子.md",
              "flex布局案例-骰子",
              "/pages/eff61bc8b4f4695d"
            ],
            [
              "20.CSS/04.flex布局案例-圣杯布局.md",
              "flex布局案例-圣杯布局",
              "/pages/df9e7c7214fa5046"
            ],
            [
              "20.CSS/05.flex布局案例-网格布局.md",
              "flex布局案例-网格布局",
              "/pages/85b5a3fe218a34b7"
            ],
            [
              "20.CSS/06.flex布局案例-输入框布局.md",
              "flex布局案例-输入框布局",
              "/pages/05cc577fb51c7998"
            ],
            [
              "20.CSS/07.CSS3之transition过渡.md",
              "CSS3之transition过渡",
              "/pages/02d7f59d98d87409"
            ],
            [
              "20.CSS/08.CSS3之animation动画.md",
              "CSS3之animation动画",
              "/pages/c2c0432138f6e042"
            ],
            [
              "20.CSS/20.「布局技巧」图片未加载前自动撑开元素高度.md",
              "「布局技巧」图片未加载前自动撑开元素高度",
              "/pages/3d52574260725aea"
            ],
            [
              "20.CSS/30.文字在一行或两行时超出显示省略号.md",
              "文字在一行或两行时超出显示省略号",
              "/pages/42b66999cc27dc25"
            ],
            [
              "20.CSS/35.从box-sizing属性入手，了解盒子模型.md",
              "从box-sizing属性入手，了解盒子模型",
              "/pages/20a978023139589d"
            ],
            [
              "20.CSS/40.水平垂直居中的几种方式-案例.md",
              "水平垂直居中的几种方式-案例",
              "/pages/cb7cb251adba4bf7"
            ],
            [
              "20.CSS/45.如何根据系统主题自动响应CSS深色模式.md",
              "如何根据系统主题自动响应CSS深色模式",
              "/pages/5dde351274f1e39d"
            ],
            [
              "20.CSS/50.「css技巧」使用hover和attr()定制悬浮提示.md",
              "「css技巧」使用hover和attr()定制悬浮提示",
              "/pages/941581927b4a38f8"
            ],
            [
              "20.CSS/60.CSS-function汇总.md",
              "CSS-function汇总",
              "/pages/3da0d7"
            ]
          ]
        },
        {
          "title": "stylus",
          "collapsable": true,
          "children": [
            [
              "25.stylus/10.混入(Mixins).md",
              "混入(Mixins)",
              "/pages/9f15c1a281d8bedb"
            ]
          ]
        }
      ],
      "/03.技术/": [
        {
          "title": "技术文档",
          "collapsable": true,
          "children": [
            [
              "01.技术文档/01.Git使用手册.md",
              "Git使用手册",
              "/pages/9a7ee40fc232253e"
            ],
            [
              "01.技术文档/02.Markdown使用教程.md",
              "Markdown使用教程",
              "/pages/ad247c4332211551"
            ],
            [
              "01.技术文档/03.npm常用命令.md",
              "npm常用命令",
              "/pages/61f2f95fd7da14fd"
            ],
            [
              "01.技术文档/10.npm packageJson属性详解.md",
              "npm packageJson属性详解",
              "/pages/dec4f3f00e71a312"
            ],
            [
              "01.技术文档/15.yaml语言教程.md",
              "yaml语言教程",
              "/pages/4e8444e2d534d14f"
            ]
          ]
        },
        {
          "title": "GitHub技巧",
          "collapsable": true,
          "children": [
            [
              "02.GitHub技巧/01.GitHub高级搜索技巧.md",
              "GitHub高级搜索技巧",
              "/pages/4c778760be26d8b3"
            ],
            [
              "02.GitHub技巧/02.GitHub Actions 实现自动部署静态博客.md",
              "GitHub Actions 实现自动部署静态博客",
              "/pages/6b9d359ec5aa5019"
            ],
            [
              "02.GitHub技巧/03.GitHub Actions 定时运行代码：每天定时百度链接推送.md",
              "GitHub Actions 定时运行代码：每天定时百度链接推送",
              "/pages/f44d2f9ad04ab8d3"
            ],
            [
              "02.GitHub技巧/10.GitHub加速下载项目的方法.md",
              "GitHub加速下载项目的方法",
              "/pages/95331c6a9613faf8"
            ]
          ]
        },
        {
          "title": "Nodejs",
          "collapsable": true,
          "children": [
            [
              "03.Nodejs/01.nodejs递归读取所有文件.md",
              "nodejs递归读取所有文件",
              "/pages/117708e0af7f0bd9"
            ]
          ]
        },
        {
          "title": "博客搭建",
          "collapsable": true,
          "children": [
            [
              "04.博客搭建/01.解决百度无法收录搭建在GitHub上的个人博客的问题.md",
              "解决百度无法收录搭建在GitHub上的个人博客的问题",
              "/pages/41f87d890d0a02af"
            ],
            [
              "04.博客搭建/02.使用Gitalk实现静态博客无后台评论系统.md",
              "使用Gitalk实现静态博客无后台评论系统",
              "/pages/1da0bf9a988eafe5"
            ],
            [
              "04.博客搭建/03.GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床.md",
              "GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床",
              "/pages/a5f73af5185fdf0a"
            ],
            [
              "04.博客搭建/10.vdoing主题效果图.md",
              "vdoing主题效果图",
              "/pages/d557b9a89a215d2e"
            ]
          ]
        }
      ],
      "/04.更多/": [
        {
          "title": "学习",
          "collapsable": true,
          "children": [
            [
              "01.学习/02.提高学习效率的策略.md",
              "提高学习效率的策略",
              "/pages/a8692ab3bdcb4588"
            ],
            [
              "01.学习/03.提高记忆的技巧.md",
              "提高记忆的技巧",
              "/pages/996822b2a2ca6e3b"
            ],
            [
              "01.学习/04.自律小建议.md",
              "自律小建议",
              "/pages/c3f302a03c8daf79"
            ],
            [
              "01.学习/05.处理问题的思路.md",
              "处理问题的思路",
              "/pages/9ba2b8fb13de1957"
            ],
            [
              "01.学习/10.搜索引擎使用技巧.md",
              "搜索引擎使用技巧",
              "/pages/ce818a"
            ]
          ]
        },
        {
          "title": "面试",
          "collapsable": true,
          "children": [
            [
              "03.面试/01.面试问题集锦.md",
              "面试问题集锦",
              "/pages/aea6571b7a8bae86"
            ]
          ]
        },
        {
          "title": "英语",
          "collapsable": true,
          "children": [
            [
              "04.英语/01.英语基础.md",
              "英语基础",
              "/pages/6f9525eecdd51d5a"
            ]
          ]
        },
        {
          "title": "心情杂货",
          "collapsable": true,
          "children": [
            [
              "05.心情杂货/01.一个完美主义者的自我救赎.md",
              "一个完美主义者的自我救赎",
              "/pages/2d615df9a36a98ed"
            ]
          ]
        },
        [
          "99.友情链接.md",
          "友情链接",
          "/friends"
        ]
      ],
      "/05.关于/": [
        [
          "01.关于.md",
          "关于",
          "/about"
        ]
      ],
      "/06.收藏夹/": [
        [
          "01.网站.md",
          "网站",
          "/pages/beb6c0bd8a66cea6"
        ],
        [
          "02.资源.md",
          "资源",
          "/pages/eee83a9211a70f9d"
        ],
        [
          "03.Vue资源.md",
          "Vue资源",
          "/pages/12df8ace52d493f6"
        ]
      ],
      "/《ES6 教程》笔记/": [
        [
          "01.ECMAScript 6 简介.md",
          "ECMAScript 6 简介",
          "/pages/f344d070a1031ef7"
        ],
        [
          "02.let 和 const 命令.md",
          "let 和 const 命令",
          "/pages/c1edd70a6b7c7872"
        ],
        [
          "03.变量的解构赋值.md",
          "变量的解构赋值",
          "/pages/b1ab10a62f7564da"
        ],
        [
          "04.字符串的扩展.md",
          "字符串的扩展",
          "/pages/ca89eca8adeba5f4"
        ],
        [
          "05.字符串的新增方法.md",
          "字符串的新增方法",
          "/pages/a650b4a0ebfc9350"
        ],
        [
          "06.正则的扩展.md",
          "正则的扩展",
          "/pages/0473261a6ab0ee8c"
        ],
        [
          "07.数值的扩展.md",
          "数值的扩展",
          "/pages/5dfea9a0f2d1a392"
        ],
        [
          "08.函数的扩展.md",
          "函数的扩展",
          "/pages/8ed309d668b20264"
        ],
        [
          "09.数组的扩展.md",
          "数组的扩展",
          "/pages/e34009d60d8bc4b2"
        ],
        [
          "10.对象的扩展.md",
          "对象的扩展",
          "/pages/b5e3e0a0ff6e9c25"
        ],
        [
          "11.对象的新增方法.md",
          "对象的新增方法",
          "/pages/e85e68947502cf90"
        ],
        [
          "12.Symbol.md",
          "Symbol",
          "/pages/02c86eb2792f3262"
        ],
        [
          "13.Set 和 Map 数据结构.md",
          "Set 和 Map 数据结构",
          "/pages/0c21dae358fca16b"
        ],
        [
          "14.Proxy.md",
          "Proxy",
          "/pages/f56ec2ab97d60483"
        ],
        [
          "15.Reflect.md",
          "Reflect",
          "/pages/74de3e45e4491e95"
        ],
        [
          "16.Promise 对象.md",
          "Promise 对象",
          "/pages/2810ae8985e9bd52"
        ],
        [
          "17.Iterator 和 for-of 循环.md",
          "Iterator 和 for-of 循环",
          "/pages/48df907ad3570f3d"
        ],
        [
          "18.Generator 函数的语法.md",
          "Generator 函数的语法",
          "/pages/718b48ed9ce0adce"
        ],
        [
          "19.Generator 函数的异步应用.md",
          "Generator 函数的异步应用",
          "/pages/75af7031eb66847b"
        ],
        [
          "20.async 函数.md",
          "async 函数",
          "/pages/3777253e65bac487"
        ],
        [
          "21.Class 的基本语法.md",
          "Class 的基本语法",
          "/pages/e831e1593c82bbe0"
        ],
        [
          "22.Class 的继承.md",
          "Class 的继承",
          "/pages/83f8c3a0cd87dd83"
        ],
        [
          "23.Module 的语法.md",
          "Module 的语法",
          "/pages/efe2fb04eb8ac5fb"
        ],
        [
          "24.Module 的加载实现.md",
          "Module 的加载实现",
          "/pages/a79ca2e64ceae213"
        ],
        [
          "25.编程风格.md",
          "编程风格",
          "/pages/984bf549204bb266"
        ],
        [
          "26.读懂 ECMAScript 规格.md",
          "读懂 ECMAScript 规格",
          "/pages/32c35f7651d6e58e"
        ],
        [
          "27.异步遍历器.md",
          "异步遍历器",
          "/pages/16121351be68691b"
        ],
        [
          "28.ArrayBuffer.md",
          "ArrayBuffer",
          "/pages/a2ba314746bfdbdd"
        ],
        [
          "29.最新提案.md",
          "最新提案",
          "/pages/7188882b8d65af1b"
        ],
        [
          "30.装饰器.md",
          "装饰器",
          "/pages/e97bc1e5626b082c"
        ],
        [
          "31.函数式编程.md",
          "函数式编程",
          "/pages/1cf50330655efc69"
        ],
        [
          "32.Mixin.md",
          "Mixin",
          "/pages/6a8e2dc558da1b39"
        ],
        [
          "33.SIMD.md",
          "SIMD",
          "/pages/8e8f80f69b775a56"
        ],
        [
          "34.参考链接.md",
          "参考链接",
          "/pages/ea6f3b870f6dab69"
        ]
      ],
      "/《JavaScript教程》笔记/": [
        [
          "01.基础.md",
          "基础",
          "/pages/0796ba76b4b55368"
        ],
        [
          "02.内置对象.md",
          "内置对象",
          "/pages/74d2ab3fbfeaaa68"
        ],
        [
          "03.面向对象.md",
          "面向对象",
          "/pages/659b5af5e2e704e0"
        ],
        [
          "04.异步操作.md",
          "异步操作",
          "/pages/d61b1cb4cdac1f63"
        ],
        [
          "05.DOM.md",
          "DOM",
          "/pages/7d961b8030c6099e"
        ],
        [
          "06.事件.md",
          "事件",
          "/pages/10b2761db5a8e089"
        ],
        [
          "07.浏览器模型.md",
          "浏览器模型",
          "/pages/bab4930124ad2c10"
        ]
      ],
      "/《TypeScript 从零实现 axios》/": [
        {
          "title": "初识 TypeScript",
          "collapsable": true,
          "children": [
            [
              "01.初识 TypeScript/01.简介.md",
              "简介",
              "/pages/e05dce83e5129785"
            ],
            [
              "01.初识 TypeScript/02.安装 TypeScript.md",
              "安装 TypeScript",
              "/pages/064e0f7b6b6142c8"
            ],
            [
              "01.初识 TypeScript/03.编写第一个 TypeScript 程序.md",
              "编写第一个 TypeScript 程序",
              "/pages/c85249f40e7a3517"
            ]
          ]
        },
        {
          "title": "TypeScript 常用语法",
          "collapsable": true,
          "children": [
            [
              "02.TypeScript 常用语法/01.基础类型.md",
              "基础类型",
              "/pages/28672e2743bbc3a7"
            ],
            [
              "02.TypeScript 常用语法/02.变量声明.md",
              "变量声明",
              "/pages/54add7f5cf78088e"
            ],
            [
              "02.TypeScript 常用语法/03.接口.md",
              "接口",
              "/pages/54ea89b497ec3bb3"
            ],
            [
              "02.TypeScript 常用语法/04.类.md",
              "类",
              "/pages/fad060bd9a8bfac6"
            ],
            [
              "02.TypeScript 常用语法/05.函数.md",
              "函数",
              "/pages/870a51ba2a9edfad"
            ],
            [
              "02.TypeScript 常用语法/06.泛型.md",
              "泛型",
              "/pages/8045759ec4ad3c01"
            ],
            [
              "02.TypeScript 常用语法/07.类型推断.md",
              "类型推断",
              "/pages/7279420c899c505d"
            ],
            [
              "02.TypeScript 常用语法/08.高级类型.md",
              "高级类型",
              "/pages/3fb6c2f52ab398e3"
            ]
          ]
        },
        {
          "title": "ts-axios 项目初始化",
          "collapsable": true,
          "children": [
            [
              "03.ts-axios 项目初始化/01.需求分析.md",
              "需求分析",
              "/pages/195af93fcc871b8b"
            ],
            [
              "03.ts-axios 项目初始化/02.初始化项目.md",
              "初始化项目",
              "/pages/6e11ac76475a2b3e"
            ],
            [
              "03.ts-axios 项目初始化/03.编写基础请求代码.md",
              "编写基础请求代码",
              "/pages/acfe1e0b401fa984"
            ]
          ]
        },
        {
          "title": "ts-axios 基础功能实现",
          "collapsable": true,
          "children": [
            [
              "04.ts-axios 基础功能实现/01.处理请求 url 参数.md",
              "处理请求 url 参数",
              "/pages/1313dae575f6dddf"
            ],
            [
              "04.ts-axios 基础功能实现/02.处理请求 body 数据.md",
              "处理请求 body 数据",
              "/pages/887cd0918e2543d8"
            ],
            [
              "04.ts-axios 基础功能实现/03.处理请求 header.md",
              "处理请求 header",
              "/pages/35c0ec1bb0b0faaf"
            ],
            [
              "04.ts-axios 基础功能实现/04.获取响应数据.md",
              "获取响应数据",
              "/pages/a57debe141e1e4f4"
            ],
            [
              "04.ts-axios 基础功能实现/05.处理响应 header.md",
              "处理响应 header",
              "/pages/927161662ca32c24"
            ],
            [
              "04.ts-axios 基础功能实现/06.处理响应 data.md",
              "处理响应 data",
              "/pages/922cb4268499dc3f"
            ]
          ]
        },
        {
          "title": "ts-axios 异常情况处理",
          "collapsable": true,
          "children": [
            [
              "05.ts-axios 异常情况处理/01.错误处理.md",
              "错误处理",
              "/pages/6a8bef7b98dfdcf9"
            ],
            [
              "05.ts-axios 异常情况处理/02.错误信息增强.md",
              "错误信息增强",
              "/pages/22d581d8c2860b8a"
            ]
          ]
        },
        {
          "title": "ts-axios 接口扩展",
          "collapsable": true,
          "children": [
            [
              "06.ts-axios 接口扩展/01.扩展接口.md",
              "扩展接口",
              "/pages/034e320f4af88bd4"
            ],
            [
              "06.ts-axios 接口扩展/02.axios 函数重载.md",
              "axios 函数重载",
              "/pages/8af227eae851ec97"
            ],
            [
              "06.ts-axios 接口扩展/03.响应数据支持泛型.md",
              "响应数据支持泛型",
              "/pages/c4489d0bab02cc0c"
            ]
          ]
        },
        {
          "title": "ts-axios 拦截器实现",
          "collapsable": true,
          "children": [
            [
              "07.ts-axios 拦截器实现/01.拦截器设计与实现.md",
              "拦截器设计与实现",
              "/pages/70651900f022f586"
            ]
          ]
        },
        {
          "title": "ts-axios 配置化实现",
          "collapsable": true,
          "children": [
            [
              "08.ts-axios 配置化实现/01.合并配置的设计与实现.md",
              "合并配置的设计与实现",
              "/pages/937e4de6b81edeca"
            ],
            [
              "08.ts-axios 配置化实现/02.请求和响应配置化.md",
              "请求和响应配置化",
              "/pages/f5b627bfebba87fc"
            ],
            [
              "08.ts-axios 配置化实现/03.扩展 create 静态接口.md",
              "扩展 create 静态接口",
              "/pages/7b49658c26f613bf"
            ]
          ]
        },
        {
          "title": "ts-axios 取消功能实现",
          "collapsable": true,
          "children": [
            [
              "09.ts-axios 取消功能实现/01.取消功能的设计与实现.md",
              "取消功能的设计与实现",
              "/pages/fdc6da5372397430"
            ]
          ]
        },
        {
          "title": "ts-axios 更多功能实现",
          "collapsable": true,
          "children": [
            [
              "10.ts-axios 更多功能实现/01.withCredentials.md",
              "withCredentials",
              "/pages/5dce43eba796a2ab"
            ],
            [
              "10.ts-axios 更多功能实现/02.XSRF 防御.md",
              "XSRF 防御",
              "/pages/390cb70e2b619449"
            ],
            [
              "10.ts-axios 更多功能实现/03.上传和下载的进度监控.md",
              "上传和下载的进度监控",
              "/pages/1376fd897809036e"
            ],
            [
              "10.ts-axios 更多功能实现/04.HTTP 授权.md",
              "HTTP 授权",
              "/pages/89cd6496c23159ae"
            ],
            [
              "10.ts-axios 更多功能实现/05.自定义合法状态码.md",
              "自定义合法状态码",
              "/pages/40b41ce8e8159567"
            ],
            [
              "10.ts-axios 更多功能实现/06.自定义参数序列化.md",
              "自定义参数序列化",
              "/pages/7753b8141663e54a"
            ],
            [
              "10.ts-axios 更多功能实现/07.baseURL.md",
              "baseURL",
              "/pages/0b9f2ee2b4dbb728"
            ],
            [
              "10.ts-axios 更多功能实现/08.静态方法扩展.md",
              "静态方法扩展",
              "/pages/c26b053540a7dafa"
            ]
          ]
        },
        {
          "title": "ts-axios 单元测试",
          "collapsable": true,
          "children": [
            [
              "11.ts-axios 单元测试/01.前言.md",
              "前言",
              "/pages/df36888424843793"
            ],
            [
              "11.ts-axios 单元测试/02.Jest 安装和配置.md",
              "Jest 安装和配置",
              "/pages/bf5c625a35757b37"
            ],
            [
              "11.ts-axios 单元测试/03.辅助模块单元测试.md",
              "辅助模块单元测试",
              "/pages/13f147a9b355c4c1"
            ],
            [
              "11.ts-axios 单元测试/04.请求模块单元测试.md",
              "请求模块单元测试",
              "/pages/e1d15dec8634e6b5"
            ],
            [
              "11.ts-axios 单元测试/05.headers 模块单元测试.md",
              "headers 模块单元测试",
              "/pages/ddd86ec39b5dfe33"
            ],
            [
              "11.ts-axios 单元测试/06.Axios 实例模块单元测试.md",
              "Axios 实例模块单元测试",
              "/pages/2eac7a0a0d644c15"
            ],
            [
              "11.ts-axios 单元测试/07.拦截器模块单元测试.md",
              "拦截器模块单元测试",
              "/pages/97de6fd6293a2c6e"
            ],
            [
              "11.ts-axios 单元测试/08.mergeConfig 模块单元测试.md",
              "mergeConfig 模块单元测试",
              "/pages/cdf59840306f9e81"
            ],
            [
              "11.ts-axios 单元测试/09.请求取消模块单元测试.md",
              "请求取消模块单元测试",
              "/pages/6fa16aee29527032"
            ],
            [
              "11.ts-axios 单元测试/10.剩余模块单元测试.md",
              "剩余模块单元测试",
              "/pages/9572134781ba6a25"
            ]
          ]
        },
        {
          "title": "ts-axios 部署与发布",
          "collapsable": true,
          "children": [
            [
              "12.ts-axios 部署与发布/01.ts-axios 编译与发布.md",
              "ts-axios 编译与发布",
              "/pages/3e5d5a45ad50f198"
            ],
            [
              "12.ts-axios 部署与发布/02.引用 ts-axios 库.md",
              "引用 ts-axios 库",
              "/pages/c6bdbd5bd60adf5a"
            ]
          ]
        }
      ],
      "/《Vue》笔记/": [
        {
          "title": "基础",
          "collapsable": true,
          "children": [
            [
              "01.基础/00.MVVM模式.md",
              "MVVM模式",
              "/pages/114158caa9e96df0"
            ],
            [
              "01.基础/10.生命周期.md",
              "生命周期",
              "/pages/176808a1b5f843b8"
            ],
            [
              "01.基础/20.计算属性 vs 方法 vs 侦听属性.md",
              "计算属性 vs 方法 vs 侦听属性",
              "/pages/351f72ecd9c41129"
            ],
            [
              "01.基础/30.v-if vs v-show.md",
              "v-if vs v-show",
              "/pages/73e4064340277b05"
            ],
            [
              "01.基础/35.列表渲染之数组、对象更新检测.md",
              "列表渲染之数组、对象更新检测",
              "/pages/04783a6691cc9d06"
            ]
          ]
        },
        {
          "title": "组件",
          "collapsable": true,
          "children": [
            [
              "02.组件/36.使用组件的细节点.md",
              "使用组件的细节点",
              "/pages/83a1ab785e7fd70c"
            ],
            [
              "02.组件/40.父组件给子组件传值.md",
              "父组件给子组件传值",
              "/pages/07b384c2e6232e07"
            ],
            [
              "02.组件/50.子组件派发事件和值给父组件.md",
              "子组件派发事件和值给父组件",
              "/pages/0f19a1bcac14fd41"
            ],
            [
              "02.组件/52.Prop 验证 与 非 Prop 的 Attribute.md",
              "Prop 验证 与 非 Prop 的 Attribute",
              "/pages/a3080f60f6596eb4"
            ],
            [
              "02.组件/55.自定义事件.md",
              "自定义事件",
              "/pages/9651417d08d1779d"
            ],
            [
              "02.组件/60.兄弟组件传值.md",
              "兄弟组件传值",
              "/pages/809f4582d9ca9552"
            ],
            [
              "02.组件/65.非父子组件传值.md",
              "非父子组件传值",
              "/pages/d408e64f666f146d"
            ],
            [
              "02.组件/70.父组件调用子组件方法并传入值.md",
              "父组件调用子组件方法并传入值",
              "/pages/2e24dab728769e0c"
            ],
            [
              "02.组件/75.插槽slot.md",
              "插槽slot",
              "/pages/055ecee9a4325386"
            ],
            [
              "02.组件/80.动态组件与 v-once 指令.md",
              "动态组件与 v-once 指令",
              "/pages/636ca33122e9a64b"
            ],
            [
              "02.组件/90.vue父子组件的生命周期顺序.md",
              "vue父子组件的生命周期顺序",
              "/pages/e6cec47efa42d7f1"
            ]
          ]
        },
        {
          "title": "过渡&动画",
          "collapsable": true,
          "children": [
            [
              "03.过渡&动画/110.transition过渡&动画.md",
              "transition过渡&动画",
              "/pages/184a96b493a97078"
            ],
            [
              "03.过渡&动画/112.使用animate库.md",
              "使用animate库",
              "/pages/3b0a20e70805fcea"
            ],
            [
              "03.过渡&动画/120.transition-group列表过渡.md",
              "transition-group列表过渡",
              "/pages/0aa92922ace6bb5e"
            ]
          ]
        },
        {
          "title": "可复用性&组合",
          "collapsable": true,
          "children": [
            [
              "04.可复用性&组合/01.Mixin混入.md",
              "Mixin混入",
              "/pages/bd36a3c1bc3e0821"
            ]
          ]
        },
        {
          "title": "工具",
          "collapsable": true,
          "children": [
            [
              "05.工具/10.Vue CLi v3 创建项目使用记录.md",
              "Vue CLi v3 创建项目使用记录",
              "/pages/d00311f8174119b2"
            ]
          ]
        },
        {
          "title": "规模化",
          "collapsable": true,
          "children": [
            [
              "06.规模化/100.vuex操作相关.md",
              "vuex操作相关",
              "/pages/d9d62d6ab8ff99a6"
            ],
            [
              "06.规模化/140.路由懒加载.md",
              "路由懒加载",
              "/pages/38ecac9a9b92f037"
            ]
          ]
        },
        {
          "title": "其他",
          "collapsable": true,
          "children": [
            [
              "99.其他/80.Vue中的防抖函数封装和使用.md",
              "Vue中的防抖函数封装和使用",
              "/pages/fb08e252dfd8fdfd"
            ],
            [
              "99.其他/90.操作本地缓存.md",
              "操作本地缓存",
              "/pages/30a94dbe96873b33"
            ]
          ]
        }
      ]
    },
    "author": {
      "name": "F.Y",
      "link": "https://github.com/Mr0v0Feng"
    },
    "blogger": {
      "avatar": "https://cdn.jsdelivr.net/gh/Mr0v0Feng/image_store/img/20200709152900.jpg",
      "name": "F.Y",
      "slogan": "前端小学生"
    },
    "social": {
      "icons": [
        {
          "iconClass": "icon-youjian",
          "title": "发邮件",
          "link": "mailto:mr0.0feng@foxmail.com"
        },
        {
          "iconClass": "icon-github",
          "title": "GitHub",
          "link": "https://github.com/Mr0v0Feng"
        },
        {
          "iconClass": "icon-erji",
          "title": "听音乐",
          "link": "https://music.163.com/#/playlist?id=755597173"
        }
      ]
    },
    "footer": {
      "createYear": 2019,
      "copyrightInfo": "Evan Xu | <a href=\"https://github.com/Mr0v0Feng/blog/blob/master/LICENSE\" target=\"_blank\">MIT License</a>"
    }
  }
}