JavaScript编程精解

出版时间:2012-10-1  出版社:机械工业出版社华章公司  作者:Marijn Haverbeke  页数:162  译者:徐涛  
Tag标签:无  

前言

前言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

内容概要

如果你只想阅读一本关于JavaScript的图书,那么本书应该是你的首选。本书由世界级JavaScript程序员撰写,JavaScript之父和多位JavaScript专家鼎力推荐。本书适合作为系统学习JavaScript的参考书,它在写作思路上几乎与现有的所有同类书都不同,打破常规,将编程原理与运用规则完美地结合在一起,而且将所有知识点与一个又一个经典的编程故事融合在一起,读者可以在轻松的游戏式开发中学会JavaScript程序设计,趣味性十足,可操作性极强。
全书一共12章:第1~3章介绍了JavaScript的基本语法,旨在帮助读者编写出正确的JavaScript程序,包含数字、算术、字符串、变量、程序结构、控制流程、类型、函数、对象和数组等最基础和最核心的内容;第4~7章讲解了JavaScript编程中的高级技术,目的是帮助读者编写更复杂的JavaScript程序,主要涉及错误处理、函数式编程、面向对象编程、模块化等重要内容;第8~12章则将重心转移到JavaScript环境中可用的工具上,分别详细讲解了正则表达式、与Web编程相关的知识、文档对象模型、浏览器事件和HTTP请求等。

作者简介

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

章节摘录

版权页:   插图:   应用于模拟环境中时,这种新动物(Clever Lichen Eater)比之前的简单同类动物(Lichen Eater)活得要长久。如果给定一个足够大的生活空间,部分环境食物充足,部分环境食物不足,而不是每个地方都一样,那么这个生态系统似乎可以保持稳定。 6.4原型继承 整个生态圈应该为我们在实际程序中如何使用对象提供一些启发。本章剩余部分将针对Java Script里的继承和继承相关的问题做更深入的讲解。 首先,来复习一些理论。我们经常听到一些学习面向对象编程的学生讨论继承的正确和错误使用,这些谈话通常很冗长也很精细。重点要记住:继承归根结底只是一种使程序员可以偷懒的技巧(这里使用“偷懒”是最贴切的说法),可以编写更少的代码。因此,继承的使用是否正确的问题可以归结为代码是否正常工作以及如何避免不必要重复工作的问题。尽管如此,这些学生采用的原则为我们思考继承相关的内容提供了很好的途径。 继承是创建新类型对象——子类型(subtype),子类型基于父类型(supertype)。子类型拥有父类型所有的属性和方法(从父类型继承得到),然后修改其中的部分内容或者添加新的内容。继承最好在子类型模型可以被视为父类型对象的时候使用。 因此,钢琴类型(Piano)可以是乐器类型(Instrument)的子类型,因为钢琴是一种乐器。钢琴有一组钢琴键,我们可能想让钢琴作为Array的子类型,但钢琴不是数组,像数组一样实现它一定会导致各种各样的愚蠢错误。例如,钢琴也有踏板,为什么piano[0]给出是第一个键,而不是第一个踏板呢?实际情况是,钢琴有钢琴键也有踏板,因此最好给piano对象一个属性keys(钢琴键),再给一个属性pedals(踏板),两者都拥有数组。 也可以让一个子类型作为另外一个子类型的父类型。有些问题最好的解决方法就是构建一个复杂的类型家族树。必须注意不要有太多继承。继承有自己的组合代码方式,过度使用会使代码之间的衔接混乱,并且很难修改。 6.4.1类型定义工具 使用new关键字和构造函数的prototype属性都是定义类型的特定方式,这些是我们到目前为止一直使用的。对于简单的对象(比如生态圈生物),这种方式是非常有效的。可是,当程序过度使用继承时,这种创建对象的方法很快就显得笨拙了。

媒体关注与评论

编程原理与运用规则的简练、完美融合。我喜欢游戏式的程序开发教程。本书再次点燃了我学习编程的热情。对了,是JavaScript!——BrendanEich,JavaScript之父因为这本书,我成为了更棒的架构师、作家、咨询师和开发者。——AngusCroll,Twitter开发者如果你决定只买一本有关JavaScript的书,那么就应是MarijnHaverbeke的这本书。——JoeydeVilla,GlobalNerdy本书不仅是学习JavaScript最棒的教材之一,也是通过学习JavaScript进而学习现代编程的优秀图书。当有人问我如何学好JavaScript时,我会推荐这本书。——ChrisWilliams,美国JSConf组织者我读过的最棒的JavaScript书籍之一。——ReyBango,微软Client-Web社区项目经理和jQuery团队成员这本书不仅是一本非常不错的JavaScript指导书,而且是一本很棒的编程指导书。——BenNadel,Epicenter咨询公司首席软件工程师真是本好书。——DesignShack这本书对编程基本原理的详述以及对栈和环境等概念的解释非常到位。注重细节使本书从其他的JavaScript书中脱颖而出。——Designorati学习JavaScript的好书。——CraigBuckler,OptimalWorksWebDesign公司

编辑推荐

《JavaScript编程精解》编辑推荐:世界级JavaScript程序员力作,JavaScript之父Brendan Eich高度评价并强力推荐。JavaScript编程原理与运用规则完美融合,读者将在游戏式开发中学会JavaScript程序设计,是系统学习JavaScript程序设计的首选之作。

名人推荐

