内容简介:
作者简介:
井上诚一郎
曾在美国参与过Lotus Notes的开发,后在日本创立了Ariel Network股份公司,任CTO。目前从事面向企业的PSP软件及企业产品的开发。著有《PSP教科书》、《Java编程详解》、《实践JS 服务器端JavaScript入门》等书。负责本书Part1、Part2、Part5与Part6的撰写。
土江拓郎
大学时学习了航天工程学和机器人工程学,之后凭着兴趣进入了IT行业工作。2008年加入Ariel Network股份公司。从事Java及JavaScript相关的企业产品开发工作。负责本书Part3的撰写。
滨边将太
学生时代在Ariel Network股份公司实习。学习了软件开发的基础知识并了解了开发人员的工作生活情况。2009年加入了雅虎公司,从事针对电视的软键盘开发,以及智能手机应用GyaO!的开发。最近正在公司中开展HTML5及Node.js的普及活动。负责了本书Part4的撰写。
译者简介:
陈筱烟
毕业于复旦大学计算机科学与技术系,主要研究方向为跨设备人机交互理论。长期从事对日软件外包工作。从大学时期开始接触并使用Java、JavaScript进行程序开发,现在对Web应用及智能手机应用的开发很感兴趣。
作者简介:
作者简介:
井上诚一郎
曾在美国参与过Lotus Notes的开发,后在日本创立了Ariel Network股份公司,任CTO。目前从事面向企业的PSP软件及企业产品的开发。著有《PSP教科书》、《Java编程详解》、《实践JS 服务器端JavaScript入门》等书。负责本书Part1、Part2、Part5与Part6的撰写。
土江拓郎
大学时学习了航天工程学和机器人工程学,之后凭着兴趣进入了IT行业工作。2008年加入Ariel Network股份公司。从事Java及JavaScript相关的企业产品开发工作。负责本书Part3的撰写。
滨边将太
学生时代在Ariel Network股份公司实习。学习了软件开发的基础知识并了解了开发人员的工作生活情况。2009年加入了雅虎公司,从事针对电视的软键盘开发,以及智能手机应用GyaO!的开发。最近正在公司中开展HTML5及Node.js的普及活动。负责了本书Part4的撰写。
译者简介:
陈筱烟
毕业于复旦大学计算机科学与技术系,主要研究方向为跨设备人机交互理论。长期从事对日软件外包工作。从大学时期开始接触并使用Java、JavaScript进行程序开发,现在对Web应用及智能手机应用的开发很感兴趣。
目录:
第1部分 JavaScript概要001
第1章 JavaScript概要002
1.1 JavaScript概要002
1.2 JavaScript的历史002
1.3 ECMAScript003
1.3.1 JavaScript的标准化003
1.3.2 被放弃的ECMAScript第4版004
1.4 JavaScript的版本004
1.5 JavaScript实现方式005
1.6 JavaScript运行环境006
1.6.1 核心语言006
1.6.2 宿主对象007
1.7 JavaScript相关环境007
1.7.1 库007
1.7.2 源代码压缩007
1.7.3 集成开发环境008
第2部分 JavaScript的语言基础009
第2章 JavaScript基础010
2.1 JavaScript的特点010
2.2 关于编排格式011
2.3 变量的基础012
2.3.1 变量的使用方法012
2.3.2 省略var013
2.3.3 常量013
2.4 函数基础013
2.4.1 函数的定义013
2.4.2 函数的声明与调用014
2.4.3 匿名函数014
2.4.4 函数是一种对象015
2.5 对象的基础016
2.5.1 对象的定义016
2.5.2 对象字面量表达式与对象的使用016
2.5.3 属性访问017
2.5.4 属性访问(括号方式)017
2.5.5 方法018
2.5.6 new表达式018
2.5.7 类与实例018
2.5.8 对类的功能的整理018
2.5.9 对象与类型019
2.6 数组的基础019
第3章 JavaScript的数据类型021
3.1 数据类型的定义021
3.1.1 在数据类型方面与Java作比较021
3.1.2 基本数据类型和引用类型022
3.2 内建数据类型概要022
3.3 字符串型023
3.3.1 字符串字面量023
3.3.2 字符串型的运算024
3.3.3 字符串型的比较024
3.3.4 字符串类(String类)025
3.3.5 字符串对象026
3.3.6 避免混用字符串值和字符串对象027
3.3.7 调用String函数027
3.3.8 String类的功能027
3.3.9 非破坏性的方法029
3.4 数值型029
3.4.1 数值字面量029
3.4.2 数值型的运算030
3.4.3 有关浮点数的常见注意事项030
3.4.4 数值类(Number类)031
3.4.5 调用Number函数031
3.4.6 Number类的功能032
3.4.7 边界值与特殊数值033
3.4.8 NaN034
3.5 布尔型035
3.5.1 布尔值035
3.5.2 布尔类(Boolean类) 036
3.5.3 Boolean类的功能036
3.6 null型037
3.7 undefined型037
3.8 Object类型038
3.9 数据类型转换039
3.9.1 从字符串值转换为数值039
3.9.2 从数值转换为字符串值040
3.9.3 数据类型转换的惯用方法040
3.9.4 转换为布尔型041
3.9.5 其他的数据类型转换042
3.9.6 从Object类型转换为基本数据类型042
3.9.7 从基本数据类型转换为Object类型043
第4章 语句、表达式和运算符045
4.1 表达式和语句的构成045
4.2 保留字045
4.3 标识符046
4.4 字面量047
4.5 语句047
4.6 代码块(复合语句)048
4.7 变量声明语句048
4.8 函数声明语句048
4.9 表达式语句048
4.10 空语句049
4.11 控制语句049
4.12 if-else语句050
4.13 switch-case语句052
4.14 循环语句054
4.15 while语句055
4.16 do-while语句056
4.17 for语句057
4.18 for in语句058
4.18.1 数列与for in语句059
4.18.2 在使用for in语句时需要注意的地方060
4.19 for each in语句060
4.20 break语句061
4.21 continue语句061
4.22 通过标签跳转062
4.23 return语句063
4.24 异常063
4.25 其他064
4.26 注释065
4.27 表达式065
4.28 运算符065
4.29 表达式求值066
4.30 运算符的优先级以及结合律066
4.31 算术运算符067
4.32 字符串连接运算符068
4.33 相等运算符068
4.34 比较运算符069
4.35 in运算符070
4.36 instanceof运算符071
4.37 逻辑运算符071
4.38 位运算符072
4.39 赋值运算符072
4.40 算术赋值运算符073
4.41 条件运算符(三目运算符)073
4.42 typeof运算符073
4.43 new运算符074
4.44 delete运算符074
4.45 void运算符074
4.46 逗号(,)运算符074
4.47 点运算符和中括号运算符075
4.48 函数调用运算符075
4.49 运算符使用以及数据类型转换中需要注意的地方075
第5章 变量与对象076
5.1 变量的声明076
5.2 变量与引用076
5.2.1 函数的参数(值的传递)078
5.2.2 字符串与引用079
5.2.3 对象与引用相关的术语总结079
5.3 变量与属性080
5.4 变量的查找081
5.5 对变量是否存在的检验081
5.6 对象的定义082
5.6.1 抽象数据类型与面向对象082
5.6.2 实例间的协作关系与面向对象083
5.6.3 JavaScript的对象083
5.7 对象的生成083
5.7.1 对象字面量083
5.7.2 构造函数与new表达式085
5.7.3 构造函数与类的定义087
5.8 属性的访问087
5.8.1 属性值的更新088
5.8.2 点运算符与中括号运算符在使用上的区别088
5.8.3 属性的枚举089
5.9 作为关联数组的对象089
5.9.1 关联数组089
5.9.2 作为关联数组的对象的注意点090
5.10 属性的属性091
5.11 垃圾回收092
5.12 不可变对象092
5.12.1 不可变对象的定义092
5.12.2 不可变对象的作用092
5.12.3 实现不可变对象的方式093
5.13 方法094
5.14 this引用094
5.14.1 this引用的规则094
5.14.2 this引用的注意点095
5.15 apply与call096
5.16 原型继承097
5.16.1 原型链097
5.16.2 原型链的具体示例099
5.16.3 原型继承与类100
5.16.4 对于原型链的常见误解以及_proto_属性100
5.16.5 原型对象101
5.16.6 ECMAScript第5版与原型对象101
5.17 对象与数据类型102
5.17.1 数据类型判定(constructor属性)102
5.17.2 constructor属性的注意点102
5.17.3 数据类型判定(instance运算与isPrototypeOf方法)103
5.17.4 数据类型判定(鸭子类型)103
5.17.5 属性的枚举(原型继承的相关问题)104
5.18 ECMAScript第5版中的Object类105
5.18.1 属性对象105
5.18.2 访问器的属性106
5.19 标准对象108
5.20 Object类108
5.21 全局对象110
5.21.1 全局对象与全局变量110
5.21.2 Math对象111
5.21.3 Error对象112
第6章 函数与闭包113
6.1 函数声明语句与匿名函数表达式113
6.2 函数调用的分类113
6.3 参数与局部变量114
6.3.1 arguments对象114
6.3.2 递归函数114
6.4 作用域115
6.4.1 浏览器与作用域116
6.4.2 块级作用域116
6.4.3 let与块级作用域117
6.4.4 嵌套函数与作用域119
6.4.5 变量隐藏119
6.5 函数是一种对象120
6.6 Function类122
6.7 嵌套函数声明与闭包123
6.7.1 对闭包的初步认识123
6.7.2 闭包的原理123
6.7.3 闭包中需要注意的地方126
6.7.4 防范命名空间的污染127
6.7.5 闭包与类129
6.8 回调函数设计模式130
6.8.1 回调函数与控制反转130
6.8.2 JavaScript与回调函数131
第7章 数据处理134
7.1 数组134
7.1.1 JavaScript的数组134
7.1.2 数组元素的访问135
7.1.3 数组的长度136
7.1.4 数组元素的枚举136
7.1.5 多维数组137
7.1.6 数组是一种对象138
7.1.7 Array类139
7.1.8 数组对象的意义140
7.1.9 数组的习惯用法141
7.1.10 数组的内部实现144
7.1.11 数组风格的对象145
7.1.12 迭代器145
7.1.13 生成器147
7.1.14 数组的内包149
7.2 JSON149
7.2.1 JSON字符串149
7.2.2 JSON对象150
7.3 日期处理151
7.4 正则表达式153
7.4.1 正则表达式的定义153
7.4.2 正则表达式相关的术语154
7.4.3 正则表达式的语法154
7.4.4 JavaScript中的正则表达式156
7.4.5 正则表达式程序设计157
7.4.6 字符串对象与正则表达式对象158
第3部分 客户端JavaScript161
第8章 客户端JavaScript与HTML162
8.1 客户端JavaScript的重要性162
8.1.1 Web应用程序的发展162
8.1.2 JavaScript的性能提升162
8.1.3 JavaScript的作用163
8.2 HTML与JavaScript163
8.2.1 网页显示过程中的处理流程163
8.2.2 JavaScript的表述方式及其执行流程163
8.2.3 执行流程的小结166
8.3 运行环境与开发环境166
8.3.1 运行环境166
8.3.2 开发环境166
8.4 调试167
8.4.1 alert167
8.4.2 console167
8.4.3 onerror169
8.4.4 Firebug, Web Inspector (Developer Tools), Opera Dragonfly169
8.5 跨浏览器支持171
8.5.1 应当提供支持的浏览器171
8.5.2 实现方法172
8.6 Window对象174
8.6.1 Navigator对象174
8.6.2 Location对象174
8.6.3 History对象175
8.6.4 Screen对象176
8.6.5 对Window对象的引用176
8.6.6 Document对象176
第9章 DOM177
9.1 DOM的定义177
9.1.1 DOM Level 1177
9.1.2 DOM Level 2177
9.1.3 DOM Level 3178
9.1.4 DOM的表述方式178
9.2 DOM的基础179
9.2.1 标签、元素、节点179
9.2.2 DOM操作179
9.2.3 Document对象179
9.3 节点的选择180
9.3.1 通过ID检索180
9.3.2 通过标签名检索180
9.3.3 通过名称检索184
9.3.4 通过类名检索184
9.3.5 父节点、子节点、兄弟节点185
9.3.6 XPath187
9.3.7 Selector API189
9.4 节点的创建与新增190
9.5 节点的内容更改190
9.6 节点的删除190
9.7 innerHTML/textContent190
9.7.1 innerHTML190
9.7.2 textContent191
9.8 DOM操作的性能191
第10章 事件192
10.1 事件驱动程序设计192
10.2 事件处理程序/事件侦听器的设定192
10.2.1 指定为HTML元素的属性193
10.2.2 指定为DOM元素的属性194
10.2.3 通过EventTarget.addEventListener()进行指定194
10.2.4 事件处理程序/事件侦听器内的this引用196
10.3 事件的触发196
10.4 事件的传播196
10.4.1 捕获阶段197
10.4.2 目标阶段197
10.4.3 事件冒泡阶段197
10.4.4 取消197
10.5 事件所具有的元素198
10.6 标准事件199
10.6.1 DOM Level 2中所定义的事件199
10.6.2 DOM Level 3中所定义的事件200
10.7 自定义事件202
第11章 客户端JavaScript实践203
11.1 样式203
11.1.1 样式的变更方法203
11.1.2 位置的设定207
11.1.3 位置208
11.1.4 动画209
11.2 AJAX210
11.2.1 异步处理的优点210
11.2.2 XMLHttpRequest210
11.2.3 基本的处理流程210
11.2.4 同步通信212
11.2.5 超时212
11.2.6 响应213
11.2.7 跨源限制214
11.2.8 跨源通信214
11.2.9 JSONP214
11.2.10 iframe攻击(iframe hack)215
11.2.11 window.postMessage218
11.2.12 XMLHttpRequest Level 2219
11.2.13 跨源通信的安全问题219
11.3 表单219
11.3.1 表单元素219
11.3.2 表单控件221
11.3.3 内容验证221
11.3.4 可用于验证的事件222
11.3.5 使用表单而不产生页面跳转的方法222
第12章 库224
12.1 使用库的原因224
12.2 jQuery的特征224
12.3 jQuery的基本概念225
12.3.1 使用实例225
12.3.2 链式语法226
12.4 $函数227
12.4.1 抽取与选择器相匹配的元素227
12.4.2 创建新的DOM元素227
12.4.3 将已有的DOM元素转换为jQuery对象227
12.4.4 对DOM构造完成后的事件侦听器进行设定227
12.5 通过jQuery进行DOM操作228
12.5.1 元素的选择228
12.5.2 元素的创建·添加·替换·删除230
12.6 通过jQuery处理事件231
12.6.1 事件侦听器的注册·删除231
12.6.2 事件专用的事件侦听器注册方法232
12.6.3 ready()方法232
12.7 通过jQuery对样式进行操作233
12.7.1 基本的样式操作233
12.7.2 动画234
12.8 通过jQuery进行AJAX操作235
12.8.1 AJAX()函数235
12.8.2 AJAX()的包装函数236
12.8.3 全局事件237
12.9 Deferred237
12.9.1 Deferred的基本概念237
12.9.2 状态迁移238
12.9.3 后续函数239
12.9.4 并行处理241
12.10 jQuery插件241
12.10.1 使用jQuery插件241
12.10.2 创建jQuery插件242
12.11 与其他库共同使用243
12.11.1 $对象的冲突243
12.11.2 避免$对象的冲突243
12.12 库的使用方法244
第13章 HTML5概要272
13.1 HTML5的历史246
13.2 HTML5的现状247
13.2.1 浏览器的支持情况247
13.2.2 Web应用程序与原生应用程序248
13.3 HTML5的概要248
第14章 Web应用程序250
14.1 History API250
14.1.1 History API的定义250
14.1.2 哈希片段250
14.1.3 接口251
14.2 ApplicationCache255
14.2.1 关于缓存管理255
14.2.2 缓存清单文件255
14.2.3 ApplicationCache API258
14.2.4 在线与离线259
第15章 与桌面应用的协作260
15.1 Drag Drop API260
15.1.1 Drag Drop API的定义260
HTML5245
第4部分 HTML5245
15.1.2 接口261
15.1.3 基本的拖动与释放262
15.1.4 自定义显示263
15.1.5 文件的Drag-In/ Drag-Out265
15.2 File API267
15.2.1 File API的定义267
15.2.2 File对象267
15.2.3 FileReader269
15.2.4 data URL271
15.2.5 FileReaderSync273
第16章 存储274
16.1 Web Storage274
16.1.1 Web Storage的定义274
16.1.2 基本操作275
16.1.3 storage事件277
16.1.4 关于Cookie277
16.1.5 命名空间的管理278
16.1.6 版本的管理279
16.1.7 对localStorage的模拟279
16.2 Indexed Database280
16.2.1 Indexed Database的定义280
16.2.2 基础架构280
16.2.3 连接数据库281
16.2.4 对象存储的创建281
16.2.5 数据的添加·删除·引用282
16.2.6 索引的创建283
16.2.7 数据的检索与更新284
16.2.8 数据的排序285
16.2.9 事务285
16.2.10 同步API286
第17章 WebSocket287
17.1 WebSocket概要287
17.1.1 WebSocket的定义287
17.1.2 现有的通信技术287
17.1.3 WebSocket的标准290
17.1.4 WebSocket的执行方式290
17.2 基本操作291
17.2.1 连接的建立291
17.2.2 消息的收发291
17.2.3 连接的切断292
17.2.4 连接的状态确认292
17.2.5 二进制数据的收发293
17.2.6 WebSocket实例的属性一览293
17.3 WebSocket实践294
17.3.1 Node.js的安装294
17.3.2 服务器端的实现295
17.3.3 客户端的实现295
17.3.4 客户端的实现2296
第18章 Web Workers298
18.1 Web Workers概要298
18.1.1 Web Workers的定义298
18.1.2 Web Workers的执行方式298
18.2 基本操作299
18.2.1 工作线程的创建299
18.2.2 主线程一侧的消息收发299
18.2.3 工作线程一侧的消息收发300
18.2.4 工作线程的删除300
18.2.5 外部文件的读取301
18.3 Web Worker实践301
18.3.1 工作线程的使用301
18.3.2 中断对工作线程的处理302
18.4 共享工作线程304
18.4.1 共享工作线程的定义304
18.4.2 共享工作线程的创建304
18.4.3 共享工作线程的消息收发305
18.4.4 共享工作线程的删除306
18.4.5 共享工作线程的应用实例306
第5部分 Web API309
第19章 Web API的基础 310
19.1 Web API与Web服务310
19.2 Web API的历史311
19.2.1 Web抓取311
19.2.2 语义网311
19.2.3 XML311
19.2.4 Atom312
19.2.5 JSON312
19.2.6 SOAP313
19.2.7 REST313
19.2.8 简单总结313
19.3 Web API的组成314
19.3.1 Web API的形式314
19.3.2 Web API的使用315
19.3.3 RESTful API315
19.3.4 API密钥316
19.4 用户验证与授权317
19.4.1 Web应用程序的会话管理317
19.4.2 会话管理与用户验证318
19.4.3 Web API与权限319
19.4.4 验证与授权320
19.4.5 OAuth321
第20章 Web API的实例 323
20.1 Web API的分类323
20.2 Google Translate API324
20.2.1 准备325
20.2.2 执行方式的概要325
20.2.3 使用了Web API的代码示例326
20.2.4 微件(Google Translate Element)327
20.3 Google Maps API328
20.3.1 Google Static Maps API328
20.3.2 我的地图329
20.3.3 Google Maps API的概要330
20.3.4 简单的Google Maps API示例330
20.3.5 事件331
20.3.6 Geolocation API与Geocoding API333
20.4 Yahoo! Flickr334
20.4.1 Flickr Web API的使用335
20.4.2 Flickr Web API的使用实例336
20.5 Twitter337
20.5.1 搜索API337
20.5.2 REST API338
20.5.3 Twitter JS API @anywhere339
20.5.4 Twitter Widget341
20.6 Facebook341
20.6.1 Facebook应用的发展历程341
20.6.2 Facebook的JavaScript API343
20.6.3 Facebook的插件344
20.7 OpenSocial345
第6部分 服务器端 JavaScript351
第21章 服务器端JavaScript与Node.js352
21.1 服务器端JavaScript的动向352
21.2 CommonJS352
21.2.1 CommonJS的定义352
21.2.2 CommonJS的动向353
21.2.3 模块功能353
21.3 Node.js355
21.3.1 Node.js概要355
21.3.2 node指令359
21.3.3 npm与包359
21.3.4 console模块360
21.3.5 util模块361
21.3.6 process对象362
21.3.7 全局对象363
21.3.8 Node.js程序设计概要363
21.3.9 事件API365
21.3.10 缓冲369
21.3.11 流372
第22章 Node.js程序设计实践374
22.1 HTTP服务器处理374
22.1.1 HTTP服务器处理的基本流程374
22.1.2 请求处理375
22.1.3 响应处理376
22.1.4 POST请求处理377
22.2 HTTP客户端处理378
22.3 HTTPS处理379
22.3.1 通过openssl指令发布自签名证书的方法379
22.3.2 HTTPS服务器379
22.4 Socket.IO与WebSocket380
22.5 下层网络程序设计381
22.5.1 下层网络处理381
22.5.2 套接字的定义382
22.5.3 套接字程序设计的基本结构382
22.5.4 套接字程序设计的具体实例384
22.6 文件处理385
22.6.1 本节的范例代码385
22.6.2 文件的异步处理386
22.6.3 文件的同步处理386
22.6.4 文件操作相关函数387
22.6.5 文件读取387
22.6.6 文件写入388
22.6.7 目录操作389
22.6.8 对文件更改的监视390
22.6.9 文件路径390
22.7 定时器390
22.8 Express391
22.8.1 URL路由392
22.8.2 请求处理392
22.8.3 响应处理393
22.8.4 scaffold创建功能393
22.8.5 MVC架构393
22.8.6 模板语言Jade394
22.8.7 MongoDB(数据库)395
22.8.8 Mongoose的实例397
22.8.9 使用了Express与Mongoose的Web应用程序398
后记401
索引403
文章试读:JavaScript 于1995 年登场,运用在当时最流行的浏览器Netscape Navigator 中。在此之前,浏览器只能处理HTML 与图片,而JavaScript 使得浏览器端的程序运行成为可能。 能够在浏览器中运行程序,并非JavaScript 的专利。其先驱是另一门著名的程序设计语言Java,主要用于服务器端。当初被称为Java Applet 的程序由于可以在浏览器(HotJava...
(查看全部试读)