学习JavaScript数据结构与算法第三版 Learning JavaScript Data Structures and Algorithms 3rd Edition ([巴西]格罗纳(LoianeGroner), 孙晓博, 邓钢, 吴双, 陈迪, 袁源) (Z-Library)

Author: [巴西]格罗纳(LoianeGroner), 孙晓博, 邓钢, 吴双, 陈迪, 袁源

商业

本书首先介绍了JavaScript语言的基础知识,接下来讨论了数组、栈、队列、链表、集合、字典、散列表、树、图等数据结构,之后探讨了各种排序和搜索算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序、顺序搜索、二分搜索,还介绍了动态规划和贪心算法等常用的高级算法及相关知识。

📄 File Format: PDF
💾 File Size: 13.6 MB
46
Views
0
Downloads
0.00
Total Donations

📄 Text Preview (First 20 pages)

ℹ️

Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

📄 Page 1
(This page has no text content)
📄 Page 2
(This page has no text content)
📄 Page 3
图灵社区的电子书没有采用专有客 户端,您可以在任意设备上,用自 己喜欢的浏览器和PDF阅读器进行 阅读。 但您购买的电子书仅供您个人使用, 未经授权,不得进行传播。 我们愿意相信读者具有这样的良知 和觉悟,与我们共同保护知识产权。 如果购买者有侵权行为,我们可能 对该用户实施包括但不限于关闭该 帐号等维权措施,并可能追究法律 责任。
📄 Page 4
(This page has no text content)
📄 Page 5
内 容 提 要 本书首先介绍了 JavaScript 语言的基础知识(包括 ECMAScript 和 TypeScript),其次讨论了数组、栈、 队列、双端队列和链表等重要的数据结构,随后分析了集合、字典和散列表的工作原理,接下来阐述了递 归的原理、什么是树以及二叉堆和堆排序,然后介绍了图、DFS 和 BFS 算法、各种排序(冒泡排序、选 择排序、插入排序、归并排序、快速排序、计数排序、桶排序和基数排序)和搜索(顺序搜索、二分搜索 和内插搜索)算法以及随机算法,接着介绍了分而治之、动态规划、贪心算法和回溯算法等高级算法以及 函数式编程,最后还介绍了如何计算算法的复杂度。 如果你是计算机科学专业的学生,或是刚刚开启职业生涯的技术人员,想探索 JavaScript 的最佳能力, 这本书一定适合你。 定价:69.00元 读者服务热线:(010)51095183转600 印装质量热线:(010)81055316 反盗版热线:(010)81055315 广告经营许可证:京东工商广登字 20170147 号 著    [巴西] 洛伊安妮 • 格罗纳 译    吴 双 邓 钢 孙晓博 等 责任编辑 杨 琳 责任印制 周昇亮 人民邮电出版社出版发行  北京市丰台区成寿寺路11号 邮编 100164  电子邮件 315@ptpress.com.cn 网址 http://www.ptpress.com.cn 北京    印刷 开本:800×1000 1/16 印张:19.25 字数:466千字 2019年 5 月第 1 版 印数:1 — 3 000册 2019年 5 月北京第 1 次印刷 著作权合同登记号 图字:01-2018-7611号 ◆ ◆ ◆
📄 Page 6
前 言 1 1 2 3 4 5 8 10 13 9 6 7 12 11 版权声明 Copyright © 2018 Packt Publishing. First published in the English language under the title Learning JavaScript Data Structures and Algorithms, Third Edition. Simplified Chinese-language edition copyright © 2019 by Posts & Telecom Press. All rights reserved. 本书中文简体字版由 Packt Publishing 授权人民邮电出版社独家出版。未经出版者书面许可, 不得以任何方式复制或抄袭本书内容。 版权所有,侵权必究。
📄 Page 7
2 前 言 致我的父母,感谢他们的爱和支持,以及这些年对我的指引。 致我的丈夫,感谢他的支持,感恩他成为我生命旅程中的爱侣。
📄 Page 8
前 言 1 1 2 3 4 5 8 10 13 9 6 7 12 11 前 言 JavaScript 是当下最流行的编程语言之一。由于浏览器的原生支持(无须安装任何插件), JavaScript 也被称作“互联网语言”。JavaScript 的应用非常广泛,不仅用于前端开发,也被用到 服务器(Node.js)环境、数据库(MongoDB)环境和移动设备中,同样还被用在嵌入式设备和 物联网(IoT)设备中。 对任何专业技术人员来说,理解数据结构都非常重要。作为软件开发者,我们要能够借助编 程语言来解决问题,而数据结构是这些问题的解决方案中不可或缺的一部分。如果选择了不恰当 的数据结构,可能会影响所写程序的性能。因此,了解不同数据结构和它们的适用范围十分重要。 算法在计算机科学中扮演着非常重要的角色。解决一个问题有很多种方法,但有些方法会比 其他方法更好。因此,了解一下最著名的算法也很重要。 本书为数据结构和算法初学者所写,也为熟悉数据结构和算法并想在 JavaScript 语言中使用 它们的人所写。 快乐地编码吧! 读者对象 如果你是一名计算机专业的学生,或者正处于技术生涯的开端,想要探索 JavaScript 最强大 的功能,那么本书正适合你。如果你已经对编程很熟悉,但是想要提升在算法和数据结构方面的 技能,本书同样适合你。 你只需要懂得 JavaScript 的基础知识和编程逻辑,就可以开始享受算法的乐趣了。 本书结构 第 1 章“JavaScript 简介”,讲述了 JavaScript 的基础知识,可以帮助你更好地学习数据结构 和算法,同时还介绍了如何搭建开发环境来运行书中的代码示例。
📄 Page 9
2 前 言 第 2 章“ECMAScript 和 TypeScript 概述”,介绍了 2015 年后新增的一些 JavaScript 功能,以 及 TypeScript 的基本功能。TypeScript 是 JavaScript 的一个超集。 第 3 章“数组”,介绍了如何使用数组这种最基础且最常用的数据结构。这一章演示了如何 对数组声明、初始化、添加和删除其中的元素,还讲述了如何使用 JavaScript 语言本身支持的数 组方法。 第 4 章“栈”,介绍了栈这种数据结构,演示了如何创建栈以及怎样添加和删除元素,还讨 论了如何用栈解决计算机科学中的一些问题。 第 5 章“队列和双端队列”,详述了队列这种数据结构,演示了如何创建队列,以及如何添 加和删除队列中的元素。此外,这一章也介绍了一种特殊的队列——双端队列数据结构。这一章 还讨论了如何用队列解决计算机科学中的一些问题,以及栈和队列的主要区别。 第 6 章“链表”,讲解如何用对象和指针从头创建链表这种数据结构。这一章除了讨论如何 声明、创建、添加和删除链表元素之外,还介绍了不同类型的链表,例如双向链表和循环链表。 第 7 章“集合”,介绍了集合这种数据结构,讨论了如何用集合存储非重复性的元素。此外, 还详述了对集合的各种操作以及相应代码的实现。 第 8 章“字典和散列表”,深入讲解字典、散列表及它们之间的区别。这一章介绍了这两种 数据结构是如何声明、创建和使用的,还探讨了如何解决散列冲突,以及如何创建更高效的散列 函数。 第 9 章“递归”,介绍了递归的概念,描述了声明式和递归式算法之间的区别。 第 10 章“树”,讲解了树这种数据结构和它的相关术语,重点讨论了二叉搜索树,以及如何 在树中搜索、遍历、添加和删除节点。这一章还介绍了自平衡树,包括 AVL 树和红黑树。 第 11 章“二叉堆和堆排序”,介绍了最小堆和最大堆数据结构,以及怎样使用堆作为一个优 先队列,还讨论了著名的堆排序算法。 第 12 章“图”,介绍了图这种数据结构和它的适用范围。这一章讲述了图的常用术语和不同 表示方式,探讨了如何使用深度优先搜索算法和广度优先搜索算法遍历图,以及它们的适用范围。 第 13 章“排序和搜索算法”,探讨了常用的排序算法,如冒泡排序(包括改进版)、选择排 序、插入排序、归并排序和快速排序。这一章还介绍了计数排序和基数排序这两种分布式排序算 法,搜索算法中的顺序搜索和二分搜索,以及怎样随机排列一个数组。 第 14 章“算法设计与技巧”,介绍了一些算法技巧和著名的算法,以及 JavaScript 函数式编程。 第 15 章“算法复杂度”,介绍了大 O 表示法的概念,以及本书实现算法的复杂度列表。这一 章还介绍了 NP 完全问题和启发式算法。最后,讲解了提升算法能力的诀窍。
📄 Page 10
前 言 3 1 2 3 4 5 8 10 13 9 6 7 12 11 阅读须知 尽管本书第 1 章对 JavaScript 进行了简单介绍,你仍然需要了解基本的 JavaScript 知识和编 程逻辑。 要测试本书提供的代码示例,你需要一个代码编辑器(例如 Atom 或 Visual Studio Code)以 便阅读代码,还需要一个浏览器(Chrome、Firefox 或 Edge)。 你也可以访问 https://javascript-ds-algorithms-book.firebaseapp.com/,在线测试代码。同样, 记得打开浏览器中的开发者工具,这样你就可以看到控制台上的输出结果了。 下载示例代码 你可以用你的账户从 http://www.packtpub.com 下载所有已购买 Packt 图书的示例代码文件。 如果你从其他地方购买了本书,可以访问 http://www.packtpub.com/support 并注册,我们将通过电 子邮件把文件发送给你。 下载代码文件的步骤如下: (1) 在 www.packtpub.com 登录或注册; (2) 选择 SUPPORT 标签页; (3) 点击 Code Downloads & Errata; (4) 在 Search 框中输入书名并根据屏幕上的指示操作。 文件下载后,请使用以下软件的最新版本解压:  Windows 系统请使用 WinRAR 或 7-Zip  Mac 系统请使用 Zipeg、iZip 或 UnRarX  Linux 系统请使用 7-Zip 或 PeaZip 本书的代码包在 GitHub 的托管地址是 https://github.com/PacktPublishing/Learning-JavaScript- Data-Structures-and-Algorithms-Third-Edition。只要代码有更新,它就会被更新到 GitHub 仓库中去。 其他图书或视频的代码包也可以到 https://github.com/PacktPublishing/查阅。别错过! 排版约定 在本书中,你会发现一些不同的文本样式。 正文中的代码这样表示:“可能你在网上的一些例子里看到过 JavaScript 的 include 语句,
📄 Page 11
4 前 言 或者放在 head 标签中的 JavaScript 代码。” 代码段的格式如下: class Stack { constructor() { this.items = []; // {1} } } 如果我们想让你重点关注代码段中的某个部分,会加粗显示: const stack = new Stack(); console.log(stack.isEmpty()); // outputs true 所有的命令行输入或输出的格式如下: npm install http-server -g 新术语、重点词汇,以及你可以在屏幕上看到的词(例如,菜单或对话框里的词)以黑体标 示。举个例子:“从 Administration 面板中选择 System info。” 此图标表示警告或需要特别注意的内容。 此图标表示提示或者技巧。 联系我们 欢迎提出反馈。 一般反馈:请发送电子邮件至 feedback@packtpub.com,并在邮件主题中注明书名。如果你 对本书任何方面有疑问,请发送邮件至 questions@packtpub.com。 勘误:尽管我们会尽力确保内容准确,错误还是在所难免。如果你发现了书中的错误,希望 你能告知我们,我们不胜感激。请访问 www.packtpub.com/submit-errata,选择你的书,点击勘误 提交表单的链接,并输入详情。① 反盗版:如果你在互联网上发现我们的作品被非法复制,我们会非常感激你将地址和网站名 称提供给我们。请将盗版材料的链接发送到 copyright@packtpub.com。 如果你有兴趣成为作者:如果你有某个主题的专业知识,并且有兴趣写成或帮助促成一本书, —————————— ① 针对本书中文版的勘误,请到 http://www.ituring.com.cn/book/2653 查看和提交。——编者注
📄 Page 12
前 言 5 1 2 3 4 5 8 10 13 9 6 7 12 11 请参考我们的作者指南 www.packtpub.com/authors。 评论 请留下一条评论。当你阅读并使用本书后,何不在你购买本书的网站上留下一条评论呢?潜 在的读者可通过你公正的评论来决定是否购买,Packt 的工作人员可以知道你对我们产品的看法, 我们的作者能看到你对他们的反馈。谢谢! 要了解更多有关 Packt 的信息,请访问 packtpub.com。 电子书 扫描如下二维码,即可购买本书电子版。
📄 Page 13
6 前 言
📄 Page 14
x 目 录 目 录 第 1 章 JavaScript 简介 ................................. 1 1.1 JavaScript 数据结构与算法 ....................... 1 1.2 环境搭建 ................................................... 2 1.2.1 最简单的环境搭建 ......................... 2 1.2.2 使用 Web 服务器 ........................... 3 1.2.3 Node.js http-server ................... 5 1.3 JavaScript 基础 .......................................... 5 1.3.1 变量 ............................................... 6 1.3.2 运算符 ............................................ 8 1.3.3 真值和假值 .................................. 11 1.3.4 相等运算符(==和===) ............ 12 1.4 控制结构 ................................................. 14 1.4.1 条件语句 ...................................... 14 1.4.2 循环 ............................................. 15 1.5 函数 ......................................................... 16 1.6 JavaScript 面向对象编程 ......................... 17 1.7 调试工具 ................................................. 18 1.8 小结 ......................................................... 20 第 2 章 ECMAScript 和 TypeScript 概述 .................................................... 21 2.1 ECMAScript 还是 JavaScript ................... 21 2.1.1 ES6、ES2015、ES7、ES2016、 ES8、ES2017 和 ES.Next ............ 21 2.1.2 使用 Babel.js ................................ 23 2.2 ECMAScript 2015+的功能 ...................... 24 2.2.1 用 let 替代 var 声明变量 .......... 24 2.2.2 模板字面量 .................................. 27 2.2.3 箭头函数 ...................................... 27 2.2.4 函数的参数默认值 ....................... 28 2.2.5 声明展开和剩余参数 ................... 29 2.2.6 增强的对象属性 .......................... 30 2.2.7 使用类进行面向对象编程 ........... 31 2.2.8 乘方运算符 .................................. 33 2.2.9 模块 ............................................. 33 2.3 介绍 TypeScript ....................................... 39 2.3.1 类型推断 ...................................... 40 2.3.2 接口 ............................................. 41 2.3.3 其他 TypeScript 功能 ................... 43 2.3.4 TypeScript 中对 JavaScript 文件 的编译时检查 .............................. 43 2.4 小结 ......................................................... 44 第 3 章 数组 .................................................... 45 3.1 为什么用数组 .......................................... 45 3.2 创建和初始化数组 .................................. 46 3.3 添加元素 ................................................. 47 3.3.1 在数组末尾插入元素 ................... 47 3.3.2 在数组开头插入元素 ................... 48 3.4 删除元素 ................................................. 49 3.4.1 从数组末尾删除元素 ................... 49 3.4.2 从数组开头删除元素 ................... 49 3.5 在任意位置添加或删除元素 ................... 51 3.6 二维和多维数组 ...................................... 51 3.6.1 迭代二维数组的元素 ................... 52 3.6.2 多维数组 ...................................... 53 3.7 JavaScript 的数组方法参考 ..................... 54 3.7.1 数组合并 ...................................... 55 3.7.2 迭代器函数 .................................. 55 图灵社区会员 道法小自然(903567778@qq.com) 专享 尊重版权
📄 Page 15
2 目 录 3.7.3 ECMAScript 6 和数组的新 功能 ............................................. 57 3.7.4 排序元素 ...................................... 60 3.7.5 搜索 ............................................. 63 3.7.6 输出数组为字符串 ....................... 64 3.8 类型数组 ................................................. 64 3.9 TypeScript 中的数组 ............................... 65 3.10 小结 ....................................................... 66 第 4 章 栈 ........................................................ 67 4.1 创建一个 JavaScript 数据结构和 算法库 ..................................................... 67 4.2 栈数据结构 .............................................. 68 4.2.1 创建一个基于数组的栈 ............... 69 4.2.2 向栈添加元素 .............................. 69 4.2.3 从栈移除元素 .............................. 70 4.2.4 查看栈顶元素 .............................. 70 4.2.5 检查栈是否为空 .......................... 71 4.2.6 清空栈元素 .................................. 71 4.2.7 使用 Stack 类 ............................. 71 4.3 创建一个基于 JavaScript 对象的 Stack 类 ................................................. 73 4.3.1 向栈中插入元素 .......................... 73 4.3.2 验证一个栈是否为空和它的 大小 ............................................. 74 4.3.3 从栈中弹出元素 .......................... 74 4.3.4 查看栈顶的值并将栈清空 ........... 75 4.3.5 创建 toString 方法 ................... 75 4.4 保护数据结构内部元素 ........................... 76 4.4.1 下划线命名约定 .......................... 76 4.4.2 用 ES2015 的限定作用域 Symbol 实现类 ............................ 77 4.4.3 用 ES2015 的 WeakMap 实现类 .......................................... 77 4.4.4 ECMAScript 类属性提案 ............. 78 4.5 用栈解决问题 .......................................... 79 4.6 小结 ......................................................... 81 第 5 章 队列和双端队列 ............................... 82 5.1 队列数据结构 .......................................... 82 5.1.1 创建队列 ...................................... 83 5.1.2 使用 Queue 类 ............................. 86 5.2 双端队列数据结构 .................................. 87 5.2.1 创建 Deque 类 ............................. 87 5.2.2 使用 Deque 类 ............................. 89 5.3 使用队列和双端队列来解决问题 ........... 90 5.3.1 循环队列——击鼓传花游戏 ....... 90 5.3.2 回文检查器 .................................. 91 5.3.3 JavaScript 任务队列 ..................... 93 5.4 小结 ......................................................... 93 第 6 章 链表 .................................................... 94 6.1 链表数据结构 .......................................... 94 6.2 双向链表 ............................................... 106 6.2.1 在任意位置插入新元素 ............. 107 6.2.2 从任意位置移除元素 ................. 109 6.3 循环链表 ............................................... 111 6.3.1 在任意位置插入新元素 ............. 112 6.3.2 从任意位置移除元素 ................. 113 6.4 有序链表 ............................................... 114 6.5 创建 StackLinkedList 类 ................. 116 6.6 小结 ....................................................... 117 第 7 章 集合 .................................................. 118 7.1 构建数据集合 ........................................ 118 7.2 创建集合类 ........................................... 119 7.2.1 has(element)方法 .................. 119 7.2.2 add 方法 .................................... 120 7.2.3 delete 和 clear 方法 ............. 120 7.2.4 size 方法 .................................. 121 7.2.5 values 方法 .............................. 122 7.2.6 使用 Set 类 ............................... 122 7.3 集合运算 ............................................... 123 7.3.1 并集 ........................................... 123 7.3.2 交集 ........................................... 125 7.3.3 差集 ........................................... 127 7.3.4 子集 ........................................... 128 图灵社区会员 道法小自然(903567778@qq.com) 专享 尊重版权
📄 Page 16
目 录 3 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 17 7.4 ECMAScript 2015——Set 类 ............... 130 7.5 多重集或袋 ............................................ 132 7.6 小结 ....................................................... 133 第 8 章 字典和散列表 ................................. 134 8.1 字典 ....................................................... 134 8.1.1 创建字典类 ................................ 135 8.1.2 使用 Dictionary 类 ................. 141 8.2 散列表 .................................................... 142 8.2.1 创建散列表 ................................ 143 8.2.2 使用 HashTable 类 ................... 146 8.2.3 散列表和散列集合 ..................... 147 8.2.4 处理散列表中的冲突 ................. 147 8.2.5 创建更好的散列函数 ................. 158 8.3 ES2015 Map 类 ....................................... 159 8.4 ES2105 WeakMap 类和 WeakSet 类 ...... 159 8.5 小结 ....................................................... 160 第 9 章 递归 .................................................. 161 9.1 理解递归 ................................................ 161 9.2 计算一个数的阶乘 ................................ 162 9.2.1 迭代阶乘 .................................... 162 9.2.2 递归阶乘 .................................... 163 9.3 斐波那契数列 ........................................ 165 9.3.1 迭代求斐波那契数 ..................... 166 9.3.2 递归求斐波那契数 ..................... 166 9.3.3 记忆化斐波那契数 ..................... 167 9.4 为什么要用递归?它更快吗 ................. 167 9.5 小结 ....................................................... 168 第 10 章 树 .................................................... 169 10.1 树数据结构 .......................................... 169 10.2 树的相关术语 ...................................... 170 10.3 二叉树和二叉搜索树 ........................... 170 10.3.1 创建 BinarySearch- Tree 类 .................................. 171 10.3.2 向二叉搜索树中插入 一个键 .................................... 172 10.4 树的遍历 .............................................. 175 10.4.1 中序遍历 ................................ 175 10.4.2 先序遍历 ................................ 176 10.4.3 后序遍历 ................................ 177 10.5 搜索树中的值 ...................................... 178 10.5.1 搜索最小值和最大值 ............. 178 10.5.2 搜索一个特定的值 ................. 180 10.5.3 移除一个节点 ........................ 182 10.6 自平衡树 .............................................. 185 10.6.1 Adelson-Velskii-Landi 树 (AVL 树) ........................... 185 10.6.2 红黑树 .................................... 194 10.7 小结 ..................................................... 200 第 11 章 二叉堆和堆排序 ........................... 201 11.1 二叉堆数据结构 .................................. 201 11.1.1 创建最小堆类 ........................ 202 11.1.2 创建最大堆类 ........................ 208 11.2 堆排序算法 .......................................... 209 11.3 小结 ..................................................... 211 第 12 章 图 .................................................... 212 12.1 图的相关术语 ...................................... 212 12.2 图的表示 .............................................. 214 12.2.1 邻接矩阵 ................................ 215 12.2.2 邻接表 .................................... 215 12.2.3 关联矩阵 ................................ 216 12.3 创建 Graph 类 ..................................... 216 12.4 图的遍历 .............................................. 219 12.4.1 广度优先搜索 ........................ 220 12.4.2 深度优先搜索 ........................ 225 12.5 最短路径算法 ...................................... 231 12.5.1 Dijkstra 算法 .......................... 232 12.5.2 Floyd-Warshall 算法 .............. 234 12.6 最小生成树 .......................................... 235 12.6.1 Prim 算法 ............................... 236 12.6.2 Kruskal 算法 .......................... 237 12.7 小结 ..................................................... 238 第 13 章 排序和搜索算法 ........................... 239
📄 Page 17
4 目 录 13.1 排序算法 .............................................. 239 13.1.1 冒泡排序 ................................ 239 13.1.2 选择排序 ................................ 242 13.1.3 插入排序 ................................ 244 13.1.4 归并排序 ................................ 245 13.1.5 快速排序 ................................ 247 13.1.6 计数排序 ................................ 251 13.1.7 桶排序 .................................... 253 13.1.8 基数排序 ................................ 255 13.2 搜索算法 .............................................. 257 13.2.1 顺序搜索 ................................ 257 13.2.2 二分搜索 ................................ 258 13.2.3 内插搜索 ................................ 260 13.3 随机算法 .............................................. 261 13.4 小结 ..................................................... 262 第 14 章 算法设计与技巧 ........................... 263 14.1 分而治之 .............................................. 263 14.2 动态规划 .............................................. 265 14.2.1 最少硬币找零问题 ................ 266 14.2.2 背包问题 ................................ 268 14.2.3 最长公共子序列 .................... 270 14.2.4 矩阵链相乘 ............................ 272 14.3 贪心算法 ............................................. 274 14.3.1 最少硬币找零问题 ................ 274 14.3.2 分数背包问题 ........................ 275 14.4 回溯算法 ............................................. 276 14.4.1 迷宫老鼠问题 ........................ 277 14.4.2 数独解题器 ............................ 279 14.5 函数式编程简介 .................................. 282 14.5.1 函数式编程与命令式编程 ..... 282 14.5.2 ES2015+和函数式编程 ......... 283 14.5.3 JavaScript 函数式工具 箱——map、filter 和 reduce ............................. 284 14.5.4 JavaScript 函数式类库和数 据结构 ................................... 286 14.6 小结 ..................................................... 286 第 15 章 算法复杂度 ................................... 287 15.1 大 O 表示法 ......................................... 287 15.1.1 理解大 O 表示法 ................... 287 15.1.2 时间复杂度比较 .................... 289 15.1.3 NP 完全理论概述 .................. 292 15.2 用算法娱乐身心 .................................. 293 15.3 小结 ..................................................... 294
📄 Page 18
1.1 JavaScript 数据结构与算法 1 1 2 3 4 5 5 6 7 8 9 0 1 2 3 4 JavaScript 简介 JavaScript 是一门非常强大的编程语言。它是最流行的编程语言之一,也是互联网上最卓越 的语言之一。在 GitHub(世界上最大的代码托管站点)上,托管了 400 000 多个 JavaScript 代码 仓库(用 JavaScript 开发的项目数量也是最多的,参看 http://githut.info)。使用 JavaScript 的项目 数量还在逐年增长。 JavaScript 不仅可用于前端开发,也适用于后端开发,而 Node.js 就是其背后的技术。Node 包的数量也呈指数级增长。JavaScript 同样可以用于移动开发领域,并且是 Apache Cordova 中最 流行的语言之一。Apache Cordova 是一个能让开发者使用 HTML、CSS 和 JavaScript 等语言的混 合式框架,你可以通过它来搭建应用,并且生成供 Android 系统使用的 APK 文件和供 iOS(苹果 系统)使用的 IPA 文件。当然,也别忘了桌面端应用开发。我们可以使用一个名为 Electron 的 JavaScript 框架来编写同时兼容 Linux、Mac OS 和 Windows 的桌面端应用。JavaScript 还可以用于 嵌入式设备以及物联网(IoT)设备。正如你所看到的,到处都有 JavaScript 的身影! 要成为一名 Web 开发工程师,掌握 JavaScript 必不可少。 本章,你会学到 JavaScript 的语法和一些必要的基础,这样就可以开始开发自己的数据结构 和算法了。本章内容如下:  环境搭建和 JavaScript 基础  控制结构和函数  JavaScript 面向对象编程  调试工具 1.1 JavaScript 数据结构与算法 在本书中,你将学习最常用的数据结构和算法。为什么用 JavaScript 来学习这些数据结构和 算法呢?我们已经回答了这个问题。JavaScript 非常受欢迎,作为函数式编程语言,它非常适合 用来学习数据结构和算法。通过它来学习数据结构比 C、Java 或 Python 这些标准语言更简单, 学习新东西也会变得很有趣。谁说数据结构和算法只为 C、Java 这样的语言而生?在前端开发当 第 1 章
📄 Page 19
2 第 1 章 JavaScript 简介 中,你可能也需要实现这些语言。 学习数据结构和算法十分重要。首要原因是数据结构和算法可以很高效地解决常见问题,这 对你今后所写代码的质量至关重要(也包括性能;要是用了不恰当的数据结构或算法,很可能会 产生性能问题)。其次,对于计算机科学,算法是最基础的概念。最后,如果你想入职最好的 IT 公司(如谷歌、亚马逊、微软、eBay 等),数据结构和算法是面试问题的重头戏。 让我们开始学习吧! 1.2 环境搭建 相比其他语言,JavaScript 的优势之一在于不用安装或配置任何复杂的环境就可以开始学习。 每台计算机上都已具备所需的环境,哪怕使用者从未写过一行代码。有浏览器足矣! 为了运行书中的示例代码,建议你做好如下准备:安装 Chrome 或 Firefox 浏览器(选择一个 你最喜欢的即可),选择一个喜欢的编辑器(如 Visual Studio Code),以及一个 Web服务器(XAMPP 或其他你喜欢的,这一步是可选的)。Chrome、Firefox、VS Code 和 XAMPP 在 Windows、Linux 和 Mac OS 上均可以使用。 1.2.1 最简单的环境搭建 浏览器是最简单的 JavaScript 开发环境。现代浏览器(Chrome、Firefox、Safari 和 Edge)都 拥有一个叫作开发者工具的功能。如要使用 Chrome 中的开发者工具,可以点击右上角的菜单, 选择 More Tools | Developer Tools,如下图所示。
📄 Page 20
1.2 环境搭建 3 1 2 3 4 5 5 6 7 8 9 0 1 2 3 4 打开开发者工具,里面有一个 Console 标签页,可以在其中编写你的 JavaScript 代码,如下 图所示(需要按下 Enter 键来执行源代码)。 1.2.2 使用 Web 服务器 你可能想要安装的第二个环境也很简单,但是需要安装一个 Web 服务器。如果一个 HTML 文件只包含简单的、不向服务器发送任何请求的 JavaScript 代码(Ajax 调用),那么你可以右键 点击它并选择在浏览器中直接打开。本书中需要编写的代码都很简单,可以通过这种方式执行。 但是,安装一个 Web 服务器总是有好处的。 有很多开源和免费的 Web 服务器可供选择。如果你熟悉 PHP 的话,XAMPP 会是不错的选 择,它可用于 Linux、Windows 和 Mac OS。 由于我们会专注于服务端和浏览器上的 JavaScript,可以在 Chrome 上安装一个简单的 Web 服务器,它是一个叫作 Web Server for Chrome 的扩展。安装好之后,可以在浏览器地址栏中输 入 chrome://apps 来找到它。
The above is a preview of the first 20 pages. Register to read the complete e-book.

💝 Support Author

0.00
Total Amount (¥)
0
Donation Count

Login to support the author

Login Now
Back to List