具体描述
《JavaScript详解(第2版)》主要内容简介:JavaScript是目前最流行和最重要的Web编程语言。《JavaScript详解(第2版)》从JavaScript的编程结构开始,循序渐进地讲述了JavaScript及相关的CSS、W3C DOM、cookie、正则表达式和匹配模式,以及功能强大的Ajax。书中采用了大量课堂实践示例,附以详尽的代码行解释和实际结果输出,将JavaScript基础知识与高级技巧完美地展现出来。《JavaScript详解(第2版)》适合对Web开发和设计感兴趣的人员阅读,也可作为高校相关课程的教材。
作者简介
Ellie Quigley 硅谷传奇讲师,在多家知名高校和企业教授脚本语言已有20多年。她在加州大学圣克鲁兹分校讲授的Perl和Shell程序设计课程已经成为硅谷文化的一部 分。她所著的畅销书还包括UNIX Shells by Example、Perl by Example、PHP and MySQL by Example(与Marko Gargenta合著)。
目录信息
1.1 JavaScript 是什么 1
1.2 JavaScript 不是什么 2
1.3 JavaScript 的用处 3
1.4 JavaScript 及其在Web 页面中的位置 3
1.5 Ajax 是什么 5
1.6 JavaScript 是什么样子的 6
1.7 JavaScript 及其在Web 开发中承担的角色 7
1.8 JavaScript 和事件 9
1.9 标准化JavaScript 和W3C 11
1.9.1 JavaScript 对象 12
1.9.2 文档对象模型 12
1.10 关于浏览器 13
1.10.1 JavaScript 的版本 14
1.10.2 你的浏览器遵循标准吗 16
1.10.3 浏览器是否已启用JavaScript 16
1.11 JavaScript 代码放在哪儿 17
1.12 验证标签 20
1.12.1 W3C 验证工具 21
1.12.2 Validome 验证工具 21
1.13 应知应会 22
练习 23
第2 章 脚本的安装 24
2.1 HTML 文档与JavaScript 24
2.2 语法细节 27
2.2.1 区分大小写问题 27
2.2.2 自由形式及保留字 27
2.2.3 语句及分号 28
2.2.4 注释 28
2.2.5 <script>标签 29
2.3 生成HTML 并输出显示 30
2.3.1 字符串及字符串串联 30
2.3.2 write()及writeln()方法 31
2.4 关于调试 33
2.5 调试工具 33
2.5.1 Firefox 33
2.5.2 在Internet Explorer 8 中调试 36
2.5.3 JavaScript:URL 协议 37
2.6 JavaScript 与旧浏览器或受限的浏览器 37
2.7 应知应会 40
练习 41
第3 章 数据类型、字面量和变量 42
3.1 数据类型 42
3.1.1 基本数据类型 42
3.1.2 复合数据类型 47
3.2 变量 47
3.2.1 有效变量名 48
3.2.2 声明和初始化变量 48
3.2.3 动态或宽松类型语言 50
3.2.4 变量作用域 52
3.2.5 变量的拼接 52
3.3 常量 54
3.4 要注意的bug 55
3.5 应知应会 55
练习 56
第4 章 对话框 57
4.1 与用户交互 57
4.1.1 alert()方法 57
4.1.2 prompt()方法 59
4.1.3 confirm()方法 61
4.2 应知应会 62
练习 63
第5 章 运算符 64
5.1 JavaScript 运算符和表达式 64
5.1.1 赋值运算符 64
5.1.2 优先级和结合性 65
5.2 运算符类型 68
5.2.1 算术运算符 68
5.2.2 快捷赋值运算符 69
5.2.3 递增运算符和递减运算符 70
5.2.4 拼接运算符 72
5.2.5 比较运算符 73
5.2.6 逻辑运算符 78
5.2.7 条件运算符 83
5.2.8 位运算符 84
5.3 数字、字符串还是布尔值?数据类型转换 87
5.3.1 parseInt()函数 88
5.3.2 parseFloat()函数 90
5.3.3 eval()函数 91
5.4 特殊运算符 92
5.5 应知应会 93
练习 93
第6 章 条件选择 95
6.1 控制结构、块及复合语句 95
6.2 条件 95
6.2.1 if/else 96
6.2.2 if/else if 98
6.2.3 switch 99
6.3 循环 102
6.3.1 while 循环 102
6.3.2 do/while 循环 103
6.3.3 for 循环 104
6.3.4 for/in 循环 105
6.3.5 使用break 和continue控制循环 105
6.3.6 嵌套循环及标签 107
6.4 应知应会 109
练习 110
第7 章 函数 112
7.1 什么是函数 112
7.1.1 函数声明和调用 112
7.1.2 返回值 119
7.1.3 匿名函数变量 121
7.1.4 闭包 124
7.1.5 递归 125
7.1.6 函数是对象 129
7.2 调试技巧 129
7.2.1 函数语法 129
7.2.2 使用try/catch 和throw捕捉异常 131
7.3 应知应会 134
练习 134
第8 章 对象 136
8.1 什么是对象 136
8.1.1 对象及点语法 137
8.1.2 使用构造函数创建对象 137
8.1.3 对象的属性 139
8.1.4 对象的方法 140
8.2 类和用户自定义函数 142
8.2.1 什么是类 142
8.2.2 什么是this 142
8.2.3 内联函数作为对象的方法 145
8.3 对象字面量 146
8.4 操作对象 149
8.4.1 with 关键字 149
8.4.2 for/in 循环 151
8.5 通过原型扩展对象 152
8.5.1 使用prototype 属性为对象添加属性 154
8.5.2 原型查找链 155
8.5.3 使用原型为对象添加方法 157
8.5.4 所有对象都有的属性和方法 159
8.5.5 创建子类及继承 162
8.6 应知应会 164
练习 164
第9 章 JavaScript 核心对象 166
9.1 什么是核心对象 166
9.2 数组对象 166
9.2.1 数组的声明及填充 167
9.2.2 Array 对象属性 171
9.2.3 关联数组 173
9.2.4 嵌套数组 175
9.3 数组方法 178
9.4 Date 对象 184
9.4.1 Date 对象方法的使用 185
9.4.2 操纵日期及时间 187
9.4.3 通过prototype 属性自定义Date 对象 188
9.5 Math 对象 190
9.5.1 向上取整及向下取整 192
9.5.2 生成随机数 193
9.5.3 wrapper 对象 194
9.5.4 String 对象 195
9.5.5 Number 对象 205
9.5.6 Boolean 对象 207
9.5.7 Function 对象 209
9.5.8 再论关键字with 210
9.6 应知应会 211
练习 212
第10 章 浏览器对象模型:BOM 214
10.1 JavaScript 及浏览器对象模型 214
10.1.1 navigator 对象的使用 215
10.1.2 window 对象的使用 225
10.1.3 创建定时事件 231
10.1.4 Frame 的使用 240
10.1.5 location 对象 249
10.1.6 history 对象 253
10.1.7 screen 对象 256
10.2 应知应会 258
练习 258
第11 章 表单及输入设备的使用 259
11.1 文档对象模型及传统DOM 0 259
11.2 JavaScript 层次结构 259
11.3 关于HTML 表单 265
11.4 JavaScript 与form 对象 271
11.4.1 为表单及其输入类型(控件)命名 271
11.4.2 表单中的传统DOM 274
11.4.3 为表单及按钮命名 277
11.4.4 提交填写完成的表单 281
11.4.5 this 关键字 289
11.4.6 submit()及reset()方法 291
11.5 输入设备(控件)编程 295
11.6 应知应会 324
练习 324
第12 章 图片与链接 326
12.1 图片简介 326
12.1.1 重温HTML 中的图片 326
12.1.2 JavaScript 中的image对象 328
12.2 回顾链接 329
12.3 图片地图 333
12.3.1 使用src 属性动态替换图片 336
12.3.2 预加载图片和Image()构造函数 339
12.3.3 随机显示图片和onClick事件 341
12.3.4 图片地图与JavaScript 343
12.4 缩放图片以适应窗口 345
12.5 幻灯简介 347
12.5.1 带有控制按钮的简单幻灯展示 348
12.5.2 可单击的图片幻灯展示 351
12.6 动画和定时器 354
12.6.1 变换图片位置 354
12.6.2 改变图片的高度和宽度属性 355
12.7 应知应会 356
练习 357
第13 章 事件处理 358
13.1 事件处理函数介绍 358
13.2 事件处理的内联模型 358
13.2.1 HTML 和事件处理函数 359
13.2.2 设置事件处理函数 361
13.2.3 返回值 363
13.2.4 JavaScript 对象方法和事件 364
13.3 处理窗口事件或框架事件 366
13.3.1 onLoad 和onUnLoad事件 366
13.3.2 onFocus 和onBlur 事件函数 368
13.3.3 onResize 事件处理函数 371
13.4 鼠标事件处理 373
13.4.1 怎样使用鼠标事件 374
13.4.2 鼠标事件和图像——翻转 376
13.4.3 通过鼠标事件创建幻灯片 376
13.5 处理链接事件 379
13.6 处理表单事件 380
13.6.1 按钮 381
13.6.2 表单和按钮中的this 关键字 382
13.6.3 表单和onClick 事件处理函数 383
13.6.4 表单和onFocus、onBlur事件处理函数 384
13.6.5 表单和onChange 事件处理函数 386
13.6.6 表单和onSubmit 事件处理函数 387
13.6.7 HTML 事件处理函数和JavaScript 事件方法 391
13.6.8 onError 事件 393
13.7 event 对象 394
13.7.1 捕获和冒泡(滴漏和冒泡) 394
13.7.2 事件对象属性 395
13.7.3 使用事件对象属性 396
13.7.4 将事件传递给JavaScript函数 398
13.7.5 鼠标坐标 400
13.7.6 按键事件 404
13.8 处理事件的脚本模型 407
13.9 应知应会 412
练习 412
第14 章 CSS 与JavaScript 414
14.1 什么是CSS 414
14.2 什么是样式表 414
14.2.1 什么是兼容CSS 的浏览器 415
14.2.2 样式表的工作原理 415
14.3 CSS 程序结构 417
14.3.1 注释 417
14.3.2 组合 417
14.4 常用样式表属性 418
14.4.1 计量单位 420
14.4.2 使用颜色 421
14.4.3 使用字体 423
14.4.4 使用文本 425
14.4.5 使用背景和图片 427
14.4.6 使用边距和边框 429
14.5 样式表类型 432
14.5.1 嵌入式样式表和<style>标签 432
14.5.2 内联样式和<style>属性 435
14.6 链接的样式表 436
14.6.1 <link>标签 436
14.6.2 使用@import 导入 438
14.7 创建样式类 438
14.7.1 用类设定简单表格样式 439
14.7.2 使用特定类选择器 441
14.8 ID 选择器和ID 属性 443
14.9 使用<span>标签重写或添加样式 444
14.9.1 <span>标签和style属性 445
14.9.2 <span>标签和class属性 446
14.9.3 继承和上下文选择器 447
14.10 定位元素和层 449
14.10.1 绝对定位 450
14.10.2 <div>容器 455
14.10.3 绝对定位 455
14.10.4 相对定位 457
14.10.5 z 索引和三维 458
14.11 如何与JavaScript 融合 459
14.11.1 什么是DHTML 459
14.11.2 JavaScript 如何操作样式表 459
14.11.3 style 对象 462
14.11.4 className 属性 470
14.11.5 下拉菜单和提示框 472
14.12 应知应会 477
练习 478
第15 章 W3C DOM 与JavaScript 479
15.1 W3C DOM 479
15.2 理解DOM 节点 480
15.3 节点 481
15.3.1 父节点和子节点 482
15.3.2 兄弟节点 482
15.3.3 nodeName 和nodeType属性 483
15.3.4 空白bug 483
15.4 遍历DOM 484
15.5 DOM 查看器 486
15.6 查询DOM 的快捷方式 487
15.6.1 document.getElement-ById()方法 487
15.6.2 document.getElements-ByTagName()方法 490
15.6.3 对应于HTML 属性的JavaScript 属性 491
15.7 DOM 的修改(追加、复制和删除节点) 493
15.7.1 innerHTML 属性和元素的内容 493
15.7.2 更改元素的内容 495
15.7.3 使用DOM 创建新元素 496
15.7.4 在节点前插入 498
15.7.5 为节点创建属性 499
15.7.6 DOM 回顾:创建博客 501
15.7.7 使用DOM 创建表格 504
15.7.8 复制节点 507
15.7.9 删除节点 512
15.7.10 利用节点实现文本滚动 515
15.8 事件处理和DOM 517
15.8.1 HTML 内联方式 517
15.8.2 脚本方法 517
15.8.3 DOM 方法 518
15.8.4 冒泡和捕获 518
15.9 W3C 模型中的事件监听器 522
15.9.1 添加事件 522
15.9.2 注册多个事件 524
15.9.3 删除事件 526
15.9.4 Microsoft Internet Explorer中的事件监听器 528
15.9.5 回顾事件属性 530
15.10 不唐突的JavaScript 533
15.11 应知应会 539
练习 540
第16 章 cookie 543
16.1 什么是cookie 543
16.1.1 cookie 的组成 545
16.1.2 cookie 的属性 546
16.2 使用JavaScript 创建cookie 547
16.2.1 cookie 对象 548
16.2.2 设置cookie 属性 548
16.2.3 创建cookie 550
16.2.4 从服务器获取cookie 信息 552
16.2.5 删除cookie 554
16.2.6 使用浏览器删除cookie 556
16.3 应知应会 557
练习 557
第17 章 正则表达式和模式匹配 558
17.1 什么是正则表达式 558
17.2 创建正则表达式 560
17.2.1 字面量方式 560
17.2.2 构造函数 560
17.2.3 测试正则表达式 561
17.2.4 RegExp 对象的属性 564
17.3 使用字符串的正则表达式方法 566
17.3.1 match()方法 566
17.3.2 search()方法 567
17.3.3 replace()方法 568
17.3.4 split()方法 569
17.4 获取控制——元字符 571
17.4.1 点元字符 574
17.4.2 字符类 575
17.4.3 元符号 578
17.4.4 重复模式匹配元字符 580
17.4.5 锚元字符 587
17.4.6 或模式 592
17.5 用正则表达式验证表单 596
17.5.1 检查空字段 596
17.5.2 检查邮政编码 598
17.5.3 检查字母数据 600
17.5.4 删除多余字符 601
17.5.5 有效社会安全号码验证 604
17.5.6 验证电话号码 606
17.5.7 验证电子邮件地址 608
17.5.8 验证信用卡号 610
17.5.9 汇总 616
17.6 应知应会 619
练习 619
第18 章 Ajax(及JSON)简介 621
18.1 为什么要用Ajax 621
18.2 为什么最后才提到Ajax 623
18.3 建立Ajax 通信的步骤 623
18.3.1 步骤1:创建XMLHttp-Request 对象 623
18.3.2 步骤2:初始化对象 625
18.3.3 向服务器发送请求 628
18.3.4 步骤3:监控服务器响应状态 628
18.3.5 使用回调函数处理响应 630
18.3.6 浏览器缓存问题 632
18.4 结合起来 632
18.4.1 使用Ajax 从文件中获取文本 638
18.4.2 使用Ajax 从文件中获取XML 641
18.4.3 Ajax 和表单 644
18.5 Ajax 和JSON 651
18.5.1 JSON 数据结构 652
18.5.2 使用JSON 的步骤 652
18.5.3 JSON 综合示例 655
18.5.4 解决eval()安全问题 658
18.6 使用Firebug 调试Ajax 662
18.7 应知应会 664
练习 665
· · · · · · (收起)
读后感
it's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good book
it's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good book
it's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good book
it's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good book
it's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good bookit's good book
用户评价
这本书的结构安排体现了一种精心设计的学习路径,而不是简单地罗列知识点。它从基础类型和操作符开始,稳步过渡到函数式编程范式,最终导向面向对象的高级主题,整个过程非常流畅,没有出现知识点跳跃或者逻辑断裂的情况。我个人特别喜欢它在讲解原型链继承时所采用的对比方法,它不仅详细演示了ES5时代的原型继承的复杂性,同时也清晰地对比了ES6 `class`语法带来的语法糖的便利,并且没有回避`class`在底层依然是基于原型的本质。这种对比性的讲解,极大地帮助我理解了JavaScript面向对象编程的演进历程。另外,对于模块化系统的讲解也是业界顶尖水平,CommonJS、AMD、ES Modules的加载机制、解析过程以及如何在不同环境下进行互操作,作者都给出了详尽的图解和代码实现,让我彻底弄清了项目打包工具如Webpack和Rollup背后的原理。这对于维护大型代码库至关重要。
坦白说,我对技术书籍的评判标准通常比较苛刻,因为很多号称“详解”的书籍,读起来却更像是对MDN文档的重新组织和润色,缺乏作者独特的见解和实战经验的沉淀。然而,这本第二版在处理复杂概念时展现出的那种庖丁解牛般的耐心和条理性,着实让我刮目相看。特别是关于内存管理和垃圾回收机制的那部分,作者并没有用过于晦涩的术语堆砌,而是通过生动的类比和具体的内存快照分析,将那些原本抽象的“标记-清除”、“引用计数”等策略解释得井井有条,让我对避免不必要的内存泄漏有了更直观的认识。再者,书中对于浏览器环境(DOM/BOM)和Node.js环境的API差异也做了非常细致的对比和区分,这对于需要进行全栈开发的工程师来说,避免了大量在不同环境中调试时产生的困惑。我甚至发现,即便是过去我一直忽略的一些冷门但重要的API,比如关于`MutationObserver`的详细用法,在这本书里也得到了恰到好处的篇幅和示例,足见作者的全面性。
这本《JavaScript详解(第2版)》的排版真是让人眼前一亮,尤其是那些代码示例,清晰得像是直接从官方文档里抠出来的。我最欣赏的是它对ECMAScript新特性的覆盖深度,不像有些书只是蜻蜓点水地提一下新语法,这本书是实实在在地带你深入理解背后的运行机制。比如说,关于`Proxy`和`Reflect`的那几章,作者没有满足于展示如何拦截操作,而是花了大量篇幅去解释它们在设计模式,特别是元编程层面上可以扮演的角色。读完之后,我感觉自己对如何构建高度灵活且易于维护的框架有了全新的认识。更不用说,关于异步编程的讲解,它不再局限于`Promise`链式调用,而是细致地剖析了`async/await`的语法糖下面,事件循环(Event Loop)是如何精确控制微任务和宏任务的执行顺序的。即便是对于有多年经验的开发者来说,这种自底向上的解析也能带来很多“原来如此”的顿悟时刻。总而言之,它不仅仅是一本工具书,更像是一份深入理解JavaScript运行时环境的“内参报告”,非常适合想要从“会用”迈向“精通”的进阶学习者。
从阅读体验的角度来看,这本书的文字风格非常严谨而富有洞察力,它有一种老派技术专家娓娓道来的沉稳感,既不卖弄深奥,也不流于肤浅。作者在解释那些经常引起社区争论的概念时,总是能保持中立且基于规范(Specification)的立场,给出最权威的解释,这在我查阅旧项目遗留问题时提供了极大的帮助。比如,在解析`this`绑定的规则时,它会精确区分函数调用、方法调用、构造函数调用和显式绑定(`call/apply/bind`)的优先级,并辅以详尽的执行上下文图示,彻底消除了我对这个长期困扰着无数JS开发者的核心概念的任何模糊之处。这本书的价值不在于教会你最新的框架用法,而在于为你打下一个坚不可摧的基础,让你无论面对未来任何JS的变种或新标准,都能迅速适应并理解其底层逻辑。这绝对是一本值得收藏并反复研读的经典之作。
让我感到有些意外的是,这本书在讨论性能优化时,并没有停留在写出“快”的代码层面,而是深入到JavaScript引擎如何执行代码的层面。比如,它详细分析了JIT(Just-In-Time)编译器的优化过程,解释了为什么某些代码结构(例如,循环内避免隐式类型转换或函数参数的稳定)能被引擎更有效地内联和优化。这种对“机器码生成”层面的探讨,对于我这种追求极致性能的开发者来说,是极其宝贵的财富。读完这些章节,我写代码的习惯都潜移默化地改变了,不再仅仅是堆砌库函数,而是会更注意代码的可预测性和引擎的执行效率。再者,对于错误处理和调试技巧的阐述,也远超同类书籍的水平,它不仅仅教你如何使用`try...catch`,而是深入讲解了调用栈的构建、错误传播的机制,以及如何利用调试器进行高级断点设置和性能剖析,让调试过程从“碰运气”变成了有章可循的科学分析。
挺好的,讲得挺详细的,就是有些语法错误
挺好的,讲得挺详细的,就是有些语法错误
随便翻翻。不过再次证明JavaScript这块里的烂书是最多的。
读过的最好的JavaScript教材
挺好的,讲得挺详细的,就是有些语法错误