| 作者 |
| 埃里克·S. 罗伯茨 马尔奇·哈弗贝克 |
| 丛书名 |
| “世界名校公开课” |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782012111510 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------斯坦福程序设计入门课:JavaScript实现--------------------------- 本书通过使用一门叫JavaScript的语言,教会你如何编写程序,引导你走上奇妙的计算机科学的旅程。JavaScript语言是基于Web的应用程序的核心语言。书中所有示例代码都可以在任何浏览器上运行,包括你手机上的浏览器。虽然本书是使用JavaScript来演示,然而,更重要的是,本书着重讲解的是编程基本原则,其中的道理可以用在任何其他语言中。本书旨在用于大学课程中的第一门编程课。它覆盖了传统计算机科学首门课程(通常称为CS1)的所有内容。 ---------------------------JavaScript编程精解(原书第3版)--------------------------- 本书第3版深入研究JavaScript语言,详细介绍如何编写漂亮、高效的代码。更新的内容包括:类表示法、箭头函数、迭代器、异步函数、模板字符串和块作用域等功能的全新内容。 本书通过大量示例进行讲解,并提供大量习题和完整项目案例,为读者提供了编写自己的程序的实践经验。书中不仅介绍JavaScript语言的基本结构以及控制结构、函数和数据结构,还详细介绍错误处理和错误修复、模块化和异步编程,以及Web浏览器编程。 |
| 目录 |
---------------------------斯坦福程序设计入门课:JavaScript实现--------------------------- 译者序 写给学生的话 写给教师的话 致 谢 第1章 轻松入门 …… 1 1.1 Karel介绍 …… 2 1.1.1 Karel的编程 …… 2 1.1.2 Karel的世界 …… 3 1.1.3 Karel的内置函数 …… 3 1.2 教Karel解决问题 …… 4 1.2.1 开始起步 …… 4 1.2.2 定义函数 …… 5 1.2.3 完善程序 …… 6 1.2.4 使用库函数 …… 7 1.2.5 分解策略 …… 7 1.3 控制语句 …… 9 1.3.1 条件语句 …… 9 1.3.2 循环语句 …… 11 1.3.3 解决通用问题 …… 13 1.4 逐步求精法 …… 15 1.4.1 一个逐步求精法的练习 …… 15 1.4.2 自上而下设计的原则 …… 15 1.4.3 求精第一个子问题 …… 16 1.4.4 编写下一层代码 …… 17 1.4.5 完成 …… 18 1.5 Karel世界里的算法 …… 19 总结 …… 20 复习题 …… 22 练习题 …… 22 第2章 JavaScript简介 …… 34 2.1 数据和类型 …… 35 2.2 数值数据 …… 35 2.2.1 JavaScript中数字的表示 …… 36 2.2.2 算术表达式 …… 36 2.2.3 优先级 …… 38 2.3 变量 …… 38 2.3.1 变量声明 …… 39 2.3.2 赋值 …… 39 2.3.3 自增和自减操作符 …… 40 2.3.4 命名约定 …… 41 2.3.5 常量 …… 41 2.3.6 顺序计算 …… 42 2.4 函数 …… 42 2.4.1 用JavaScript实现函数 …… 43 2.4.2 库函数 …… 45 2.5 字符串数据 …… 46 2.5.1 字符串操作 …… 47 2.5.2 编写简单的字符串函数 …… 48 2.6 在浏览器中运行JavaScript …… 49 2.6.1 “Hello World”程序 …… 49 2.6.2 JavaScript和Web …… 51 2.6.3 JavaScript程序的HTML模板 …… 51 2.7 测试和调试 …… 53 2.7.1 防御式编程 …… 54 2.7.2 成为一名优秀的调试者 …… 54 2.7.3 编程的各个阶段 …… 54 2.7.4 心理障碍的一个例子 …… 57 2.7.5 编写有效的测试程序 …… 58 2.8 软件维护 …… 60 总结 …… 61 复习题 …… 63 练习题 …… 65 第3章 控制语句 …… 68 3.1 布尔数据 …… 69 3.1.1 关系操作符 …… 69 3.1.2 逻辑操作符 …… 70 3.1.3 短路求值 …… 72 3.2 if语句 …… 73 3.2.1 if语句的其他形式 …… 74 3.2.2 “:”操作符 …… 75 3.3 switch语句 …… 76 3.4 while语句 …… 78 3.5 for语句 …… 81 3.5.1 for和while的关系 …… 84 3.5.2 嵌套的for语句 …… 84 3.6 算法编程 …… 86 3.6.1 早期的平方根算法 …… 87 3.6.2 寻找最大的公约数 …… 89 3.6.3 欧几里得算法 …… 90 3.7 避免使用模糊的真假值 …… 92 总结 …… 93 复习题 …… 94 练习题 …… 95 第4章 简单图形 …… 100 4.1 图形版“Hello World” …… 101 4.2 类、对象和方法 …… 102 4.2.1 创建对象 …… 102 4.2.2 向对象发送消息 …… 103 4.2.3 引用 …… 104 4.2.4 封装 …… 105 4.3 图形对象 …… 105 4.3.1 GRect类 …… 105 4.3.2 GOval类 …… 108 4.3.3 GLine类 …… 109 4.3.4 GLabel类 …… 109 4.4 图形窗口 …… 114 4.5 创建图形化应用程序 …… 115 4.5.1 指定坐标和大小 …… 115 4.5.2 使用简单的分解策略 …… 117 4.5.3 在图形应用程序中使用控制语句 …… 119 4.5.4 返回图形对象的函数 …… 121 总结 …… 122 复习题 …… 123 练习题 …… 124 第5章 函数 …… 132 5.1 快速回顾函数 …… 133 5.1.1 函数定义的语法 …… 133 5.1.2 传递参数 …… 134 5.1.3 可选参数 …… 134 5.1.4 谓词函数 …… 135 5.2 程序库 …… 136 5.2.1 创建自己的程序库 …… 136 5.2.2 信息隐藏原则 …… 137 5.2.3 接口概念 …… 138 5.3 一个支持随机选择的程序库 …… 138 5.3.1 设计RandomLib.js库的接口 …… 139 5.3.2 实现RandomLib.js库 …… 140 5.3.3 使用RandomLib.js库 …… 142 5.4 函数调用的机制 …… 144 5.4.1 调用函数的步骤 …… 144 5.4.2 组合函数 …… 145 5.4.3 跟踪组合函数 …… 146 5.5 递归函数 …… 149 5.5.1 fact的递归公式 …… 149 5.5.2跟踪递归过程 …… 150 5.5.3 递归的信仰之跃 …… 153 5.5.4 斐波那契函数 …… 153 5.5.5 计算斐波那契序列中的项 …… 154 5.5.6 在递归实现中获得信心 …… 155 5.5.7 递归实现的效率 …… 155 总结 …… 158 复习题 …… 159 练习题 …… 160 第6章 编写交互式程序 …… 164 6.1 一等函数 …… 165 6.1.1 将函数声明为数据值 …… 165 6.1.2 传递函数作为参数 …… 166 6.2 一个简单的交互式示例 …… 167 6.3 控制对象的属性 …… 169 6.4 响应鼠标事件 …… 170 6.4.1 简单的画线程序 …… 171 6.4.2 在画布上拖动对象 …… 173 6.5 基于计时器的动画 …… 175 6.5.1 setTimeout和setInterval函数 …… 175 6.5.2 动画的简单示例 …… 176 6.5.3 跟踪动画的状态 …… 177 6.6 扩展图形库 …… 179 6.6.1 GArc类 …… 179 6.6.2 GPolygon类 …… 181 6.6.3 GCompound类 …… 184 总结 …… 186 复习题 …… 188 练习题 …… 189 第7章 字符串 …… 197 7.1 二进制表示法 …… 198 7.1.1 二进制记数法 …… 198 7.1.2 将整数存储为位序列 …… 199 7.1.3 十六进制记数法 …… 200 7.1.4 表示非数值数据 …… 201 7.1.5 表示字符 …… 202 7.2 字符串操作 …… 203 7.2.1 确定字符串的长度 …… 205 7.2.2 从字符串中选择字符 …… 205 7.2.3 提取字符串的一部分 …… 206 7.2.4 在字符串中搜索 …… 206 7.2.5 大小写转换 …… 207 7.2.6 startsWith、endsWith和trim方法 …… 207 7.2.7 数字和字符串之间的转换 …… 208 7.3 字符分类 …… 209 7.4 字符串常见的代码模式 …… 210 7.4.1 遍历字符串中的字符 …… 210 7.4.2 拼接字符串 …… 211 7.4.3 遍历和拼接的组合模式 …… 212 7.5 字符串应用程序 …… 212 7.5.1 检查回文 …… 212 7.5.2 生成缩写词 …… 213 7.5.3 将英语翻译成Pig Latin …… 214 7.5.4 实现简单的密码 …… 216 7.6 从控制台读取数据 …… 218 总结 …… 220 复习题 …… 221 练习题 …… 222 第8章 数组 …… 229 8.1 数组介绍 …… 230 8.1.1 JavaScript数组表示法 …… 230 8.1.2 数组的元素选择 …… 231 8.1.3 数组作为引用传递 …… 233 8.1.4 访问数组边界之外的元素 …… 234 8.2 数组操作 …… 235 8.2.1 添加和移除数组元素 …… 236 8.2.2 重新给数组元素排序的方法 …… 239 8.2.3 字符串和数组互相转换 …… 240 8.2.4 ArrayLib.js库 …… 241 8.3 使用数组制表 …… 242 8.4 从文件中读取文本 …… 245 8.5 多维数组 …… 246 8.6 图像处理 …… 247 8.6.1 GImage类 …… 247 8.6.2 确定图像的属性 …… 248 8.6.3 图像的表示 …… 250 8.6.4 使用GImage类操作图像 …… 250 总结 …… 254 复习题 …… 254 练习题 …… 256 第9章 对象 …… 261 9.1 JavaScript里的对象 …… 262 9.1.1 对象用作记录 …… 262 9.1.2 创建对象 …… 263 9.1.3 选择属性 …… 263 9.1.4 JavaScript对象表示法 …… 264 9.2 把对象当作映射来使用 …… 264 9.2.1 机场编码映射为城市名称 …… 265 9.2.2 初始化一个映射 …… 265 9.2.3 遍历映射中的键 …… 266 9.3 点的表示 …… 267 9.3.1 创建点的策略 …… 268 9.3.2 给Point对象添加方法 …… 269 9.3.3 toString方法 …… 270 9.3.4 在程序里面使用点 …… 272 9.4 有理数的表示 …… 274 9.4.1 定义新类的一般策略 …… 275 9.4.2 站在客户端视角 …… 276 9.4.3 指定Rational类的私有状态 …… 276 9.4.4 为Rational类定义工厂方法 …… 276 9.4.5 为Rational类定义方法 …… 277 9.4.6 实现Rational类 …… 278 9.4.7 定义类方法 …… 280 9.5 把对象连接起来 …… 280 总结 …… 283 复习题 …… 284 练习题 …… 285 第10章 设计数据结构 …… 289 10.1 抽象数据类型 …… 289 10.2 实现token扫描器 …… 290 10.2.1 客户端想从token扫描器中得到什么 …… 290 10.2.2 JSTokenScanner类 …… 294 10.3 效率和表示 …… 296 10.3.1 在不使用封装的情况下实现词汇表 …… 296 10.3.2 基于数组的封装实现 …… 297 10.3.3 效率的实证测量 …… 298 10.3.4 使用映射实现词汇表 …… 299算法 …… 301 10.3.6 分治算法 …… 304 10.4 表示真实世界的数据 …… 305 总结 …… 310 复习题 …… 310 练习题 …… 311 第11章 继承 …… 319 11.1 类层次结构 …… 320 11.2 定义雇员的类层次结构 …… 322 11.3 扩展图形类 …… 325 11.3.1 扩展GPolygon类 …… 326 11.3.2 扩展GCompound类 …… 327 11.4 分解和继承 …… 328 11.5 继承的替代方案 …… 332 总结 …… 333 复习题 …… 333 练习题 …… 334 第12章 JavaScript与Web …… 341 12.1 一个简单的交互式示例 …… 342 12.2 HTML概览 …… 343 12.2.1 在Web页面中展示文本 …… 345 12.2.2 显示图片 …… 347 12.2.3 超链接 …… 348 12.3 使用CSS …… 350 12.3.1 CSS声明 …… 350 12.3.2 为元素指定样式 …… 352 12.3.3 设置外边距、边框、内边距和大小 …… 353 12.4 连接JavaScript和HTML …… 355 12.4.1 文档对象模型 …… 355 12.4.2 给HTML元素添加事件监听器 …… 357 12.4.3 可折叠列表 …… 359 12.5 将数据存储在index.html文件中 …… 363 12.5.1 使用XML表示数据 …… 364 12.5.2 打造一个教学机 …… 364 12.5.3 更改应用程序领域 …… 368 总结 …… 369 复习题 …… 370 练习题 …… 371 ---------------------------JavaScript编程精解(原书第3版)--------------------------- 本书赞誉 译者序 前言 第一部分 语言 第1章 值、类型和运算符 2 1.1 值 2 1.2 数字 3 1.2.1 算术 4 1.2.2 特殊数字 4 1.3 字符串 4 1.4 一元运算符 6 1.5 布尔值 6 1.5.1 比较 6 1.5.2 逻辑运算符 7 1.6 空值 8 1.7 自动类型转换 8 1.8 小结 10 第2章 程序结构 11 2.1 表达式和语句 11 2.2 绑定 12 2.3 绑定名称 13 2.4 环境 13 2.5 函数 14 2.6 console.log函数 14 2.7 返回值 15 2.8 控制流 15 2.9 条件执行 15 2.10 while和do循环 17 2.11 缩进代码 18 2.12 for循环 19 2.13 跳出循环 19 2.14 简洁地更新绑定 20 2.15 使用switch调度值 20 2.16 首字母大写 21 2.17 注释 22 2.18 小结 22 2.19 习题 22 第3章 函数 24 3.1 定义一个函数 24 3.2 绑定和作用域 25 3.3 作为值的函数 27 3.4 声明表示法 27 3.5 箭头函数 28 3.6 调用栈 28 3.7 可选参数 29 3.8 闭包 30 3.9 递归 31 3.10 函数的增长方式 34 3.11 函数和副作用 36 3.12 小结 36 3.13 习题 37 第4章 数据结构:对象和数组 38 4.1 松鼠人 38 4.2 数据集 39 4.3 属性 39 4.4 方法 40 4.5 对象 41 4.6 可变性 43 4.7 松鼠人的日志 44 4.8 计算相关性 45 4.9 数组循环 46 4.10 最终分析 47 4.11 其他数组方法 48 4.12 字符串及其属性 50 4.13 剩余参数 51 4.14 Math对象 52 4.15 解构 53 4.16 JSON 54 4.17 小结 54 4.18 习题 55 第5章 高阶函数 57 5.1 抽象化 58 5.2 提取重复的内容 58 5.3 高阶函数 59 5.4 语言字符集数据集 60 5.5 过滤数组 61 5.6 用map转换 62 5.7 用reduce汇总 62 5.8 组合性 63 5.9 字符串和字符代码 64 5.10 文本识别 66 5.11 小结 67 5.12 习题 67 第6章 对象的秘密 69 6.1 封装 69 6.2 方法 70 6.3 原型 71 6.4 类 72 6.5 类表示法 73 6.6 覆盖派生属性 74 6.7 映射 75 6.8 多态性 76 6.9 符号 76 6.10 迭代器接口 78 6.11 读取器、设置器和静态 79 6.12 继承 81 6.13 instanceof运算符 82 6.14 小结 82 6.15 习题 83 第7章 项目:机器人 85 7.1 村庄Meadowfield 85 7.2 任务 86 7.3 持久化数据 88 7.4 模拟 89 7.5 邮车的路线 90 7.6 寻找路线 91 7.7 习题 92 第8章 缺陷和错误 94 8.1 语言 94 8.2 严格模式 95 8.3 类型 96 8.4 测试 96 8.5 调试 97 8.6 错误传播 98 8.7 异常 99 8.8 异常后清理 100 8.9 选择性捕获 102 8.10 断言 103 8.11 小结 104 8.12 习题 104 第9章 正则表达式 106 9.1 创建正则表达式 106 9.2 匹配测试 107 9.3 字符集 107 9.4 模式的重复部分 108 9.5 对子表达式分组 109 9.6 匹配和组 109 9.7 Date类 110 9.8 单词和字符串边界 111 9.9 选择模式 112 9.10 匹配机制 112 9.11 回溯 113 9.12 replace方法 114 9.13 贪心 116 9.14 动态创建RegExp对象 117 9.15 search方法 117 9.16 lastIndex属性 118 9.17 解析INI文件 119 9.18 国际字符 121 9.19 小结 122 9.20 习题 123 第10章 模块 124 10.1 模块作为构件 124 10.2 包 125 10.3 简易模块 126 10.4 将数据作为代码执行 127 10.5 CommonJS 127 10.6 ECMAScript模块 129 10.7 构建和捆绑 130 10.8 模块设计 131 10.9 小结 132 10.10 习题 133 第11章 异步编程 134 11.1 异步 134 11.2 乌鸦技术 135 11.3 回调 136 11.4 promise 138 11.5 失败 139 11.6 构建网络很困难 140 11.7 promise集合 142 11.8 网络泛洪 142 11.9 消息路由 143 11.10 异步函数 145 11.11 生成器 147 11.12 事件循环 148 11.13 异步bug 149 11.14 小结 150 11.15 习题 150 第12章 项目:编程语言 152 12.1 解析 152 12.2 求解器 156 12.3 特殊形式 157 12.4 环境 158 12.5 函数 159 12.6 编译 160 12.7 作弊 161 12.8 习题 161 第二部分 浏览器 第13章 浏览器中的JavaScript 164 13.1 网络和互联网 164 13.2 Web 165 13.3 HTML 166 13.4 HTML和JavaScript 168 13.5 沙盒 168 13.6 兼容性和浏览器大战 169 第14章 文档对象模型 170 14.1 文档结构 170 14.2 树 171 14.3 标准 172 14.4 通过树结构 173 14.5 寻找元素 174 14.6 更改文档 175 14.7 创建节点 175 14.8 属性 177 14.9 布局 177 14.10 样式 179 14.11 层叠样式 180 14.12 查询选择器 181 14.13 定位和动画 182 14.14 小结 184 14.15 习题 184 第15章 处理事件 186 15.1 事件处理程序 186 15.2 事件和DOM节点 187 15.3 事件对象 188 15.4 传播 188 15.5 默认操作 189 15.6 按键事件 190 15.7 指针事件 191 15.7.1 鼠标点击 191 15.7.2 鼠标移动 192 15.7.3 触摸事件 193 15.8 滚动事件 194 15.9 焦点事件 195 15.10 加载事件 196 15.11 事件和事件循环 196 15.12 计时器 197 15.13 限频 198 15.14 小结 199 15.15 习题 199 第16章 项目:平台游戏 201 16.1 游戏 201 16.2 技术 202 16.3 关卡 202 16.4 读取关卡 203 16.5 演员 204 16.6 封装是一种负担 207 16.7 绘图 207 16.8 动作和碰撞 211 16.9 演员的更新 214 16.10 跟踪按键 215 16.11 运行游戏 216 16.12 习题 218 第17章 在画布上绘图 219 17.1 SVG 219 17.2 画布元素 220 17.3 线和面 221 17.4 路径 222 17.5 曲线 223 17.6 绘制饼图 225 17.7 文本 226 17.8 图片 227 17.9 转换 228 17.10 存储和清除转换 230 17.11 回到游戏 231 17.12 选择图形界面 236 17.13 小结 236 17.14 习题 237 第18章 HTTP和表单 239 18.1 协议 239 18.2 浏览器和HTTP 241 18.3 fetch 242 18.4 HTTP沙盒 243 18.5 欣赏HTTP 243 18.6 安全性和HTTPS 244 18.7 表单域 244 18.8 焦点 246 18.9 禁用域 247 18.10 表单整体 247 18.11 文本域 248 18.12 复选框和单选按钮 249 18.13 选择域 250 18.14 文件域 251 18.15 在客户端存储数据 252 18.16 小结 254 18.17 习题 255 第19章 项目:像素绘图程序 257 19.1 组件 257 19.2 状态 259 19.3 DOM的建立 260 19.4 画布 261 19.5 应用程序 263 19.6 绘图工具 264 19.7 保存和加载 267 19.8 撤销历史记录 269 19.9 让我们画吧 270 19.10 为什么这么难 271 19.11 习题 271 第三部分 Node 第20章 Node.js 276 20.1 背景 276 20.2 node命令 277 20.3 模块 277 20.4 使用NPM安装 278 20.4.1 包文件 279 20.4.2 版本 279 20.5 文件系统模块 280 20.6 HTTP模块 281 20.7 流 283 20.8 文件服务器 284 20.9 小结 288 20.10 习题 289 第21章 项目:技能分享网站 290 21.1 设计 290 21.2 长轮询 291 21.3 HTTP接口 292 21.4 服务器 293 21.4.1 路由器 293 21.4.2 提供文件服务 294 21.4.3 作为资源的讨论 295 21.4.4 长轮询支持 297 21.5 客户端 299 21.5.1 HTML 299 21.5.2 操作 299 21.5.3 展现组件 301 21.5.4 轮询 302 21.5.5 应用程序 303 21.6 习题 304 第22章 JavaScript性能 305 22.1 分阶段编译 305 22.2 图的布局 306 22.3 定义图 307 22.4 力导向布局 308 22.5 避免工作 310 22.6 分析器 312 22.7 函数内联 313 22.8 减少垃圾 314 22.9 垃圾收集 314 22.10 动态类型 315 22.11 小结 316 22.12 习题 317 附录 部分习题解答提示 318 |