编程原理与运用规则的简练、完美融合。我喜欢游戏式的程序开发教程。本书再次点燃了我学习编程的热情。对了,是JavaScript!——Brendan Eich,JavaScript之父因为这本书,我成为了更棒的架构师、作家、咨询师和开发者。——Angus Croll,Twitter开发者如果你决定只买一本有关JavaScript的书,那么就应是Marijn Haverbeke的这本书。——Joey deVilla,Global Nerdy本书不仅是学习JavaScript最棒的教材之一,也是通过学习JavaScript进而学习现代编程的优秀图书。当有人问我如何学好JavaScript时,我会推荐这本书。——Chris Williams,美国JSConf组织者我读过的最棒的JavaScript书籍之一。——Rey Bango,微软Client-Web社区项目经理和jQuery团队成员这本书不仅是一本非常不错的JavaScript指导书,而且是一本很棒的编程指导书。——Ben Nadel,Epicenter咨询公司首席软件工程师真是本好书。——Design Shack这本书对编程基本原理的详述以及对栈和环境等概念的解释非常到位。注重细节使本书从其他的JavaScript书中脱颖而出。——Designorati学习JavaScript的好书。——Craig Buckler,OptimalWorks Web Design公司

图书封面

图书标签Tags

评论、评分、阅读与下载


    JavaScript编程精解 PDF格式下载


用户评论 (总计60条)

 
 

  •   本书着重于讲编程思想,如果其他语言学得不是很好的人,建议不要看这本书。
  •   书很不错 由浅入深 适合程序员看
  •   从博客园中认识汤姆大叔,从他的博客中学习到了丰富的js知识,我想这么好的书由他来翻译一定是精彩的,书不厚,让人读起来没有那么大的压力,内容还没有看,相信不会错!
  •   书挺薄的。内容大概的看了一下,挺不错的一本书!值得推荐!
  •   内容精辟,推荐阅读
  •   很薄,但很精简,相关内容都有,就看自己学的决心了!随身带一本,没事就研究和学习。。。
  •   暂时好没看 感觉和一般的讲js的书有点不一样
  •   很薄不过看内容应该不错
  •   内容写的不错,需要有一定基础的阅读
  •   大概浏览了下,可以当做参考书
  •   刚收到的书,送货速度相当的给力,不过还没看呢!应该不错吧!
  •   内容不错,就是没想象中的厚
  •   读了大叔很多的blog,本书内容非常不错
  •   如果想深入了解 可以一看
  •   大叔翻译必属精品。包装很好,送货很快OWO还没看内容
  •   但是是一本很好的书!
  •   书太溥,价格不菲
  •   书有点薄,帮别人带的,希望不错
  •   需要细嚼慢咽,慢慢品味
  •   看了一点 ,总体感觉不错。 待读
  •   替同事下单的, 他说不错.
  •   翻译的蛮好的 物流人员也辛苦了 人也那么热情
  •   信大叔, 错不了!
  •   冲着汤姆大叔买的,在博客园上看到的
  •   nice简单好学
  •   买回来了,还没来得及看
  •   还没看,物流不是很快。不过还可以
  •   大致看了一下内容,本书适合有一定js基础的人看
  •   书挺好的额,除了基础的方面,还稍微讲解了AJAX等现在领先的使用的技术。
  •   书的页码不多 但是基础知识讲解得很到位
  •   很好,正在学习中,不是很难
  •   1天就看完了,只适合新手看。
  •   还行,内容比较少,要精通还需参考书
  •   很好,印刷不错,写的也详细
  •   一般,感觉肤浅,比较适合新手
  •   包装也不错!支持下!
  •   书很薄啊...可能不错吧...也许都是精华...需要仔细读一下...
  •   朋友买的书~~~~~好专业啊
  •   不错,挺喜欢的!!!!!!!!!!!!!!
  •   翻译不是很好,初学者可能有点理解困难...
  •   比较薄,容易看
  •   但是对于深入理解或者动手写大规模的程序还远得很。毕竟太薄。
  •   书太薄了,比想象中要薄好多
  •   书的纸质不太好
  •   我个人觉字体有点小,总体知识没有太多新鲜。
  •   只要你写过几行代码,或读过几页编程书,就看不下该书写得太简单了
  •   本书的英文原版很不错,可以中文版翻译的真的很蹩脚。买原版,不要买翻译版本
  •   书很不错,不过没有我想像的那么厚,打个五分吧
  •   知识很精炼知识很精炼
  •   书形象打比喻的方法说明javascript,不错。适合初学者一看
  •   您好!我是 Eloquent JavaScript 读者。最近作者计划再版,以众筹的形式筹集资金,以决定再版的深度和投入的精力。现在筹集了大约 8k 欧元,进入平台期,这个钱只够重写一部分的。请大家多多支持!作者筹款主页在这 https://eloquentjavascript.net/2nd_edition/ 请核实并考虑!非常感谢!
  •   好书,适合快速入门,送货及时
  •   书中废话较少,译文不错
  •   内容看起来不枯燥,译者也是值得信赖的业内人士。
  •   很不错的一本书。很好。
  •   不错,可以读一读的js
  •   原作还不错,有人吐槽翻译不好,我没觉得啊。书中例子很形象,至少让人读得下去。
  •   看着是汤姆大叔的翻译,才去买的。里面内容没有汤姆大叔翻译的博客精彩
  •   一晚上看了前三章,属于比较初级的读本,介绍函数的时候不会暴力的全部一次列出,而是慢慢地引入,什么地方用到什么地方才学,不是字典型书籍。最大弊端是这个翻译,有3 4段我到现在还不知道译者所说的“这种情况”指的是什么情况,而且读起来很多地方都解释不通,甚至有时候怀疑作者是不是谷歌翻译的,晕,最好还是买英文原版吧!
  •   湊單幫帶
 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7