JavaScript编程精解Marijn Haverbeke
部分旧书采用了标准图片,会可能出现少部分不同印次出版不同封面的情况,旧书无光盘、腰封、书衣、附件等,如有其他问题可咨询客服。
¥
15.13
3.1折
¥
49
九品
仅1件
作者Marijn Haverbeke
出版社机械工业出版社华章公司
ISBN9787111396659
出版时间2012-10
装帧平装
开本16开
定价49元
货号960884919612588038
上书时间2024-11-22
商品详情
- 品相描述:九品
- 商品描述
-
前言
20世纪70年代,业界首次推出个人计算机时,大多数计算机都内置一种简单的编程语言—通常是BASIC的变体,人与计算机之间的互动需要通过这种语言实现。这意味着,对天生喜欢钻研技术的人来说,从单纯使用计算机到编程的过渡非常容易。
现在的计算机相比20世纪70年代的功能更加强大,价格也更加便宜,软件接口呈现的是使用鼠标操作的灵活图形界面,而不是语言界面。这使计算机更容易使用,总的来说,这是一个巨大的进步。然而,这也在计算机用户与编程世界之间制造了一个障碍—业余爱好者必须积极寻找自己的编程环境,而不是一打开电脑就呈现的环境。
实质上,计算机系统仍然被各种编程语言控制。大多数的编程语言都比早期个人计算机中的BASIC语言更加先进。例如,本书的主题—JavaScript语言,就存在于每一款主流Web浏览器中。
关于编程
不愤不启,不悱不发。举一隅不以三隅反,则不复也。
——孔子
本书除了介绍JavaScript外,也致力于介绍编程的基本原理。事实上,这种编程还是比较难的。编程的基本规则通常都简单明了,但计算机程序构建在这些基本规则之上后,会变得很复杂,产生了其自身的规则和复杂性。正因为如此,编程并不是那么简单或可预测的。正如计算机科学的鼻祖高德纳(Donald Knuth)所说,编程是一门艺术,而不是一门科学。
要想从本书里获取最大收获,不能仅仅依靠被动阅读。一定要集中注意力去理解示例代码,只有确定自己真正理解了前面的内容,才能继续往下阅读。
程序员对其创造的宇宙负全部责任,因为他们是创造者。以计算机程序的形式,可创造出无限复杂的宇宙。
——Joseph Weizenbaum,《Computer Power and Human Reason》
一个程序包含很多含义。它是程序员敲出的一串字符,是计算机运行的指向力,是计算机内存中的数据,还控制同一个内存上的执行动作。仅使用熟悉的类推法比较程序与对象往往还不够,因为从表面上看适合该操作的是机器。机械表的齿轮巧妙地啮合在一起,如果表的制造者技术很棒,它就能够连续多年准确地显示时间。计算机程序的元素也以类似的方式组合在一起,如果程序员知道自己在做什么,那么这个程序就能够正常运行而不会崩溃。
计算机作为这些无形机器的载体而存在。计算机本身只会做简单直接的工作。它们之所以如此有用,是因为它们能够以惊人的速度完成这些工作。程序可以巧妙地把许多简单动作结合起来,去完成非常复杂的工作。
对有些人来说,编写计算机程序是一种很有趣的游戏。程序是思想的构筑,它零成本、零重量,在我们的敲打中不断发展。如果我们不细心,它的规模和复杂性将失去控制,甚至创造者也会感到混乱。这就是编程的主要问题:控制好程序。程序在工作时是很不可思议的,编程的艺术就是控制复杂性的技巧,好的程序其复杂性也会降低。
如今,很多程序员认为只要在程序中使用少量易于理解的技术,就可以最有效地降低复杂性。他们制定了严格的编程规则(最佳实践)及书写格式,那些破坏规则的人被称为“差劲”的程序员。
丰富多彩的编程世界里包含了太多的复杂性!让我们努力将程序变得简单和可预测,并为所有奇妙和优美的程序制定禁忌规则。编程技术的前景是广阔的,其多样性使人着迷,它的世界仍有很多未被探索的部分。编程过程中有很多陷阱和圈套,缺乏经验的程序员会犯各类糟糕的错误,告诫我们需要谨慎,并保持头脑清醒。学习编程时总是需要探索新的挑战、新的领域,拒绝不断探索的程序员必定会停滞不前、忘记编程的快乐、并失去编程的意志(或成为管理人员)。
语言为何很重要
在计算机诞生初期并没有编程语言。程序看起来就像这样:
这是一个从1加到10并输出结果(1 + 2 +…+ 10 = 55)的程序。它可以在一个非常简单、理想化的计算机上运行。为早期的计算机编制程序时,必须在正确的位置设置一排排的开关或者在纸带上打上一系列有规律的孔点,这样才能将程序传递给计算机。可以想象这个过程有多么繁琐和易出错。即使编写简单的程序也需要使用很多脑力和规则,编写复杂的程序更是不可想象。
当然,手动输入这些二进制位(即以上这些1和0的统称)的神秘组合,让程序员感觉自己像巫师一样拥有强大的魔力,而且还能够获得工作满足感,因此这点还是很值得的。
程序的每一行都包含一条单独的指令。可以用语言这样描述:
1)将数字0保存在第0个存储单元;
2)将数字1保存在第1个存储单元;
3)将第1个存储单元的值保存在第2个存储单元;
4)将第2个存储单元中的值减去数字11;
5)如果第2个存储单元中的值是数字0,则继续执行指令9;
6)将第1个存储单元的值添加至第0个存储单元;
7)将数字1添加至第1个存储单元;
8)继续执行指令3;
9)输出第0个存储单元的值。
虽然这比二进制位易读,但仍然令人不快。用名称代替指令和存储单元的数字或许更有帮助。
在这里不难看出程序是如何运行的。前两行代码为两个存储单元赋予初始值:total用于创建计算的结果,count记录当前看到的数字。使用compare的行可能是最令人费解的地方。该程序的目的是判断count是否等于11,从而确定能否停止运行。由于该机器相当原始,它只能测试一个数字是否为零,并在此基础上做出判断(跳转),因此它使用标记compare的存储单元来计算count的值,即11,并在该值的基础上做出判断。后面两行代码将count的值添加到结果total上,当程序判断count不是11时,为count加1。
下面是用JavaScript编写的有同样效果的程序。
这段程序有了更多的改进。最重要的是,不再需要指定程序来回转换的方式,while这个神奇的单词会帮助解决这个问题。只要满足给定的条件:count <= 10(意思是“count小于或等于10”),它就会继续执行下面几行代码。不再需要创建临时的值并将该值与零比较——这是一个没有意义的细节,编程语言就是用于解决这些无意义的细节。
最后,如果我们可以使用方便的range和sum操作(分别在区间范围(range)里创建一组数字,并计算该组数字的总和(sum)),代码应该是这样的:
从上例可以看出,同样的程序可以使用长或短、不可读或可读的方式来表达。该程序的第一个版本非常晦涩,而最后一个版本基本上都是语言描述:打印(print)出从1到10这个区间范围(range)的总和(sum)。(我们将在后面的章节中讲述如何创建sum及range等函数。)
优秀的编程语言会提供一种更为抽象的表达方式来帮助程序员表达其意图。这种语言隐藏无意义的细节,提供方便的程序块(例如while语句),在很多时候,它允许程序员自己添加程序块(例如sum和range操作)。
什么是JavaScript
JavaScript语言目前主要用于解决万维网页面的各种难题。近年来,该语言也开始应用于其他环境中,如node.js框架(一种使用JavaScript语言编写快速服务器端程序的方式),最近吸引了不少关注。如果对编程感兴趣,JavaScript绝对是值得学习的语言。即使以后不会从事大量的网络编程工作,本书中展示的一些程序也会一直伴随着你,影响你使用其他语言编写的程序。
有些人指出了JavaScript语言不好的地方,其中很多观点都是对的。当我第一次用JavaScript写程序时,我立刻就开始轻视这种语言了,它接受我输入的大部分代码,但其解释代码的方式与我的意图完全不同。无可否认,这与我做事没有头绪有很大的关系,但也存在着一个真正的问题:JavaScript允许的操作实在是太多了。这种设计的初衷是让初学者更易掌握JavaScript编程方法。实际上,这使得更难发现程序中的问题,因为系统不会指出问题所在。
然而,语言的灵活性也是一种优势。它为很多无法使用更强大语言的技术留下了发展空间,正如我们将在后面几章中看到的,它能够克服JavaScript的一些缺点。当正确学习JavaScript并使用了一段时间之后,我发现自己真正的喜欢上了这种语言。
与这种语言的名字所暗示的不同,JavaScript与Java编程语言并没有多大关系。相似的名字是基于营销的考虑,而不是为了获得好评。网景公司于1995年推出JavaScript时,Java语言正在极力推广中,并且很受欢迎。很显然,当时有人认为借助Java语言的成功进行营销是个好主意。于是,就有了现在看到的这个名字。
与JavaScript有关的是ECMAScript。当网景浏览器以外的浏览器开始支持JavaScript或类似语言时,出现了一份准确描述该语言应该如何工作的文档。此文档里所描述的语言称为ECMAScript,它是以制定该设计语言标准的欧洲计算机制造商协会(ECMA)的名称命名的。ECMAScript描述了一种多用途编程语言,但并没有提及它与Web浏览器的集成。
现在有多个版本的JavaScript。本书讲的是ECMAScript 3版本,是第一个各种浏览器都支持的版本。在过去的几年中,人们进一步发展这种语言,但是,这些扩展版本只有受到浏览器的广泛支持才是有用的(至少在网络编程方面),而浏览器要跟上编程语言的发展也需要很长一段时间。幸运的是,新版本的JavaScript基本上是ECMAScript 3的扩展版本,因此本书中的大部分内容都不会过时。
试运行程序
如果想要执行并练习本书中的代码,一种方法是可以登录http://eloquentjavascript.net/,使用该网站提供的工具。
另一种方法是创建一个包含该程序的HTML文件,并将其加载到浏览器中。例如,可以创建一个名为test.html的文件,内容如下。
后面的章节将讲述更多有关HTML的知识以及浏览器解释HTML的方式。请注意,示例中的print操作已被替换为document.write。我们将在第10章中介绍如何创建print函数。
本书主要内容
本书前3章介绍了JavaScript语言,并指导如何编写语法正确的JavaScript程序,还介绍了控制结构(如在前面看到的while关键词)、函数(自己编写的操作)和数据结构。这些内容可以指导编写简单的程序。
在基本了解了编程的基础上,后面4章将讨论更高级的技术,指导如何编写更复杂的程序,而不是将程序写得难以理解。第4章将讨论如何处理错误和意想不到的情况。第5章和第6章将介绍两个主要的抽象方式:函数式编程和面向对象编程。第7章给出了一些如何组织程序的指导。
其余的章节重点关注了JavaScript环境中可用的工具,理论部分相对较少。第8章介绍了一种文字处理的子语言,第9~12章将讲述程序在浏览器内部运行时可利用的工具,教会大家控制网页、应对用户的操作,并与Web服务器通信。
排版规范
在本书中,采用等宽字体的文本应被理解为代表程序的元素,这些元素有时是各自独立的片段,有时只是指靠近程序的一部分。这段我们已经看过的程序的一部分,可写成如下形式:
有时,为了演示某些表达式求值时会发生的情况,这些表达式会采用黑体字,其产生的值写在下面,前面有一个箭头:
更新
访问网站获得更新、勘误表以及运行本书示例代码的交互式代码沙盒。
作者简介
Marijn Haverbeke,世界级JavaScript程序员,通晓多种编程语言,在Web开发方面积累了丰富的经验,在JavaScript领域颇有影响力。如今,他专注于动态语言下的数据库系统的研究和Web API的设计。此外,他创建并维护着多个流行的开源项目。
目录
对本书的赞誉
译者序
前言
第1章 JavaScript基础:值、变量、控制流程
1.1 值
1.1.1 数字
1.1.2 算术
1.1.3 字符串
1.1.4 一元操作符
1.1.5 布尔值、比较和布尔逻辑
1.1.6 表达式与语句
1.2 变量
1.3 环境
1.3.1 函数
1.3.2 prompt和confirm
1.3.3 print函数
1.3.4 修改环境
1.4 程序结构
1.4.1 条件执行
1.4.2 while循环与do循环
1.4.3 缩进代码
1.4.4 for循环
1.4.5 跳出循环
1.4.6 更新变量简便法
1.4.7 使用switch进行调度
1.4.8 大小写
1.4.9 注释
1.5 进一步认识类型
1.5.1 Undefined值
1.5.2 自动类型转换
1.5.3 自动类型转换的风险
1.5.4 进一步了解&&和||
第2章 函数
2.1 剖析函数定义
2.1.1 定义顺序
2.1.2 局部变量
2.1.3 嵌套作用域
2.1.4 栈
2.1.5 函数值
2.1.6 闭包
2.1.7 可选参数
2.2 技巧
2.2.1 避免重复
2.2.2 纯函数
2.2.3 递归
第3章 数据结构:对象与数组
3.1 问题:Emily姨妈家的猫
3.2 基本数据结构
3.2.1 属性
3.2.2 对象值
3.2.3 对象即集合
3.2.4 易变性
3.2.5 对象即集合:数组
3.2.6 方法
3.3 解决关于Emily姨妈家猫的问题
3.3.1 分离段落
3.3.2 找出相关段落
3.3.3 提取猫的名字
3.3.4 完整算法
3.3.5 清理代码
3.3.6 日期表示
3.3.7 日期提取
3.3.8 收集更多信息
3.3.9 数据表示
3.4 更多理论
3.4.1 arguments对象
3.4.2 完成扫尾工作
3.4.3 Math对象
3.4.4 可枚举属性
第4章 错误处理
4.1 问题类型
4.1.1 程序员错误
4.1.2 运行时错误
4.2 处理错误
4.2.1 返回特殊值
4.2.2 异常
4.2.3 异常之后的错误清除
4.2.4 Error对象
4.2.5 未处理的异常
4.2.6 选择性Catch
4.3 自动化测试
第5章 函数式编程
5.1 抽象
5.2 高阶函数
5.2.1 修改函数
5.2.2 归约函数
5.2.3 映射数组
5.3 隐士的悲惨故事
5.3.1 HTML
5.3.2 隐士的文本文件
5.3.3 找出段落
5.3.4 强调与脚注
5.3.5 移动脚注
5.3.6 生成HTML
5.3.7 转化隐士的书
5.4 其他函数技巧
5.4.1 操作符函数
5.4.2 分布应用
5.4.3 组合
第6章 面向对象编程
6.1 对象
6.1.1 定义方法
6.1.2 构造函数
6.1.3 从原型中构建
6.1.4 构造函数与原型
6.1.5 原型污染
6.1.6 对象即词典
6.1.7 指定接口
6.2 构建生态系统模拟
6.2.1 定义生态圈
6.2.2 空间里的点
6.2.3 呈现网格
6.2.4 昆虫的编程接口
6.2.5 生态圈对象
6.2.6 this及其作用域
6.2.7 有活力的生命
6.2.8 昆虫移动
6.2.9 更多生命形式
6.2.10 多态性
6.3 更逼真的模拟生态系统
6.3.1 继承
6.3.2 记录能量
6.3.3 添加植物
6.3.4 食草动物
6.3.5 为它带来生命
6.3.6 人工愚蠢
6.4 原型继承
6.4.1 类型定义工具
6.4.2 类型原型
6.4.3 对象的世界
6.4.4 instanceof操作符
6.4.5 混合类型
第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 可组合性
7.3.3 分层接口
7.3.4 参数对象
7.4 JS库
第8章 正则表达式
8.1 语法
8.1.1 匹配字符集
8.1.2 匹配单词和字符边界
8.1.3 重复模式
8.1.4 子表达式分组
8.1.5 多选一
8.2 匹配与替换
8.2.1 匹配方法
8.2.2 正则表达式和替换方法
8.2.3 动态创建RegExp 对象
8.3 解析.ini文件
8.4 结论
第9章 Web编程:速成课
9.1 互联网
9.1.1 URL网址
9.1.2 服务器端编程
9.1.3 客户端编程
9.2 Web脚本基础知识
9.2.1 windows对象
9.2.2 document对象
9.2.3 计时器
9.2.4 表单
9.2.5 表单脚本化
9.2.6 自动焦点
9.3 浏览器非兼容性
9.4 延伸阅读
第10章 文档对象模型
10.1 DOM元素
10.1.1 节点链接
10.1.2 节点类型
10.1.3 innerHTML属性
10.1.4 查找节点
10.1.5 创建节点
10.1.6 节点创建辅助函数
10.1.7 移动节点
10.1.8 print实现
10.2 样式表
10.2.1 样式属性
10.2.2 隐藏节点
10.2.3 定位
10.2.4 控制节点大小
10.3 警示语
第11章 浏览器事件
11.1 事件句柄
11.1.1 注册事件句柄
11.1.2 事件对象
11.1.3 鼠标相关事件类型
11.1.4 键盘事件
11.1.5 停止事件
11.1.6 事件对象正规化
11.1.7 跟踪焦点
11.1.8 表单事件
11.1.9 window事件
11.2 示例:实现推箱子
11.2.1 等级输入格式
11.2.2 程序设计
11.2.3 游戏板展示
11.2.4 控制器对象
第12章 HTTP请求
12.1 HTTP协议
12.2 XMLHttpRequest API
12.2.1 创建请求对象
12.2.2 简单的请求
12.2.3 发送异步请求
12.2.4 获取XML数据
12.2.5 读取JSON数据
12.2.6 基本的请求包装
12.3 学习HTTP
内容摘要
如果你只想阅读一本关于JavaScript的图书,那么《JavaScript编程精解》应该是你的选择。本书由世界级JavaScript程序员撰写,JavaScript之父和多位JavaScript专家鼎力推荐。本书适合作为系统学习JavaScript的参考书,它在写作思路上几乎与现有的所有同类书都不同,打破常规,将编程原理与运用规则完美地结合在一起,而且将所有知识点与一个又一个经典的编程故事融合在一起,读者可以在轻松的游戏式开发中学会JavaScript程序设计,趣味性十足,可操作性极强。
《JavaScript编程精解》全书一共12章:第1~3章介绍了JavaScript的基本语法,旨在帮助读者编写出正确的JavaScript程序,包含数字、算术、字符串、变量、程序结构、控制流程、类型、函数、对象和数组等基础和核心的内容;第4~7章讲解了JavaScript编程中的高级技术,目的是帮助读者编写更复杂的JavaScript程序,主要涉及错误处理、函数式编程、面向对象编程、模块化等重要内容;第8~12章则将重心转移到JavaScript环境中可用的工具上,分别详细讲解了正则表达式、与Web编程相关的知识、文档对象模型、浏览器事件和HTTP请求等。
主编推荐
·世界级JavaScript程序员力作,JavaScript之父Brendan Eich高度评价并强力推荐。
·JavaScript编程原理与运用规则完美融合,读者将在游戏式开发中学会JavaScript程序设计,是系统学习JavaScript程序设计的选择之作。
— 没有更多了 —
以下为对购买帮助不大的评价