具体描述
JavaScript是Web开发和网页设计的必备技术之一,也是一门优秀的教学语言,非常适合初涉计算机科学领域的学生学习。本书是专门为计算机编程入门课程设计的,它以一种现代化的方式向学生们介绍了计算机科学与编程,并提供了真实案例研究和大量练习。书中还介绍了一些通常不会在入门书中出现的主题,比如网页中的2D与3D图形、多点触控与手势交互界面、分布式计算、软件工程基础知识。此外还介绍了一些功能强大的工具,比如jQuery和正则表达式。为了强调动手操作在学习编程语言中的重要性,书中还提供了大量实用代码示例,并配备习题来供读者动手修改这些代码。
作者简介
John David Dionisio
洛约拉马利蒙特大学计算机科学教授,研究方向包括交互设计和计算机制图,以及各类计算机应用学科。与Ray Toal另合著有The JavaScript Programming Language。
Ray Toal
洛约拉马利蒙特大学教授,同时也是Friendbuy和Criteo公司的咨询顾问。从事计算机科学教研工作长达29年,在软件开发和架构方面有20多年的从业经验。
目录信息
1.1 计算是一门自然科学 1
1.2 计算的五大学科 2
1.2.1 计算机科学 2
1.2.2 软件工程 2
1.2.3 计算机工程 2
1.2.4 信息技术 3
1.2.5 信息系统 3
1.3 与计算相关的职业 3
1.4 关于计算的误解 4
1.5 本章小结 5
1.6 练习 5
第2章 编程 7
2.1 学习编程 7
2.2 基本概念 7
2.2.1 浏览器地址栏 8
2.2.2 运行器页面 8
2.2.3 交互式命令行 10
2.2.4 文件 12
2.3 程序的构成 16
2.3.1 表达式 16
2.3.2 变量 17
2.3.3 语句 20
2.4 编程惯例 21
2.4.1 注释 21
2.4.2 编码约定 22
2.4.3 代码质量检查工具 23
2.5 JavaScript编程语言 24
2.6 本章小结 24
2.7 练习 25
第3章 数据 28
3.1 数据类型 28
3.2 真值 28
3.3 数值 29
3.3.1 数值运算 30
3.3.2 大小和精度的限制 30
3.3.3 NaN 31
3.3.4 十六进制数值 31
3.4 文本 32
3.4.1 字符、符号与字符集 32
3.4.2 字符串操作 35
3.5 undefined与null 36
3.6 对象 37
3.6.1 对象基础 37
3.6.2 理解对象引用 38
3.6.3 对象原型 40
3.6.4 自引用对象 41
3.7 数组 41
3.8 类型转换 44
3.8.1 弱类型 44
3.8.2 显式转换 45
3.8.3 松散相等操作符 47
3.9 typeof操作符* 47
3.10 本章小结 48
3.11 练习 48
第4章 语句 52
4.1 声明语句 52
4.2 表达式语句 52
4.3 条件执行 54
4.3.1 if语句 54
4.3.2 条件表达式 56
4.3.3 switch语句 56
4.3.4 用查询避免条件代码 58
4.3.5 短路执行 61
4.4 迭代 62
4.4.1 while和do-while语句 62
4.4.2 for语句 63
4.4.3 for-in语句 67
4.5 中断 68
4.5.1 break和continue 69
4.5.2 异常 70
4.6 应该避免的编码风格 72
4.6.1 不分块的复合语句 72
4.6.2 隐式分号 73
4.6.3 隐式声明 74
4.6.4 递增和递减运算符 74
4.6.5 with语句 74
4.7 本章小结 74
4.8 练习 75
第5章 函数 78
5.1 黑盒 78
5.2 定义和调用函数 78
5.3 示例 80
5.3.1 简单的一行函数 80
5.3.2 验证实参 81
5.3.3 将对象引用作为参数传送 82
5.3.4 先决条件 83
5.3.5 关注点的分离 85
5.3.6 斐波那契数列 86
5.4 作用域 87
5.5 作为对象的函数 89
5.5.1 函数的属性 89
5.5.2 作为属性的函数 89
5.5.3 构造器 90
5.6 上下文 95
5.7 高阶函数 96
5.8 函数声明与函数表达式* 98
5.9 本章小结 99
5.10 练习 100
第6章 事件 105
6.1 用户互动 105
6.1.1 程序设计范例转移 105
6.1.2 事件举例:温度转换Web页面 106
6.2 定义用户界面元素 107
6.2.1 Web页面是结构化文档 108
6.2.2 生成用户界面控件的元素 109
6.3 以编程方式访问用户界面元素 112
6.3.1 document对象 112
6.3.2 DOM属性的乐趣 114
6.3.3 一个“玩耍”的地方 115
6.3.4 操控用户界面控件 116
6.3.5 遍历DOM* 118
6.4 事件处理程序 122
6.4.1 事件处理程序的骨架 122
6.4.2 事件处理程序是函数,是对象 123
6.5 事件对象 125
6.6 事件实现细节 126
6.6.1 事件捕获与冒泡 126
6.6.2 默认操作 127
6.6.3 指定事件处理程序 129
6.6.4 时间流逝触发的事件 130
6.6.5 多点触摸、手势和物理事件 131
6.7 案例研究:井字棋 135
6.7.1 文件与连接 135
6.7.2 初始化 137
6.7.3 事件处理 139
6.7.4 业务逻辑 139
6.8 本章小结 140
6.9 练习 140
第7章 软件构架 146
7.1 软件工程活动 146
7.2 面向对象的设计与编程 146
7.2.1 对象族 147
7.2.2 继承 149
7.2.3 信息隐藏 153
7.2.4 属性描述符* 155
7.3 JavaScript标准对象 157
7.3.1 内置对象 157
7.3.2 Web浏览器宿主对象 166
7.4 模块 166
7.4.1 简单模块 167
7.4.2 作为模块的井字棋游戏 168
7.5 jQuery JavaScript库 171
7.6 性能 175
7.6.1 运行时效率 175
7.6.2 空间效率 177
7.6.3 加载时间效率 178
7.6.4 用户界面效率 179
7.7 单元测试 181
7.7.1 一个简单的例子 182
7.7.2 QUnit测试框架 183
7.7.3 软件开发过程中的测试 186
7.8 本章小结 187
7.9 练习 187
第8章 分布式计算 193
8.1 分布式计算模型 193
8.2 数据交互格式 194
8.2.1 纯文本 194
8.2.2 XML 195
8.2.3 JSON 198
8.2.4 YAML 200
8.3 同步通信与异步通信 201
8.4 Ajax 202
8.4.1 jQuery中的Ajax 202
8.4.2 没有库的Ajax 206
8.5 设计分布式应用程序 208
8.5.1 统一资源标识符 208
8.5.2 REST 211
8.5.3 分布式应用程序关注点的分离 213
8.5.4 服务器端技术* 216
8.6 安全性 217
8.6.1 Web、不利因素和沙盒 217
8.6.2 同源策略 218
8.6.3 跨站脚本 222
8.6.4 mashup 224
8.7 案例研究:事件与趋势主题 225
8.7.1 日期选择用户界面 229
8.7.2 Ajax连接 230
8.7.3 结果处理 232
8.7.4 数据(mashup)显示 234
8.8 本章小结 235
8.9 练习 236
第9章 图形与动画 246
9.1 基础知识 246
9.1.1 坐标空间 246
9.1.2 色彩 247
9.1.3 像素与对象/矢量 248
9.1.4 动画 250
9.2 HTML和CSS 250
9.2.1 图形的HTML元素 250
9.2.2 CSS 251
9.2.3 可视属性 254
9.2.4 绝对位置 257
9.2.5 案例研究:条形图 258
9.2.6 案例研究:汉诺塔显示 259
9.3 HTML和CSS中的动画 262
9.3.1 恒定速度 262
9.3.2 淡入与淡出 263
9.3.3 实现其他属性的动画 264
9.3.4 缓动动画 264
9.3.5 声明性CSS动画 265
9.4 canvas元素 266
9.4.1 实例化canvas 266
9.4.2 渲染上下文 266
9.4.3 绘制矩形 267
9.4.4 绘制直线和多边形 268
9.4.5 绘制弧和圆 269
9.4.6 绘制贝塞尔曲线和二次曲线 270
9.4.7 处理图像 271
9.4.8 变换 274
9.4.9 动画 278
9.4.10 canvas举例 280
9.5 SVG 283
9.5.1 在Web浏览器中查看SVG 284
9.5.2 SVG案例研究:一个贝塞尔曲线编辑器 286
9.5.3 绘画中的对象 287
9.5.4 读写属性 287
9.5.5 交互性(事件处理归来) 290
9.5.6 其他SVG功能 291
9.6 用WebGL实现3D图形 292
9.6.1 WebGL是3D canvas 292
9.6.2 案例研究:谢尔宾斯基三角 293
9.6.3 定义3D数据 295
9.6.4 着色器代码 295
9.6.5 绘制场景 296
9.6.6 交互性与事件 297
9.7 其他客户端图形技术 299
9.7.1 Flash 299
9.7.2 Java 299
9.7.3 VML 300
9.8 本章小结 300
9.9 练习 300
第10章 高级主题 310
10.1 正则表达式 310
10.1.1 正则表达式简介 310
10.1.2 捕获 311
10.1.3 数量词 312
10.1.4 向后引用 313
10.1.5 正则表达式修饰符 313
10.1.6 RegExp构造器 314
10.1.7 正则表达式的更多内容 314
10.2 递归 314
10.2.1 什么是递归 315
10.2.2 递归经典示例 316
10.2.3 递归与家族树 322
10.2.4 什么时候不用递归 324
10.3 缓存 325
10.4 MapReduce 327
10.4.1 使用map、filter和reduce 327
10.4.2 实现 329
10.4.3 大规模数据处理中的MapReduce 330
10.5 动态创建事件处理程序 330
10.6 本章小结 333
10.7 练习 333
附录A JavaScript语言参考 337
附录B 数值编码 352
附录C Unicode 355
术语表 363
参考文献 366
· · · · · · (收起)
读后感
语言翻译的很流畅,讲得前几章完全是为了电脑小白准备的。后面的图例说明也不错。内容讲的听清楚。 到了后面涉及到HTML5的内容。就是有不少篇幅写的是练习题,平时应该没啥人会去做😂 数据类型讲得挺简洁。作为新书,适合新人。可以随便翻翻就当做入个门。要深入理解还是得看...
语言翻译的很流畅,讲得前几章完全是为了电脑小白准备的。后面的图例说明也不错。内容讲的听清楚。 到了后面涉及到HTML5的内容。就是有不少篇幅写的是练习题,平时应该没啥人会去做😂 数据类型讲得挺简洁。作为新书,适合新人。可以随便翻翻就当做入个门。要深入理解还是得看...
语言翻译的很流畅,讲得前几章完全是为了电脑小白准备的。后面的图例说明也不错。内容讲的听清楚。 到了后面涉及到HTML5的内容。就是有不少篇幅写的是练习题,平时应该没啥人会去做😂 数据类型讲得挺简洁。作为新书,适合新人。可以随便翻翻就当做入个门。要深入理解还是得看...
语言翻译的很流畅,讲得前几章完全是为了电脑小白准备的。后面的图例说明也不错。内容讲的听清楚。 到了后面涉及到HTML5的内容。就是有不少篇幅写的是练习题,平时应该没啥人会去做😂 数据类型讲得挺简洁。作为新书,适合新人。可以随便翻翻就当做入个门。要深入理解还是得看...
语言翻译的很流畅,讲得前几章完全是为了电脑小白准备的。后面的图例说明也不错。内容讲的听清楚。 到了后面涉及到HTML5的内容。就是有不少篇幅写的是练习题,平时应该没啥人会去做😂 数据类型讲得挺简洁。作为新书,适合新人。可以随便翻翻就当做入个门。要深入理解还是得看...
用户评价
读完《JavaScript程序设计》后,我感觉自己仿佛打开了一扇通往全新世界的大门。这本书不仅仅是一本技术书籍,更像是一位经验丰富的导师,耐心地引导我探索 JavaScript 的奥秘。我一直对动态网页的交互效果感到好奇,而这本书则循序渐进地教会了我如何实现这些效果。例如,书中关于 DOM 操作的章节,让我明白了如何通过 JavaScript 来改变网页的结构、样式甚至内容。我尝试着修改一个简单的网页,让它在用户点击按钮时弹出提示框,或者改变图片。每一次小小的成功,都让我对编程的兴趣倍增。 这本书对于事件处理的讲解也堪称一绝。我曾经对“事件监听器”、“事件冒泡”这些概念一知半解,但通过书中生动的图示和详细的解释,我终于能够彻底理解它们的工作原理。通过学习,我现在可以轻松地为网页元素添加各种交互行为,比如鼠标悬停时改变背景色,或者表单提交时进行验证。这让我觉得自己不再只是一个网页的旁观者,而是能够积极地参与到网页的构建中去,这种感觉非常棒。
我最近阅读的《JavaScript程序设计》这本书,给我留下了极其深刻的印象,尤其是在错误处理和调试方面,这本书提供了非常实用的指导。我一直以来都觉得写代码中最令人头疼的部分就是出现错误,然后不知道如何去定位和解决。然而,这本书详细地介绍了 JavaScript 中的各种错误类型,以及如何使用 `try...catch` 语句来优雅地捕获和处理这些错误。 书中关于调试的章节,更是让我获益匪浅。作者通过列举常见的调试技巧,比如使用 `console.log` 来输出变量的值,或者使用浏览器的开发者工具来设置断点,让我能够更有效地找出代码中的问题。我尝试着去调试自己写的代码,以前需要花费大量时间摸索的错误,现在能够很快地找到原因并加以修复。这极大地提升了我的编程效率和信心。
这本《JavaScript程序设计》真是让我耳目一新!一直以来,我对编程都抱有一种既好奇又有些畏惧的态度,总觉得那是一门高深莫测的学问。然而,这本书的出现,彻底颠覆了我之前的看法。从翻开第一页开始,我就被它清晰的逻辑和循序渐进的讲解方式深深吸引。作者并没有一开始就抛出复杂的概念和枯燥的代码,而是从最基础的“什么是JavaScript”开始,用通俗易懂的语言解释了它在现代 Web 开发中的重要性。我尤其喜欢它在引入变量、数据类型时所使用的生活化比喻,比如把变量比作一个贴有标签的盒子,可以用来存放不同类型的数据。这种方式让我能够快速理解抽象的概念,并且能够将其与现实世界联系起来。 随着阅读的深入,我发现这本书在讲解控制流语句时也做得非常出色。if-else 语句、for 循环、while 循环,这些在其他教材中可能显得有些枯燥的部分,在这本书里被赋予了鲜活的生命。作者通过大量的实例,例如如何用循环来生成一个重复的图案,或者如何用条件语句来判断用户的输入是否合法,让我亲身体验到这些语句的强大功能。更让我惊喜的是,书中还穿插了一些小型的编程挑战,鼓励读者动手实践。每一次完成一个挑战,都给我带来巨大的成就感,也让我对 JavaScript 的掌握更加牢固。
《JavaScript程序设计》这本书,可以说是为我量身打造的入门指南。我一直认为编程是一件非常困难的事情,充满了复杂的术语和晦涩的代码,直到我遇到了这本书。作者用一种非常友好的方式,将 JavaScript 的核心概念逐一呈现。我特别欣赏它在介绍函数时所采用的方法,它并没有直接丢给我一堆函数签名和参数列表,而是先从“为什么需要函数”这个问题入手,解释了函数在代码复用和模块化方面的作用。 书中对于参数传递、返回值这些概念的阐述也十分到位。我以前总觉得函数就是一个黑盒子,输入什么就输出什么,但通过这本书,我明白了函数内部的逻辑是如何运作的,以及如何通过参数来控制函数的行为。我尝试着自己编写一些简单的函数,比如一个计算两个数字之和的函数,或者一个将字符串首字母大写的函数。每一次成功运行,都让我对 JavaScript 的理解更深一层。
《JavaScript程序设计》这本书,对于我来说,不仅仅是一本教材,更像是一次与编程智慧的深度对话。书中对于异步编程的讲解,是我之前一直感到困惑的地方。我曾经对回调函数嵌套、`setTimeout` 的延迟执行等概念感到一头雾水,但这本书通过非常形象的比喻和清晰的逻辑,将这些复杂的概念一一拆解。 我尤其欣赏书中对 `Promise` 的介绍。它让我明白如何以更清晰、更易于管理的方式来处理异步操作,避免了“回调地狱”的出现。通过学习,我能够编写出更具可读性和可维护性的异步代码。这对于我理解现代 Web 应用中常见的异步操作,比如网络请求、定时任务等,起到了至关重要的作用。
我最近沉浸在《JavaScript程序设计》这本书的世界里,感觉自己像是在学习一门全新的语言,但又不像学习外语那样生涩。它让我理解了JavaScript的“语法糖”,比如箭头函数和模板字符串,这些特性让代码变得更加简洁和易读。我以前写代码的时候,总觉得有些地方可以写得更精炼,但不知道如何下手,这本书正好填补了我的知识空白。 书中关于模块化的讲解也让我印象深刻。我明白了如何将大型项目分解成小的、可管理的模块,并通过 `import` 和 `export` 来实现代码的复用和组织。这对于我将来参与更复杂的项目非常有帮助。我尝试着将我之前写的一些零散的代码块组织成模块,发现代码结构变得更加清晰,也更容易进行维护和扩展。
《JavaScript程序设计》这本书,让我体会到了编程的乐趣,尤其是在涉及算法和数据结构的部分,它提供了一个非常好的起点。我一直对如何更高效地解决问题感到好奇,这本书中的一些基础算法讲解,比如排序算法和查找算法,让我看到了计算机解决问题的不同思路。 虽然书中并没有深入探讨复杂的算法理论,但它提供的基础知识,足以让我对算法有一个初步的认识。我明白了为什么在处理大量数据时,选择合适的算法能够极大地提高程序的效率。这让我开始思考,在编写代码时,不仅仅要关注代码是否能够运行,还要关注它是否高效。
我最近读完的《JavaScript程序设计》一书,可以说是为我打开了编程世界的一扇新窗户。之前我对 JavaScript 的印象,仅仅停留在“能够让网页动起来”的层面,但这本书让我看到了它更深层的魅力和潜力。书中关于对象和原型链的讲解,是我之前从未接触过的概念,但作者通过清晰的比喻和循序渐进的步骤,让我逐步理解了这些核心概念。 我尤其喜欢书中对于“对象”的描述,它将对象比作现实世界中的实体,拥有属性(特征)和方法(行为)。通过学习,我能够创建自己的对象,为它们添加属性和方法,并能够通过这些对象来组织和管理数据。而关于原型链的讲解,虽然一开始有些挑战性,但随着深入阅读,我逐渐领悟到它在 JavaScript 中实现继承和共享代码的重要作用。这本书让我体会到,JavaScript 并非只是简单的脚本语言,而是拥有强大而灵活的面向对象特性的编程语言。
读完《JavaScript程序设计》这本书,我最大的感受就是,原来编程并非遥不可及。它让我看到了JavaScript在现代Web开发中的巨大潜力,尤其是在前端框架和库的应用方面。书中虽然没有直接讲解某个具体的框架,但它所教授的核心JavaScript知识,是理解和使用任何框架的基础。 我明白了,无论框架如何变化,底层的JavaScript语法和概念是始终不变的。这本书为我打下了坚实的基础,让我有信心去学习和掌握更高级的前端技术。我感到自己不再只是一个旁观者,而是能够真正地参与到Web开发的乐趣中来。
《JavaScript程序设计》这本书,对于我这样一个初学者来说,无疑是一份宝贵的财富。它让我对 JavaScript 有了一个系统而全面的认识,尤其是在数据结构方面,这本书的讲解非常细致。我之前对于数组的理解仅限于“一堆数据的集合”,但这本书让我深入了解了数组的各种操作方法,比如 `push`、`pop`、`shift`、`unshift`,以及如何使用 `splice` 和 `slice` 来实现更复杂的数据增删改查。 更令我惊喜的是,书中还详细介绍了对象的字面量表示法以及构造函数的使用。这让我明白如何更高效地创建和管理复杂的数据结构。我尝试着利用这些知识来组织一些实际应用中的数据,比如一个用户信息的列表,或者一个商品列表。通过本书的学习,我能够用更规范、更高效的方式来处理数据,为后续更复杂的编程打下了坚实的基础。