产品特色
编辑推荐
适读人群 :网页设计、移动开发人员 移动时代,编程语言的王者非JavaScript莫属。《JavaScript开发实战》用一个完整的游戏贯穿全书,循序渐进地讲解了JavaScript编程。所有代码都可以在作者提供的网站上直接运行。作者是教师出身的程序员,深谙教学之道。读者一定会发现,阅读《JavaScript开发实战》,能用更少的时间学到更多的内容。随着你跟随作者编写的游戏越来越完整,你的JavaScript功夫也越来越高!
内容简介
《JavaScript开发实战》是一本 JavaScript 开发入门指导书,主要介绍了变量、对象、函数、数组、构造函数、方括号运算符、作用域、条件语句、模块、模型、视图、控制器、构建网页、控件、模板、数据加载等内容。书中涉及的概念都附有简短示例。此外,还有一个贯穿全书的持续示例 — 冒险游戏 The Crypt。读者可以在一个交互式网站上直接运行书中的代码。
作者简介
作者约翰·拉尔森是一名有30多年经验的程序员,精通JavaScript,也是一位经验丰富的教师。因此他深知读者在学习新知识、新技能过程中的困难,知道如何调动读者的积极性,帮助他们克服困难,并且善于用简洁的语言解释计算机语言的难点。
目录
译者序
序言
前言
致谢
导读
速览
第一部分 控制台上的核心概念
第 1 章 编程、JavaScript 和 JS Bin
1.1 编程
1.2 JavaScript
1.3 在实践和思考中学习
1.4 JS Bin
1.4.1 JS Bin 面板
1.4.2 在 JS Bin 上运行代码清单
1.4.3 输出到控制台
1.4.4 代码注释
1.4.5 Further Adventures——进阶练习
1.4.6 错误消息
1.4.7 行号
1.4.8 获取账户
1.5 游戏 The Crypt——本书的一个持续示例
1.5.1 运行 The Crypt
1.5.2 创建 The Crypt 的具体步骤
1.6 更多示例和练习
1.7 浏览器的兼容性
1.8 本章小结
第 2 章 变量:在程序中存储数据
2.1 什么是变量
2.2 变量的声明和赋值
2.2.1 变量声明
2.2.2 变量赋值
2.2.3 一步实现变量声明和赋值
2.2.4 先运算再赋值
2.3 选择合适的变量名
2.3.1 关键字和保留字
2.3.2 变量的命名规则
2.3.3 骆驼式命名法(camelCase)
2.3.4 使用描述性变量名
2.4 The Crypt——玩家变量
2.5 本章小结
第 3 章 对象:数据分组
3.1 变量需要分组
3.2 创建对象
3.2.1 创建一个空对象
3.2.2 属性“键?值对”
3.3 访问对象的属性
3.4 更新对象的属性
3.5 其他示例
3.5.1 撰写一条博客
3.5.2 创建一个日历
3.5.3 天气怎么样?
3.5.4 一个小测验
3.5.5 创建自己的程序
3.6 游戏 The Crypt——玩家对象
3.7 本章小结
第 4 章 函数:按需执行代码
4.1 重复问题
4.1.1 将对象的属性作为文本进行显示
4.1.2 加税算出总成本
4.2 定义函数和调用函数
4.2.1 定义新函数
4.2.2 函数表达式和函数声明
4.2.3 使用函数
4.2.4 使用函数的步骤
4.3 减少重复
4.3.1 函数可用于将对象的属性作为文本进行显示
4.3.2 加税并显示总成本的函数
4.4 使代码易于阅读和更新
4.4.1 更新 showMovieInfo 函数
4.5 游戏 The Crypt——显示玩家的信息
4.5.1 用函数显示玩家的信息
4.6 本章小结
第 5 章 参数:将数据传递给函数
5.1 函数重用
5.2 将信息传递给函数
5.2.1 将实参传递给函数
5.2.2 将多个实参传递给一个函数
5.3 The Crypt——显示玩家信息
5.3.1 显示玩家的姓名
5.3.2 显示玩家的健康值
5.3.3 显示玩家的位置
5.3.4 合并显示玩家的信息
5.4 本章小结
第 6 章 返回值:从函数获取数据
6.1 从函数返回数据
6.1.1 用返回值替代函数调用
6.1.2 关键字 return
6.1.3 使用参数来确定返回值
6.2 在控制台提示符下进行实验
6.2.1 调用函数
6.2.2 声明新的变量
6.3 The Crypt——构建玩家信息字符串
6.3.1 为玩家的姓名、健康值和位置构建字符串
6.3.2 用一个函数显示玩家的信息——把几个函数集合在一起
6.4 本章小结
第 7 章 对象参数:将对象传递给函数
7.1 使用对象作为参数
7.1.1 访问对象参数的属性
7.1.2 给对象参数添加属性
7.2 从函数返回对象
7.2.1 构建行星——对象创建函数
7.2.2 二维空间的点
7.3 方法——设置函数作为对象的属性
7.3.1 命名空间——将相关函数组织到一起
7.3.2 Math 方法
7.3.3 String 方法
7.3.4 spacer——将更多的方法收入命名空间
7.3.5 进一步探索命名空间
7.4 The Crypt——将玩家对象作为参数
7.5 本章小结
第 8 章 数组:将数据存入列表
8.1 创建数组并访问元素
8.1.1 创建数组
8.1.2 访问数组元素
8.2 数组方法
8.2.1 添加和删除元素
8.2.2 截取和拼接数组
8.2.3 使用 forEach 访问每一个元素
8.3 The Crypt——玩家的物品数组
8.4 本章小结
第 9 章 构造函数:构建带有函数的对象
9.1 使用函数构建对象
9.1.1 添加属性
9.1.2 添加方法
9.2 使用构造函数构建对象
9.2.1 构造函数
9.2.2 使用 Planet 构造函数创建一个新世界
9.2.3 使用 instanceof 运算符区分对象
9.3 建造大师——两个构造函数的示例
9.4 The Crypt——为玩家提供掠夺地
9.4.1 构建 Place 构造函数——名称标题和描述
9.4.2 构建 Place 构造函数——囤积物品
9.4.3 构建 Place 构造函数——探索出口
9.5 The Crypt——简化玩家创建代码
9.5.1 整理玩家属性
9.5.2 将函数转换为方法
9.5.3 为玩家分配位置
9.5.4 使用 null 作为对象的占位符
9.6 本章小结
第 10 章 方括号运算符:灵活的属性名称
10.1 用方括号运算符替代圆点运算符
10.1.1 使用方括号——人的姓名作为键
10.1.2 最大限度地利用方括号运算符——单词统计
10.2 The Crypt——使游戏出口更加刺激好玩
10.2.1 使用对象存放出口
10.2.2 创建一个添加并显示出口的函数
10.2.3 设置每个场所对象的出口集合
10.2.4 将 exits 对象添加到完整的 Place 构造函数
10.2.5 测试 Place 构造函数
10.3 The Crypt——开始游戏!
10.3.1 刷新显示——render
10.3.2 探索地图——go
10.3.3 收集物品——get
10.3.4 设计一个更大的冒险游戏——Jahver 的船
10.4 下一步目标
10.5 本章小结
第二部分 组 织 代 码
第 11 章 作用域:隐藏信息
11.1 全局变量的危险性
11.1.1 访问所有区域——偷窥和篡改
11.1.2 访问所有区域——借助于实现
11.1.3 命名冲突
11.1.4 难以查找的错误
11.2 局部变量的优势
11.3 接口——控制访问权限并提供可用功能
11.3.1 使用一个函数来隐藏变量
11.3.2 使用 getCount 创建多个独立计数器
11.3.3 用构造函数创建多个独立的计数器
11.4 创建一个简单的测验应用程序
11.4.1 将对象用作一个命名空间
11.4.2 隐藏问题数组
11.5 The Crypt——隐藏玩家信息
11.5.1 当前的 Player 构造函数——全部内容都公开
11.5.2 更新版的 Player 构造函数——某些变量被隐藏
11.6 The Crypt——隐藏地点信息
11.7 The Crypt——用户交互
11.7.1 接口——go 和 get
11.7.2 隐藏程序的实现
11.8 本章小结
第 12 章 条件:有选择地运行代码
12.1 有条件地执行代码
12.1.1 严格相等运算符
12.1.2 if 语句
12.1.3 else 子句
12.1.4 隐藏函数中的密码数字
前言/序言
相比于市场上其他 JavaScript 编程书籍,《JavaScript开发实战》的精彩之处在于将 JavaScript 理论与编程实践完美结合。这得益于《JavaScript开发实战》作者既是一位资深教师又具有丰富的编程经验。他所秉持的教学理念是在实战中而非书本中学习编程。在《JavaScript开发实战》中,该理念体现为没有繁杂的术语和晦涩的理论,取而代之的是简洁明快的语言和轻松诙谐的示例。正是在这些示例的一步步更新和完善的过程中,读者可以切身体会 JavaScript 编程的乐趣以及油然而生的成就感。
《JavaScript开发实战》的另外一个亮点在于所有代码都可以在免费的 JS Bin 沙盒中运行,在这个允许犯错的安全空间里,读者可以亲自创建、扩展、调试和修改代码,这种真枪实弹的编程体验一定比纸上谈兵的学习方法更加高效和有趣,对编程学习者而言是不可多得的好机会。读者也可访问 www.golden-book.com 或访问原书网址(见导读)下载随书代码。
总之, 这是一本能够让读者轻松愉快地掌握 JavaScript 基础知识, 并不断提高编程技能的书,同时这《JavaScript开发实战》还为读者深入探索 JavaScript 指明了方向。
JavaScript 开发实战 前言 在当今数字化浪潮汹涌澎湃的时代,Web 开发已成为连接信息、服务与用户的关键桥梁。而 JavaScript,作为一门集强大功能与灵活表现力于一身的脚本语言,早已成为构建现代 Web 应用不可或缺的核心技术。从前端的交互式界面到后端的服务器逻辑,JavaScript 的身影无处不在,深刻地影响着我们浏览网页、使用应用乃至与数字世界互动的方式。 本书《JavaScript 开发实战》旨在引领读者深入理解 JavaScript 的核心概念,掌握其在实际开发中的应用技巧,并最终能够独立构建出高质量、高性能的 Web 应用。本书不同于泛泛而谈的理论讲解,而是以“实战”为导向,力求通过详实的代码示例、清晰的逻辑分析以及对常见开发场景的深入剖析,帮助读者将理论知识转化为实践能力。 我们相信,真正的技术掌握源于亲手实践,源于在解决一个个实际问题中不断积累的经验。《JavaScript 开发实战》正是基于这一理念,力图为所有渴望提升 JavaScript 开发技能的开发者,无论是初学者还是有一定经验的开发者,提供一条清晰、高效的学习路径。 第一部分:JavaScript 基础精讲与进阶 第一章:JavaScript 语言核心透视 本章将带领读者全面审视 JavaScript 的语言本质,深入理解其作为一门动态、弱类型、基于原型的脚本语言的独特之处。我们将从变量的声明与作用域开始,细致讲解 `var`、`let` 和 `const` 的区别及其对代码结构的影响。理解作用域是编写健壮代码的基石,我们将通过生动的例子阐释全局作用域、函数作用域以及块级作用域的差异,并讲解闭包的概念及其在内存管理和数据封装中的妙用。 接着,我们将聚焦于 JavaScript 的数据类型。除了基本的数据类型(字符串、数字、布尔值、`null`、`undefined`、Symbol、BigInt)之外,我们将深入探讨对象(Object)的本质,包括其创建方式、属性访问、原型链机制以及继承的实现。理解原型链对于深入掌握 JavaScript 的面向对象特性至关重要。 函数作为 JavaScript 的一等公民,其重要性不言而喻。本章将详细讲解函数的定义方式(函数声明、函数表达式、箭头函数),函数的参数传递(按值传递与按引用传递),以及 `this` 关键字在不同上下文中的指向问题,这是许多初学者容易混淆的难点。我们将通过大量的代码演示,帮助读者彻底理清 `this` 的绑定规则。 此外,我们还将探讨 JavaScript 的运算符(算术运算符、比较运算符、逻辑运算符、赋值运算符、位运算符等)及其优先级,以及流程控制语句(`if...else`、`switch`、`for`、`while`、`do...while`)的使用。这些是构建程序逻辑的基础。 第二章:深入理解异步编程模型 在现代 Web 应用中,异步操作无处不在,从网络请求到用户交互,都需要高效的异步处理机制。本章将系统地讲解 JavaScript 的异步编程模型。我们将从最基础的回调函数(Callback)讲起,分析其在处理异步操作时的局限性,例如“回调地狱”。 随后,我们将引入 Promise 对象,详细讲解其三种状态(pending、fulfilled、rejected)、`then()`、`catch()`、`finally()` 方法的使用,以及如何通过 Promise 链式调用来管理异步操作,使其代码更加清晰可读。我们将演示如何使用 `Promise.all()`、`Promise.race()`、`Promise.any()`、`Promise.allSettled()` 等静态方法来处理多个 Promise,从而应对更复杂的异步场景。 最后,本章将重点讲解 `async/await` 语法糖。这将是异步编程的终极解决方案,它使得异步代码的编写方式与同步代码几乎无异,极大地提升了代码的可读性和可维护性。我们将演示如何使用 `async` 函数和 `await` 关键字来优雅地处理 Promise,并结合错误处理机制,构建出健壮的异步应用。 第三章:DOM 操作与事件处理实战 Web 应用的交互性主要体现在对文档对象模型(DOM)的操作以及对用户事件的响应。本章将聚焦于 DOM API 的深度应用。我们将讲解如何使用 `getElementById`、`querySelector`、`querySelectorAll` 等方法来获取 DOM 元素,以及如何通过 `createElement`、`appendChild`、`insertBefore`、`removeChild` 等方法来创建、插入和删除 DOM 节点。 元素的属性操作、样式修改以及内容的更新也将是本章的重点。我们将演示如何使用 `setAttribute`、`getAttribute`、`removeAttribute`、`classList` API 来管理元素的属性和类名,以及如何通过 `textContent`、`innerHTML`、`style` 属性来改变元素的文本内容和样式。 事件处理是实现 Web 交互的关键。本章将详细讲解 DOM 事件流(事件捕获与事件冒泡),如何使用 `addEventListener` 方法来注册事件监听器,以及如何通过事件对象(Event Object)来获取事件的相关信息,例如鼠标坐标、键盘按键等。我们还将讲解事件委托(Event Delegation)的原理与实践,这是一种优化事件处理性能的常用技巧。 第四章:浏览器存储与网络通信 在 Web 应用开发中,数据的存储与传输是必不可少的环节。本章将深入探讨浏览器提供的存储机制。我们将详细讲解 `localStorage` 和 `sessionStorage` 的使用,理解它们在数据持久化和会话管理上的区别与应用场景。 接着,我们将介绍 Cookie 的概念、属性及使用方法,并分析其在身份验证和用户偏好设置中的作用。 在网络通信方面,本章将重点讲解 XMLHttpRequest(XHR)对象,这是实现客户端与服务器之间数据交互的传统方式。我们将演示如何使用 XHR 对象发送 GET 和 POST 请求,处理服务器响应,以及如何处理请求的进度和状态。 最后,我们将重点介绍更加现代化的 Fetch API。Fetch API 提供了一种更简洁、更强大的方式来发送网络请求,支持 Promise,并且可以轻松处理 JSON、FormData 等请求体,以及响应的各种格式。我们将通过丰富的示例,展示 Fetch API 在实际开发中的强大能力。 第二部分:现代 JavaScript 框架与工具链 第五章:模块化开发与构建工具 随着项目规模的不断增大,代码的组织和管理变得尤为重要。本章将介绍 JavaScript 的模块化开发概念。我们将讲解 CommonJS、AMD 和 ES Modules(ESM)等不同的模块化规范,并重点介绍 ES Modules 作为 ECMAScript 标准的模块化解决方案,如何在现代浏览器和 Node.js 环境中被支持和使用。 为了能够实际应用模块化开发,并对代码进行打包、压缩、转译等优化,构建工具是必不可少的。本章将介绍 Webpack、Rollup 和 Vite 等主流的 JavaScript 构建工具。我们将重点讲解 Webpack 的核心概念,例如 Entry、Output、Loaders 和 Plugins,并通过实际案例展示如何配置 Webpack 来打包前端项目。同时,我们也会简要介绍 Rollup 在库开发上的优势,以及 Vite 以其极快的冷启动和热更新速度而备受青睐的原因。 第六章:Vue.js 框架入门与核心特性 Vue.js 作为一款优秀且易于上手的渐进式 JavaScript 框架,已成为众多 Web 应用的首选。本章将带领读者从零开始学习 Vue.js。我们将讲解 Vue 实例的创建、数据绑定(插值、v-bind)、条件渲染(v-if、v-show)和列表渲染(v-for)等核心指令。 组件化开发是 Vue.js 的核心思想。我们将详细讲解组件的创建、注册、props 传递、自定义事件 `$emit` 和 `v-on` 的使用,以及 `computed` 属性和 `watch` 侦听器的作用。 此外,本章还将介绍 Vue 的生命周期钩子函数,帮助读者理解组件在不同阶段的生命过程。路由管理(Vue Router)和状态管理(Vuex)是构建大型 Vue 应用的关键,我们将对其进行初步的介绍和演示。 第七章:React 框架入门与核心特性 React 是由 Facebook 开发的声明式、组件化的 JavaScript 库,用于构建用户界面。本章将带领读者进入 React 的世界。我们将讲解 JSX 语法,这是一种 JavaScript 的语法扩展,用于描述 UI 的结构。 组件是 React 的基本构建单元。我们将详细讲解函数组件和类组件的创建方式,Props 和 State 的概念及其在组件间通信和数据管理中的作用。 React 的核心在于其声明式编程模型和虚拟 DOM(Virtual DOM)技术。我们将深入剖析虚拟 DOM 的工作原理,以及 React 如何通过 diff 算法高效地更新真实 DOM。 事件处理在 React 中也有其独特的处理方式,我们将讲解合成事件(Synthetic Event)的概念。Hooks 的引入极大地简化了函数组件的状态管理和副作用处理,本章将重点讲解 `useState`、`useEffect`、`useContext` 等常用的 Hooks,并演示如何使用它们来构建更简洁、更高效的 React 应用。 第八章:Node.js 后端开发基础 JavaScript 不仅是前端开发的主力军,在后端开发领域也占据着重要地位,而 Node.js 正是实现这一目标的核心。本章将为读者打开 Node.js 的大门。我们将讲解 Node.js 的运行机制、事件循环(Event Loop)模型,以及其非阻塞 I/O 的特性。 模块系统是 Node.js 的基石,我们将讲解 Node.js 的模块导出(`module.exports`、`exports`)和引入(`require`)机制。 我们将介绍 Node.js 内置的核心模块,例如 `fs`(文件系统)、`http`(HTTP 模块)等,并通过示例演示如何使用它们来完成文件读写、创建 HTTP 服务器等常见操作。 为了更高效地构建后端应用,我们将介绍 Express.js 框架。Express.js 是一个轻量级的 Node.js Web 应用框架,它提供了强大的路由、中间件等功能。我们将演示如何使用 Express.js 来构建 RESTful API,处理 HTTP 请求和响应。 第三部分:实战项目与进阶主题 第九章:构建一个响应式单页应用(SPA) 本章将通过一个完整的实战项目,将前面学到的前端技术融会贯通。我们将以 Vue.js 或 React 为基础(具体选择一个框架进行深入讲解,或提供两种框架的实现思路),指导读者构建一个功能完善的响应式单页应用(SPA)。 项目可能是一个简单的电商平台、一个待办事项列表应用,或者一个个人博客系统。我们将从项目需求分析、技术选型开始,逐步进行页面布局、组件拆分、数据管理、路由配置、API 调用等方面的工作。 重点将放在如何实现响应式设计,确保应用在不同屏幕尺寸下都能提供良好的用户体验。同时,我们还将关注代码的可维护性、可扩展性以及性能优化。 第十章:JavaScript 性能优化与最佳实践 编写高效、性能优越的 JavaScript 代码是每个优秀开发者的追求。本章将系统地讲解 JavaScript 的性能优化策略。我们将从前端性能的角度出发,讲解如何优化 JavaScript 的加载和执行速度,例如代码的异步加载、延迟加载、代码分割(Code Splitting)等。 DOM 操作的性能优化也是重点,我们将回顾事件委托的优势,以及如何减少不必要的 DOM 重绘和回流。 我们将讨论 JavaScript 代码的内存管理,讲解如何避免内存泄漏,以及如何使用浏览器开发者工具来分析和诊断性能问题。 最后,本章将梳理 JavaScript 开发中的一些最佳实践,包括代码的可读性、可维护性、安全性以及团队协作等方面,帮助读者养成良好的编程习惯,写出高质量的代码。 第十一章:Web 安全基础与实践 Web 安全是 Web 开发中不可忽视的重要环节。本章将为读者介绍 Web 安全的基础知识,并结合 JavaScript 开发进行实践。我们将讲解常见的 Web 安全威胁,例如跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、SQL 注入等,并重点阐述如何通过 JavaScript 代码来防范这些攻击。 例如,在 XSS 防范方面,我们将讲解如何对用户输入进行适当的转义和过滤。在 CSRF 防范方面,我们将介绍 Token 的使用机制。 此外,我们还将探讨 HTTPS 的重要性,以及如何在前端代码中安全地处理敏感信息。了解并实践这些安全措施,能够帮助读者构建更安全、更可靠的 Web 应用。 第十二章:TypeScript 入门与进阶 TypeScript 作为 JavaScript 的一个超集,为 JavaScript 带来了静态类型检查,极大地提高了代码的可维护性和健壮性。本章将带领读者入门 TypeScript。我们将讲解 TypeScript 的基本类型(`string`、`number`、`boolean`、`array`、`tuple`、`enum`、`any`、`void`、`null`、`undefined`、`never`),以及接口(Interface)和类型别名(Type Alias)的使用。 我们将演示如何使用 TypeScript 来定义类、函数,以及泛型(Generics)的应用,这使得代码更加灵活和类型安全。 最后,我们将讲解如何在实际项目中使用 TypeScript,包括如何配置 TypeScript 编译器,以及如何将其与 Webpack、Vue.js 或 React 等框架结合使用,从而充分发挥 TypeScript 在大型项目开发中的优势。 结语 《JavaScript 开发实战》力求成为读者在 JavaScript 开发旅程中的可靠伙伴。本书的编写过程,既是理论知识的梳理与总结,更是对众多实际开发经验的提炼与升华。我们希望通过本书,能够帮助读者不仅掌握 JavaScript 的语法和特性,更能理解其背后的设计理念,学会如何运用这些知识去解决实际问题,构建出色的 Web 应用。 技术的发展日新月异,持续学习和探索是保持竞争力的不二法门。本书提供了一个坚实的基础,希望它能激发读者进一步深入学习的兴趣,不断挑战自我,在 Web 开发领域创造更多精彩。 愿本书能为您的 JavaScript 开发之路添砖加瓦,助您在编程的道路上不断前行,创造出更多令人惊叹的数字作品。