javascript的世界 1
第一部分 经典javasc ript 13
第1章 javascript不只是简单的构件块 13
1.1 javascript对象、基本类型和字面值之间的区别 13
1.2 从字符串提取一个列表 17
1.3 检查一个存在的、非空的字符串 19
1.4 插入特殊字符 24
1.5 使用新字符串替换模式 26
1.6 找到并突出显示一个模式的所有实例 28
1.7 使用捕获圆括号交换一个字符串中的单词 32
1.8 使用命名实体来替代html标签 34
1.9 把一个iso 8601格式的日期转换为date对象可接受的一种格式 34
1.10 使用带有定时器的函数闭包 37
1.11 记录消耗时间 40
1.12 把十进制数转换为一个十六进制值 40
1.13 把表中一列的所有数字加和 42
1.14 在角度和弧度之间转换 45
1.15 找到页面元素可容纳的一个圆的半径和圆心 45
1.16 计算圆弧的长度 47
1.17 使用es6字符串新增方法而不会丢弃用户 48
第2章 javascript数组 51
2.1 在数组中搜索 51
2.2 用concat()和apply()将一个两维数组扁平化 53
2.3 删除或替换数组元素 54
2.4 提取一个数组的一部分 55
2.5 对每个数组元素应用一个函数 56
2.6 使用foreach()and call()遍历queryselectorall()的结果 58
2.7 对数组中的每个元素执行一个函数并返回一个新数组 59
2.8 创建一个过滤后的数组 59
2.9 验证数组内容 60
2.10 使用一个关联数组来存储表单元素名和值 62
2.11 使用解构赋值简化代码 65
第3章 函数:javascript的构建块 68
3.1 放置函数并提升 68
3.2 把一个函数当做参数传递给另一个函数 70
3.3 实现递归算法 72
3.4 使用一个定时器和回调防止代码阻塞 75
3.5 创建能够记住其状态的函数 78
3.6 把函数参数转换到一个数组中 81
3.7 使用一个局部应用减少冗余性 83
3.8 使用缓存计算(memoization)来提高应用程序性能 86
3.9 使用匿名函数包装全局变量 88
3.10 提供一个默认的参数 89
第4章 可扩展的javascript对象 91
4.1 保持对象成员私有 92
4.2 用原型扩展对象 93
4.3 继承一个对象的功能 96
4.4 通过定义一个新的属性来扩展对象 98
4.5 阻止对象可扩展性 100
4.6 阻止对对象的任何修改 101
4.7 为你的javascript对象提供命名空间 103
4.8 用prototype.bind再次发现“this” 106
4.9 将对象方法链化 109
第5章 javascript和直接访问用户界面 111
5.1 访问一个给定的元素并找到其父元素和子元素 111
5.2 访问web页面中所有的图像 114
5.3 使用selectors api找出文章中的所有图像 119
5.4 设置元素的css样式属性 122
5.5 对无序列表应用条纹主题 125
5.6 找出共享同一属性的所有元素 126
5.7 插入一个新的段落 128
5.8 给新的段落添加文本 129
5.9 从html表格删除行 130
5.10 添加一个页面覆盖 133
5.11 创建可折叠的表单区段 136
5.12 隐藏页面区段 139
5.13 创建基于悬停的弹出信息窗口 140
5.14 显示一个带颜色的闪烁以表示一个动作 142
第6章 基本测试和可访问性 145
6.1 使用jshint清理代码 145
6.2 使用qunit测试代码 147
6.3 在各种环境中测试应用程序 150
6.4 不同编码技术的性能测试 153
6.5 突出显示错误的可访问性 156
6.6 创建一个可访问性自动更新区域 162
第7章 创建和使用javascript库 165
7.1 找到完美的库 165
7.2 使用modernizr.load测试功能 166
7.3 超越math对象的能力 167
7.4 求出两个日期之间相差的天数 170
7.5 使用一个外部库:构建于jquery框架之上 171
7.6 使用一个jquery插件 173
7.7 使用mousetrap处理键盘快捷键 176
7.8 使用工具库underscore 179
7.9 打包你的代码 181
7.10 添加对私有数据成员的支持 183
7.11 简化你的库 186
7.12 寄存库 187
7.13 通过cdn服务代码 190
7.14 把库转换为一个jquery插件 191
7.15 安全地把几个库组合到你的应用程序中 193
第8章 简化的客户端-服务器通信和数据 196
8.1 处理从ajax调用返回的一个xml文档 196
8.2 从一个xml树提取相关信息 198
8.3 解析一个json格式化字符串 202
8.4 使用json把一个对象转换为过滤的/转换的字符串 204
8.5 (使用jsonp)对另一个域进行ajax请求 206
8.6 处理来自一个ajax请求的json 208
8.7 从服务器填充一个选项列表 210
8.8 使用定时器以新数据自动更新页面 214
第9章 创建富媒体和交互web效果 217
9.1 在画布中创建一个动态的线条图表 217
9.2 向一个svg文件添加javascript 222
9.3 从web页面脚本访问svg 226
9.4 在html中加入svg和画布元素 228
9.5 当一个音频文件开始播放的时候运行一个例程 230
9.6 用javascript和video元素控制视频 232
9.7 通过画布为视频添加过滤效果 235
第二部分 javascript全面兴起 243
第10章 新的ecmascript标准对象 243
10.1 在浏览器应用程序中使用let 244
10.2 创建非重复值的一个集合 247
10.3 用唯一的不同的键创建唯一的键/值对 249
10.4 创建绝对唯一的对象属性键 252
10.5 使得遍历任务变简单 254
10.6 创建优雅地结束的函数 255
10.7 使用proxy实现即时对象行为修改 257
10.8 创建一个真正的类并扩展它(略微借助于traceur) 260
10.9 使用promise实现高效异步处理 263
第11章 node:服务器上的javascript 266
11.1 响应一个简单浏览器请求 266
11.2 提供格式化的数据 269
11.3 读取和写入文件数据 271
11.4 在node中使用let和其他的es6添加 275
11.5 使用repl交互式地尝试node代码段 277
11.6 从终端获取输入 279
11.7 使用node定时器并理解node事件循环 281
11.8 管理回调地狱 285
11.9 用一个node应用程序访问命令行功能 289
11.10 在同一端口上运行node和apache 292
11.11 保持一个node实例启动并运行 294
11.12 监控应用程序修改和重启 296
11.13 用request进行屏幕抓取 297
11.14 在commander的帮助下创建一个命令行工具 299
第12章 模块化和管理javascript 302
12.1 使用脚本加载器来加载脚本 303
12.2 以html5的方式异步加载脚本 306
12.3 将javascript转换为amd和requirejs 307
12.4 将requirejs和jquery或其他的库一起使用 310
12.5 加载和使用dojo模块 314
12.6 使用npm安装和维护node模块 315
12.7 通过npm搜索一个具体的node模块 317
12.8 将你的库转换为node模块 318
12.9 将自己的代码应用到所有环境中 320
12.10 创建一个可安装的node模块 324
12.11 使用bower打包和管理客户端依赖性 328
12.12 用browserify编译node.js模块以便在浏览器中使用 330
12.13 对你的node模块进行单元测试 332
12.14 用grunt运行任务 335
第13章 api的乐趣 340
13.1 通过一个restful api访问json格式的数据 340
13.2 使用restify创建一个restful api 344
13.3 在桌面浏览器中支持类似移动平台的通知 349
13.4 在浏览器中本地加载文件 352
13.5 使用web worker和file api创建一个mini的e-pub阅读器 354
13.6 探索google maps和其他的api 359
13.7 从一个node应用程序访问twitter api 366
第14章 javascript框架 373
14.1 使用express-generator生成一个express站点 374
14.2 将一个生成的express站点转换为一个基本的mvc app 381
14.3 选择一个spa框架:解构todomvc 395
14.4 使用oauth框架 406
14.5 用web组件扩展可能性 419
第15章 高级客户端一服务器通信和流 431
15.1 允许跨域请求 431
15.2 在ajax中实现一个put请求 434
15.3 通过ajax发送二进制数据并加载到图像中 437
15.4 跨域共享http cookies 439
15.5 在客户端和服务器之间建立双向通信 441
15.6 使用变换流上传和压缩文件 446
15.7 测试websockets应用程序的性能和功能 448
第16章 数据可视化和客户端/服务器图形 451
16.1 使用d3创建一个svg柱状图 452
16.2 用雷达图映射数据点变化 457
16.3 通过websocket形成一个滚动的时间线 460
16.4 产生所生成的web页面内容的屏幕截图(phantomjs) 464
16.5 将图形转换为文本(ocrad.js) 469
16.6 裁剪(或者叫做修改)上传的图像 472
第17章 数据和持久性 476
17.1 验证表单数据 476
17.2 使用html5持久化信息 482
17.3 针对客户端存储使用sessionstorage 485
17.4 创建一个localstorage客户端数据存储项 493
17.5 使用squeljs查询一个mysql数据库 496
17.6 使用indexeddb在客户端持久化较大的数据块 499
17.7 使用dropbox数据存储访问云中的数据 502
第18章 javascript迈上移动之路 512
18.1 创建一款可安装的、寄存的web app 512
18.2 为amazon appstore打包web app 518
18.3 使用cordova(phonegap)构建一款基本的android app 520
18.4 将where am i移植到android 527
18.5 创建一个geolocation firefox os app 535
18.6 将geolocation app移植到一个google chrome app 544
18.7 在kindle fire os环境中发布geolocation app 551
18.8 调试android或amazon fire os app 555
18.9 获取有关设备的信息 557
附录a认识jsbin和jsfiddle 563