第1ç« â€ƒåˆå…¥ JavaScript 001 1.1 JavaScript 简介 002 1.2 JavaScript èµ·æº 003 1.3 JavaScript 实现 004 1.3.1 ECMAScript 004 1.3.2 BOM 005 1.3.3 DOM 005 1.4 JavaScript 使用 005 1.4.1 内è”çš„ JavaScript 005 1.4.2 外部的 JavaScript 006 1.4.3 行内的 JavaScript 007 第2ç« â€ƒå‡†å¤‡å·¥ä½œ 008 2.1 开å‘工具 009 2.1.1 Sublime Text 009 2.1.2 Visual Studio Code 010 2.1.3 WebStorm 011 2.1.4 Atom 012 2.2 Chrome å¼€å‘者工具 012 2.2.1 信æ¯ç±»æ–¹æ³• 013 2.2.2 清除历å²è®°å½• 013 2.2.3 ä¿ç•™åކå²è®°å½• 014 第3ç« â€ƒè¯æ³• 015 3.1â€ƒåŸºæœ¬è¯æ³• 016 3.1.1 è¯å¥ 016 3.1.2 注释 016 3.1.3â€ƒæ ‡è¯†ç¬¦ 017 3.2 å˜é‡å’Œå˜é‡ä½œç”¨åŸŸ 019 3.2.1 å˜é‡ 019 3.2.2 声明å˜é‡ 019 3.2.3 éžå£°æ˜Žå˜é‡ 024 3.3 数æ®ç±»åž‹ 025 3.3.1 内å˜ç©ºé—´ 025 3.3.2 基本数æ®ç±»åž‹ä¸Žå¼•用数æ®ç±»åž‹ 025 3.3.3 浅拷è´ä¸Žæ·±æ‹·è´ 027 3.3.4 typeof 与 instanceof 029 3.3.5â€ƒç±»åž‹è½¬æ¢ 031 3.3.6 基本包装类型 035 3.4 å—符串 036 3.4.1 å—符串的特点 039 3.4.2 length 属性 039 3.4.3 实例方法 039 3.5 è¿ç®—符 048 3.5.1 算术è¿ç®—符 048 3.5.2 逻辑è¿ç®—符 050 3.5.3 比较è¿ç®—符 051 3.5.4 三元è¿ç®—符 052 3.5.5 赋值 053 3.5.6 ä½è¿ç®—符 054 3.5.7â€ƒå¼‚æ¥æ“作符 async function 055 3.5.8 其他è¿ç®—符 059 3.5.9 è¿ç®—符优先级 060 3.6 æ¡ä»¶è¯å¥ 062 3.6.1 if è¯å¥ 062 3.6.2 switch è¯å¥ 063 3.6.3 三元è¿ç®—符 064 3.7 循环è¯å¥ 065 3.7.1 for 065 3.7.2 while 065 3.7.3 for…in 067 3.7.4 for…of 068 3.7.5 break å’Œ continue è¯å¥ 068 3.8â€ƒé”™è¯¯å¤„ç† 069 3.8.1 try…catch 069 3.8.2 throw 070 3.9â€ƒä¸¥æ ¼æ¨¡å¼ 070 第4ç« â€ƒå‡½æ•° 072 4.1 定义 073 4.1.1 返回值 073 4.1.2 ç®å¤´å‡½æ•°ï¼ˆArrow Function) 074 4.1.3 关于 this 075 4.2 函数的属性和方法 080 4.2.1 length 属性 080 4.2.2 name 080 4.3â€ƒå‚æ•° 080 4.3.1â€ƒæŒ‰å€¼ä¼ é€’ 081 4.3.2 arguments 082 4.3.3 Rest 傿•°ï¼ˆå‰©ä½™å‚数) 083 4.3.4 ç®å¤´å‡½æ•°ä¸çš„ arguments 对象 083 4.3.5â€ƒé»˜è®¤å‚æ•° 083 4.4 递归 084 4.5 é—包 086 4.5.1 什么是é—包 087 4.5.2 实践ä¸çš„é—包 087 4.6 IIFE 089 4.7 高阶函数 090 4.7.1 回调函数 090 4.7.2 å函数 091 4.7.3 柯里化 091 4.7.4 纯函数 092 第5ç« â€ƒæ•°ç»„ 093 5.1 定义 094 5.2 多维数组 094 5.3 length 属性 094 5.4 方法 094 5.4.1 Array.isArray() 095 5.4.2 Array.of() 095 5.4.3 Array.from() 095 5.5 实例方法 099 5.5.1 concat() 099 5.5.2 copyWithin() 099 5.5.3 keys()ã€values() å’Œ entries() 100 5.5.4 forEach() å’Œ map() 100 5.5.5 every() å’Œ some() 101 5.5.6 filter() 101 5.5.7 fill() 102 5.5.8 find() å’Œ findIndex() 102 5.5.9 includes() 102 5.5.10 indexOf() å’Œ lastIndexOf() 103 5.5.11 join() å’Œ splice() 103 5.5.12 push()ã€pop()ã€unshift() å’Œ shift() 103 5.5.13 reduce() å’Œ reduceRight() 104 5.5.14 reverse() 104 5.5.15 slice() 104 5.5.16 sort() 104 5.5.17 toString() 105 5.5.18 toLocaleString() 105 第6ç« â€ƒå¯¹è±¡ 106 6.1 定义 107 6.1.1 定义对象的属性 107 6.1.2 定义对象的方法 108 6.1.3 getter å’Œ setter 108 6.2 属性 109 6.2.1 原型åŠåŽŸåž‹é“¾ 109 6.2.2 更好的类型检测 110 6.2.3â€ƒæž„é€ å‡½æ•° 111 6.3 方法 112 6.3.1 Object.getPrototypeOf() å’Œ Object.setPrototypeOf() 112 6.3.2 Object.create() 112 6.3.3 Object.assign() 112 6.3.4 Object.defineProperty() å’Œ Object.getOwnPropertyDescriptor() 113 6.3.5 Object.defineProperties()å’ŒObject.getOwnPropertyDescriptors() 114 6.3.6 Object.keys()ã€Object.values() å’Œ Object.entries() 114 6.3.7 Object.freeze() å’Œ Object.isFrozen() 115 6.3.8 Object.seal() å’Œ Object.isSealed() 115 6.3.9 Object.preventExtensions() å’Œ Object.isExtensible() 116 6.3.10 Object.is() 116 6.3.11 Object.getOwnPropertyNames() 116 6.3.12 Object.getOwnPropertySymbols() 117 第7ç« â€ƒç±» 118 7.1 定义 119 7.2 constructor 119 7.2.1 实例化 119 7.2.2 类的方法 120 7.2.3 this æŒ‡å‘ 120 7.2.4 constructor 属性 121 7.3 继承 122 7.4â€ƒé™æ€æ–¹æ³• 123 第8ç« â€ƒJSON 125 8.1 简介 126 8.2 JSONçš„è§£æž 126 8.3 JSONçš„åºåˆ—化 129 第9ç« â€ƒBOM 132 9.1 window 133 9.1.1 setTimeout 133 9.1.2 setInterval 133 9.1.3 定时器的问题 134 9.2 history 134 9.2.1 history 134 9.2.2 ajax çš„å‰è¿›åŽé€€ 135 9.3 location 137 9.3.1 assign() å’Œ replace() 138 9.3.2 reload() 138 9.3.3 属性 138 9.4 navigator 139 第10ç« â€ƒDOM 140 10.1 DOM 简介 141 10.1.1 节点 141 10.1.2 节点类型 141 10.2 节点查找 142 10.2.1 获å–å•个节点 Node 142 10.2.2 获å–èŠ‚ç‚¹é›†åˆ NodeList 143 10.3 节点æ“作 146 10.3.1 创建节点 146 10.3.2 新增节点 147 10.3.3â€ƒåˆ é™¤èŠ‚ç‚¹ 148 10.3.4 修改节点 149 10.4 属性æ“作 149 10.4.1 getAttribute() 149 10.4.2 setAttribute() 150 10.4.3â€ƒç‚¹ç¬¦å· 150 10.4.4 classList 属性 150 10.5 内容æ“作 151 10.6â€ƒæ ·å¼æ“作 152 10.6.1 getComputedStyle() 152 10.6.2 设置CSSæ ·å¼ 152 第11ç« â€ƒäº‹ä»¶ 153 11.1â€ƒäº‹ä»¶å¤„ç† 154 11.1.1 addEventListener() 154 11.1.2 removeEventListener() 155 11.2â€ƒäº‹ä»¶æµ 156 11.3 事件对象与事件类型 157 11.3.1 阻æ¢é»˜è®¤è¡Œä¸º 159 11.3.2 阻æ¢äº‹ä»¶å†’泡 159 11.3.3 事件委托 160 11.4 自定义事件 161 第12ç« â€ƒAjax 163 12.1 Ajax 简介 164 12.1.1 XMLHttpRequest 164 12.1.2 Fetch 167 12.2 HTTP 168 12.2.1â€ƒå®¢æˆ·ç«¯ã€æœåŠ¡ç«¯ 168 12.2.2â€ƒä»£ç†æœåС噍 168 12.2.3 HTTPæ˜¯æ— çŠ¶æ€ï¼Œæœ‰ä¼šè¯çš„ 168 12.2.4 HTTP æµ 169 12.2.5 http1.0的问题 170 12.4 跨域 171 12.4.1 æµè§ˆå™¨çš„åŒæºç–ç•¥ 171 12.4.2 jsonp 171 12.4.3 img ping 171 12.4.4 window.name 172 12.4.5 postMessage 173 12.4.6 CORS 174 第13ç« â€ƒæ¨¡å—和构建工具 175 13.1â€ƒæ¨¡å— 176 13.1.1 CommonJS 176 13.1.2 AMD 177 13.1.3 CMD 177 13.1.4 UMD 178 13.2 ES6ä¸çš„æ¨¡å— 178 13.2.1 export 178 13.2.2 import 179 13.2.3 导入ã€å¯¼å‡ºæ—¶çš„é‡å‘½å 179 13.3 构建工具 180 13.3.1 npm 的使用 180 13.3.2 npm å‘布包 181 第14ç« â€ƒå®¢æˆ·ç«¯å˜å‚¨ 184 14.1 cookie 185 14.1.1 什么是 cookie 185 14.1.2 有效期和作用域 185 14.1.3 关于 session 186 14.1.4 关于 token 186 14.2 本地å˜å‚¨ 186 14.2.1 localStorage 187 14.2.2 .å’Œ [ ] æ“作 188 14.2.3 sessionStorage 188 14.3 IndexedDB 188 第15ç« â€ƒæ€§èƒ½ä¼˜åŒ– 191 15.1 å‡å°‘请求数 192 15.1.1 åˆå¹¶ä»£ç 192 15.1.2 CSS Sprite 193 15.1.3 data url 193 15.2 å‡å°‘代ç 体积 194 15.3â€ƒç¼“å˜æ–‡ä»¶ 196 15.3.1 æµè§ˆå™¨ç¼“å˜ 196 15.3.2â€ƒå®¢æˆ·ç«¯ç¼“å˜ 197 15.4 使用内容分å‘网络 CDN 197 15.6â€ƒå»¶è¿ŸåŠ è½½ 197 15.6.1 实现 198 15.6.2 完整代ç 198 15.7 é¿å…é‡å®šå‘ 199 15.8 æœåŠ¡ç«¯gzip 199 15.8.1 什么是 gzip 199 15.8.2 gzip åŽ‹ç¼©åŽŸç† 200 第16ç« â€ƒç±»åº“å’Œæ¡†æž¶ 201 16.1 预处ç†å™¨ 202 16.2 辅助库 202 16.2.1 jQuery 202 16.2.2 axios 203 16.2.3 Underscore 203 16.2.4 lodash 204 16.2.5 Moment.js 204 16.3 框架 205 16.3.1 Angular 205 16.3.2 React 205 16.3.3 Vue.js 205 附录 A Canvas 206 附录 B å‰ç«¯ä¸çš„ SEO 209 B.1 robots.txt 209 B.2 title 209 B.3 meta 210 B.4 其他 HTML æ ‡ç¾ 210 B.5â€ƒç»“æž„åŒ–æ•°æ®æ ‡è®° 210 附录 Câ€ƒç¼–ç¨‹é£Žæ ¼ 212 C.1 å‡å°‘全局å˜é‡æ±¡æŸ“ 212 C.2 é¿å…使用 var 212 C.3 使用å—é¢é‡ 212 C.4 å—符串 213 C.5 解构 213 C.6 函数 213 C.7â€ƒæ¨¡å— 214 C.8 其他 214