出版社: 人民邮电出版社
译者: 曹力 / 张欣
出版年: 2006年9月
页数: 670
定价: 59.00元
装帧: 简裝本
丛书: 图灵程序设计丛书·Web开发系列
ISBN: 9787115152091
内容简介 · · · · · ·
JavaScript最新经典教程 * Amazon超级畅销书 * AJAX程序员必备
随着国内的计算机图书市场越来越细化,各类引进版和原创图书在各自领域内如雨后春笋般展露头角,各类“经典”和“圣经”横空出世。但是有一个领域内却一直遗留了大片空白,就是JavaScript类图书。除了O'Reilly的《JAVASCRIPT权威指南》之外,国内一直没有出现过特别优秀的同类图书。就在这时,Wrox的《Professional JavaScript for Web Developers》走进了我们的视野,中文名是《JAVASCRIPT高级程序设计》
JavaScript是目前Web客户端开发的主要编程语言,也是Ajax的核心技术之一。本书从最早期Netscape浏览器中的JavaScript 开始讲起,直到当前它对XML和Web服务的具体支持...
JavaScript最新经典教程 * Amazon超级畅销书 * AJAX程序员必备
随着国内的计算机图书市场越来越细化,各类引进版和原创图书在各自领域内如雨后春笋般展露头角,各类“经典”和“圣经”横空出世。但是有一个领域内却一直遗留了大片空白,就是JavaScript类图书。除了O'Reilly的《JAVASCRIPT权威指南》之外,国内一直没有出现过特别优秀的同类图书。就在这时,Wrox的《Professional JavaScript for Web Developers》走进了我们的视野,中文名是《JAVASCRIPT高级程序设计》
JavaScript是目前Web客户端开发的主要编程语言,也是Ajax的核心技术之一。本书从最早期Netscape浏览器中的JavaScript 开始讲起,直到当前它对XML和Web服务的具体支持,内容主要涉及JavaScript的语言特点、JavaScript与浏览器的交互、更高级的 JavaScript技巧,以及与在Web应用程序中部署JavaScript解决方案有关的问题,如错误处理、调试、安全性、优化/混淆化、XML和 Web服务,最后介绍应用所有这些知识来创建动态用户界面。
本书适合有一定编程经验的开发人员阅读,也可作为高校相关专业课程的教材。
新增DOM概念,如何实现正则表达式进行数据验证和字符串操作,把JavaScript联系到Web用户界面的事件处理方法; 数据验证、表排序和错误处理的方法等
目录
第1章 JavaScript是什么 1
1.1 历史简述 1
1.2 JavaScript实现 2
1.2.1 ECMAScript 3
1.2.2 DOM 5
1.2.3 BOM 8
1.3 小结 8
第2章 ECMAScript基础 9
2.1 语法 9
2.2 变量 10
2.3 关键字 12
2.4 保留字 12
2.5 原始值和引用值 13
2.6 原始类型 13
2.6.1 typeof运算符 14
2.6.2 Undefined类型 14
2.6.3 Null类型 15
2.6.4 Boolean类型 15
2.6.5 Number类型 15
2.6.6 String类型 17
2.7 转换 18
2.7.1 转换成字符串 18
2.7.2 转换成数字 19
2.7.3 强制类型转换 20
2.8 引用类型 22
2.8.1 Object类 22
2.8.2 Boolean类 23
2.8.3 Number类 23
2.8.4 String类 24
2.8.5 instanceof运算符 28
2.9 运算符 28
2.9.1 一元运算符 28
2.9.2 位运算符 32
2.9.3 Boolean运算符 37
2.9.4 乘性运算符 40
2.9.5 加性运算符 41
2.9.6 关系运算符 42
2.9.7 等性运算符 43
2.9.8 条件运算符 45
2.9.9 赋值运算符 45
2.9.10 逗号运算符 46
2.10 语句 46
2.10.1 if语句 46
2.10.2 迭代语句 47
2.10.3 有标签的语句 48
2.10.4 break语句和continue语句 48
2.10.5 with语句 50
2.10.6 switch语句 50
2.11 函数 51
2.11.1 无重载 53
2.11.2 arguments对象 53
2.11.3 Function类 54
2.11.4 闭包 56
2.12 小结 57
第3章 对象基础 58
3.1 面向对象术语 58
3.1.1 面向对象语言的要求 58
3.1.2 对象的构成 59
3.2 对象应用 59
3.2.1 声明和实例化 59
3.2.2 对象引用 59
3.2.3 对象废除 59
3.2.4 早绑定和晚绑定 60
3.3 对象的类型 60
3.3.1 本地对象 60
3.3.2 内置对象 70
3.3.3 宿主对象 75
3.4 作用域 75
3.4.1 公用、受保护和私有作用域 75
3.4.2 静态作用域并非静态的 76
3.4.3 关键字this 76
3.5 定义类或对象 78
3.5.1 工厂方式 78
3.5.2 构造函数方式 80
3.5.3 原型方式 80
3.5.4 混合的构造函数/原型方式 81
3.5.5 动态原型方法 82
3.5.6 混合工厂方式 83
3.5.7 采用哪种方式 84
3.5.8 实例 84
3.6 修改对象 86
3.6.1 创建新方法 86
3.6.2 重定义已有方法 87
3.6.3 极晚绑定 88
3.7 小结 88
第4章 继承 89
4.1 继承机制实例 89
4.2 继承机制的实现 90
4.2.1 继承的方式 90
4.2.2 一个更实际的例子 96
4.3 其他继承方式 100
4.3.1 zInherit 100
4.3.2 xbObjects 104
4.4 小结 108
第5章 浏览器中的JavaScript 109
5.1 HTML中的JavaScript 109
5.1.1 〈script/〉标签 109
5.1.2 外部文件格式 110
5.1.3 内嵌代码和外部文件 111
5.1.4 标签放置 111
5.1.5 隐藏还是不隐藏 113
5.1.6 〈noscript/〉标签 113
5.1.7 XHTML中的改变 114
5.2 SVG中的JavaScript 116
5.2.1 SVG基础 116
5.2.2 SVG中的〈script/〉标签 117
5.2.3 SVG中的标签放置 118
5.3 BOM 119
5.3.1 window对象 119
5.3.2 document对象 130
5.3.3 location对象 133
5.3.4 navigator对象 135
5.3.5 screen对象 136
5.4 小结 137
第6章 DOM基础 138
6.1 什么是DOM? 138
6.1.1 XML简介 138
6.1.2 针对XML的API 141
6.1.3 节点的层次 141
6.1.4 特定语言的DOM 144
6.2 对DOM的支持 145
6.3 使用DOM 145
6.3.1 访问相关的节点 145
6.3.2 检测节点类型 146
6.3.3 处理特性 147
6.3.4 访问指定节点 148
6.3.5 创建和操作节点 150
6.4 HTML DOM特征功能 155
6.4.1 让特性像属性一样 155
6.4.2 table方法 156
6.5 遍历DOM 158
6.5.1 NodeIterator 158
6.5.2 TreeWalker 163
6.6 测试与DOM标准的一致性 165
6.7 DOM Level 3 166
6.8 小结 166
第7章 正则表达式 167
7.1 正则表达式支持 167
7.1.1 使用RegExp对象 168
7.1.2 扩展的字符串方法 169
7.2 简单模式 170
7.2.1 元字符 170
7.2.2 使用特殊字符 170
7.2.3 字符类 172
7.2.4 量词 174
7.3 复杂模式 177
7.3.1 分组 177
7.3.2 反向引用 178
7.3.3 候选 179
7.3.4 非捕获性分组 180
7.3.5 前瞻 181
7.3.6 边界 182
7.3.7 多行模式 183
7.4 理解RegExp对象 184
7.4.1 实例属性 184
7.4.2 静态属性 185
7.5 常用模式 186
7.5.1 验证日期 187
7.5.2 验证信用卡号 188
7.5.3 验证电子邮件地址 192
7.6 小结 193
第8章 检测浏览器和操作系统 194
8.1 navigator对象 194
8.2 检测浏览器的方式 194
8.2.1 对象/特征检测法 194
8.2.2 user-agent字符串检测法 195
8.3 user-agent字符串简史 196
8.3.1 Netscape Navigator 3.0与 IE3.0 196
8.3.2 Netscape Communicator 4.0与IE 4.0 197
8.3.3 IE 5.0及更高版本 198
8.3.4 Mozilla 198
8.3.5 Opera 200
8.3.6 Safari 201
8.3.7 结语 201
8.4 浏览器检测脚本 201
8.4.1 方法学 202
8.4.2 第一步 202
8.4.3 检测Opera 204
8.4.4 检测Konqueror/Safari 206
8.4.5 检测IE 208
8.4.6 检测Mozilla 209
8.4.7 检测Netscape Communicator 4.x 210
8.5 平台/操作系统检测脚本 211
8.5.1 方法学 211
8.5.2 第一步 212
8.5.3 检测Windows操作系统 212
8.5.4 检测Macintosh操作系统 214
8.5.5 检测Unix操作系统 214
8.6 全部脚本 215
8.7 例子:登录页面 219
8.8 小结 224
第9章 事件 225
9.1 今天的事件 225
9.2 事件流 226
9.2.1 冒泡型事件 226
9.2.2 捕获型事件 227
9.2.3 DOM事件流 228
9.3 事件处理函数/监听函数 229
9.3.1 IE 230
9.3.2 DOM 231
9.4 事件对象 232
9.4.1 定位 233
9.4.2 属性/方法 233
9.4.3 相似性 235
9.4.4 区别 238
9.5 事件的类型 240
9.5.1 鼠标事件 240
9.5.2 键盘事件 244
9.5.3 HTML事件 246
9.5.4 变化事件 251
9.6 跨平台的事件 252
9.6.1 EventUtil对象 252
9.6.2 添加/删除事件处理函数 252
9.6.3 格式化event对象 254
9.6.4 获取事件对象 258
9.6.5 示例 259
9.7 小结 260
第10章 高级DOM技术 261
10.1 样式编程 261
10.1.1 DOM样式的方法 263
10.1.2 自定义鼠标提示 264
10.1.3 可折叠区域 265
10.1.4 访问样式表 266
10.1.5 最终样式 270
10.2 innerText和innerHTML 271
10.3 outerText和outerHTML 273
10.4 范围 274
10.4.1 DOM中的范围 274
10.4.2 IE中的范围 284
10.4.3 范围在实际中的应用 288
10.5 小结 288
第11章 表单和数据完整性 289
11.1 表单基础 289
11.2 对〈form/〉元素进行脚本编写 291
11.2.1 获取表单的引用 291
11.2.2 访问表单字段 291
11.2.3 表单字段的共性 292
11.2.4 聚焦于第一个字段 292
11.2.5 提交表单 293
11.2.6 仅提交一次 294
11.2.7 重置表单 295
11.3 文本框 295
11.3.1 获取/更改文本框的值 296
11.3.2 选择文本 297
11.3.3 文本框事件 298
11.3.4 自动选择文本 298
11.3.5 自动切换到下一个 299
11.3.6 限制textarea的字符数 300
11.3.7 允许/阻止文本框中的字符 301
11.3.8 使用上下按键操作数字文本 306
11.4 列表框和组合框 308
11.4.1 访问选项 309
11.4.2 获取/更改选中项 309
11.4.3 添加选项 310
11.4.4 删除选项 311
11.4.5 移动选项 312
11.4.6 重新排序选项 313
11.5 创建自动提示的文本框 313
11.5.1 匹配 314
11.5.2 内部机制 314
11.6 小结 316
第12章 表格排序 317
12.1 起点——数组 317
12.2 对单列的表格排序 319
12.2.1 比较函数 320
12.2.2 sortTable()函数 320
12.3 对多列表格进行排序 323
12.3.1 比较函数生成器 323
12.3.2 修改sortTable()方法 324
12.3.3 逆序排列 325
12.3.4 对不同的数据类型进行排序 327
12.3.5 高级排序 330
12.4 小结 334
第13章 拖放 335
13.1 系统拖放 335
13.1.1 拖放事件 336
13.1.2 数据传输对象dataTransfer 341
13.1.3 dragDrop()方法 345
13.1.4 优点及缺点 346
13.2 模拟拖放 346
13.2.1 代码 347
13.2.2 创建放置目标 349
13.2.3 优点及缺点 352
13.3 zDragDrop 352
13.3.1 创建可拖动元素 352
13.3.2 创建放置目标 353
13.3.3 事件 353
13.3.4 例子 354
13.4 小结 355
第14章 错误处理 356
14.1 错误处理的重要性 356
14.2 错误和异常 357
14.3 错误报告 358
14.3.1 IE(Windows) 358
14.3.2 IE(MacOS) 359
14.3.3 Mozilla(所有平台) 359
14.3.4 Safari(MacOS) 360
14.3.5 Opera 7(所有平台) 361
14.4 处理错误 362
14.4.1 onerror事件处理函数 362
14.4.2 try...catch语句 365
14.5 调试技巧 370
14.5.1 使用警告框 370
14.5.2 使用Java控制台 371
14.5.3 将消息写入JavaScript控制台 (仅限Opera 7+) 372
14.5.4 抛出自定义错误 372
14.5.5 JavaScript校验器 373
14.6 调试器 374
14.6.1 Microsoft Script Debugger 374
14.6.2 Venkman 376
14.7 小结 383
第15章 JavaScript中的XML 384
15.1 浏览器中的XML DOM支持 384
15.1.1 IE中的XML DOM支持 384
15.1.2 Mozilla中XML DOM支持 388
15.1.3 通用接口 393
15.2 浏览器中的XPath支持 403
15.2.1 XPath简介 403
15.2.2 IE中的XPath支持 404
15.2.3 Mozilla中的XPath支持 404
15.3 浏览器中的XSLT支持 408
15.3.1 IE中的XSLT支持 410
15.3.2 Mozilla中XSLT支持 413
15.4 小结 415
第16章 客户端与服务器端的通信 416
16.1 cookie 416
16.1.1 cookie的成分 416
16.1.2 其他安全限制 417
16.1.3 JavaScript中的cookie 417
16.1.4 服务器端的cookie 419
16.1.5 在客户端与服务器端之间传递cookie 422
16.2 隐藏框架 423
16.3 HTTP请求 426
16.3.1 使用HTTP首部 428
16.3.2 实现的复制品 429
16.3.3 进行GET请求 430
16.3.4 进行POST请求 430
16.4 LiveConnect请求 431
16.4.1 进行GET请求 431
16.4.2 进行POST请求 433
16.5 智能HTTP请求 435
16.5.1 get()方法 435
16.5.2 post()方法 438
16.6 实际使用 439
16.7 小结 439
第17章 Web服务 440
17.1 Web服务快速入门 440
17.1.1 Web服务是什么? 440
17.1.2 WSDL 441
17.2 IE中的Web服务 443
17.2.1 使用WebService组件 444
17.2.2 WebService组件例子 445
17.3 Mozilla中的Web服务 447
17.3.1 加强的特权 447
17.3.2 使用SOAP方法 448
17.3.3 使用WSDL代理 451
17.4 跨浏览器的方案 454
17.4.1 WebService对象 454
17.4.2 Temperature 服务 456
17.4.3 使用TemperatureService对象 458
17.5 小结 458
第18章 与插件进行交互 459
18.1 为何使用插件 459
18.2 流行的插件 460
18.3 MIME类型 460
18.4 嵌入插件 461
18.4.1 加入参数 461
18.4.2 Netscape 4.x 462
18.5 检测插件 462
18.5.1 检测Netscape式插件 463
18.5.2 检测ActiveX插件 467
18.5.3 跨浏览器检测 469
18.6 Java applet 470
18.6.1 嵌入applet 470
18.6.2 在JavaScript中引用applet 471
18.6.3 创建applet 471
18.6.4 JavaScript到Java的通信 472
18.6.5 Java到JavaScript的通信 475
18.7 Flash动画 477
18.7.1 嵌入Flash动画 477
18.7.2 引用Flash动画 478
18.7.3 JavaScript到Flash的通信 478
18.7.4 Flash到JavaScript通信 481
18.8 ActiveX控件 483
18.9 小结 485
第19章 部署问题 486
19.1 安全性 486
19.1.1 同源策略 486
19.1.2 窗口对象问题 487
19.1.3 Mozilla特有的问题 488
19.1.4 资源限制 490
19.2 国际化 491
19.2.1 使用JavaScript检测语言 491
19.2.2 策略 492
19.2.3 字符串的思考 492
19.3 优化JavaScript 495
19.3.1 下载时间 495
19.3.2 执行时间 499
19.4 知识产权的问题 512
19.4.1 混淆 512
19.4.2 Microsoft Script Encoder(仅IE) 513
19.5 小结 514
第20章 JavaScript的未来 515
20.1 ECMAScript 4 515
20.1.1 Netscape的提案 515
20.1.2 实现 521
20.2 ECMAScript for XML 522
20.2.1 途径 522
20.2.2 for each..in循环 524
20.2.3 新的类 524
20.2.4 实现 532
20.3 小结 532
索引
作者简介 · · · · · ·
Nicholas C.Zakas世界知名的JavaScript专家和Web开发人员。Nicholas拥有丰富的Web开发和界面设计经验,曾经参与许多世界大公司的Web解决方案开发,并与他人合作撰写了畅销书《Ajax高级程序设计》。
豆瓣成员常用的标签(共169个) · · · · · ·
丛书信息
喜欢读"JavaScript高级程序设计"的人也喜欢的电子书 · · · · · ·
喜欢读"JavaScript高级程序设计"的人也喜欢 · · · · · ·
JavaScript高级程序设计的话题 · · · · · · ( 全部 条 )
JavaScript高级程序设计的书评 · · · · · · ( 全部 67 条 )
> 更多书评67篇
-
halluct (自个儿玩儿。)
完整的Javascript包括核心ECMAScript, DOM和BOM。 ECMAScript: ECMAScript描述了语法,类型,语句,关键字,保留字,运算符和对象。ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。 DOM: DOM是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。DOM通过创建树来表示文档。 DOM Level1由DOM core和DOM HTML构成。目标:规划文档的结构。 DOM Level2引入了DO... (1回应)2012-04-28 11:56 2人喜欢
完整的Javascript包括核心ECMAScript, DOM和BOM。ECMAScript: ECMAScript描述了语法,类型,语句,关键字,保留字,运算符和对象。ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。DOM: DOM是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。DOM通过创建树来表示文档。 DOM Level1由DOM core和DOM HTML构成。目标:规划文档的结构。 DOM Level2引入了DOM视图、DOM事件、DOM样式、DOM遍历和范围。扩展添加了对鼠标和用户界面事件、范围、遍历的支持,并通过对象接口添加了对CSS的支持。 DOM Level3引入了DOM Load和DOM Save,以统一的方式载入和保存文档。 目前Mozzila具有最好的DOM支持。BOM: BOM主要处理浏览器窗口和框架,有以下操作: 1.弹出新的浏览器窗口。 2.移动、关闭浏览器窗口以及调整窗口大小。 3.提供web浏览器详细信息的导航对象。 4.提供装载到浏览器中页面的详细信息的定位对象。 5.提供用户屏幕分辨率详细信息的屏幕对象。 6.对cookie的支持1回应 2012-04-28 11:56 -
halluct (自个儿玩儿。)
6.引用类型,通常叫做类,处理的是对象。对象由new运算符加上要实例化的类的名字创建,如ar 0 = new object()。 object类:自身用处不大,所有类都由这个类继承而来。 属性有,constructor——对创建对象的函数的引用; prototype——对该对象的对象原型的引用。 方法有,hansOwnPrototype(prototype)——判断对象是否有某个特定的属性; isPrototypeOf(object)——判断该对象是否为另一...2012-04-30 21:32 1人喜欢
6.引用类型,通常叫做类,处理的是对象。对象由new运算符加上要实例化的类的名字创建,如ar 0 = new object()。 object类:自身用处不大,所有类都由这个类继承而来。 属性有,constructor——对创建对象的函数的引用; prototype——对该对象的对象原型的引用。 方法有,hansOwnPrototype(prototype)——判断对象是否有某个特定的属性; isPrototypeOf(object)——判断该对象是否为另一个对象的原型; prototypeIsEnumerable(prototype)——判断给定的属性是否可以用for...in语句进行枚举; toString()——返回对象的原始字符串表示;valueOf()——返回最适合该对象的原始值。上述属性和方法都会被其他类覆盖。 Boolean类:Boolean原始值的引用类型,var oBooleanObject = new Boolean(true); 覆盖object类的valueOf()方法和tostring()方法返回原始值(true或false)。 Number类:var oNumberObject = new Number(55); 要得到其原始值,只需使用valueOf()方法。 一些专用方法:toFixed()方法——返回具有指定位数(0-20位)小数的数字的字符串表示,如oNumberObject.toFixed(2); 返回55.00 。 toExponential()——返回用科学记数法表示的数字的字符串形式,如 oNumberObject.toExponential(1); 返回9.9e+1表示5.5*10(1)。 toPrecision()方法——返回数字的预定形式或指数形式。 String类:var oStringObject = new String("hello world!"); 具有属性length, 方法:charAt() 和charCodeAt()——访问字符串中的单个字符,区别在于前者得到字符,后者得到字符代码; concat()——把一个或多个字符串连接到String对象的原始值上,功能和+差不多; indexOf()和lastIndexOf()——判定在一个字符串中是否包含某个字符,返回的都是指定的字串在另一个字符串中的位置(或-1如果没找到)。前者从字符串开头开始检索,后者从结尾开始检索; localeCampare()——对字符串值进行排序,若string对象按照字母排序排在参数中的字符串之前就返回负数,等于参数中的字符串就返回0,排在之后就返回正数(区分大小写,大写字母在小写字母之后); slice()和substring()——返回要处理的字符串的子串。如oStringObject.slice(3); oStringObject.substring(3); //返回"lo world!" oStringObject.slice(3, 7); oStringObject.substring(3, 7); //返回“lo w”。两者只有在处理负数参数的时候不同,前者会用字符串的长度加上参数,而后者将其作为0处理; toLowerCase()和toUpperCase()——把字符串转换成全部小写和全部大写; toLocaleLowerCase()和toLocaleUpperCase()——基于特定区域实现的大小写转换(一般来说,如果不知道在以那种编码运行一种语言,则使用区域特定的方法比较安全)。7.instanceof运算符,与typeof运算符相似用于识别正在处理的对象的类型,不同的是instanceof方法要求开发者明确的确认对象为某特定类型,如typeof oStringObject返回object, oStringObject instanceof string返回true,虽不如typeof方法灵活,但管用。8.运算符: 一元运算符:只有一个参数。 delete——删除对以前定义的对象属性或方法的引用,如delete o.name,但不能删除对象尚未定义的属性或方法。 void——对任何值都返回undefined,通常用于避免输出不应该输出的值,如html里的一个<a href="javascript:window.open('about:blank')">Click Me</a>被点击后即可看到屏幕上显示[object],这是因为window.open返回了对新打开的窗口的引用,该对象将被转换成要显示的字符串,要避免这种情况就要使用void运算符调用window.open()函数: <a href="javascript:void(window.open('about: blank'))">Click Me</a>,此时函数返回的是undefined,不是有效的值,不会显示在浏览器窗口中。 前增量/前减量/后增量/后减量—— 一元加法/一元减法——一元加法对数字无任何影响,但会将字符串转换成数字(方法与parserInt()相似,不要不同为一元运算符只会将0x开头的字符串转换成十进制的值,而对二进制或者八进制的数都会直接得到其数字部分的字面量)。一元减法是对数值求负,也可以将字符串转换成数字并求负值。 位运算符:每个整数都可以表示成二进制形式的32位数值,前31位表示数值,第32位表示符号,0为正数,1为负数。 not——由否定号~表示,步骤:把运算数转换成32位数字,把二进制形式转换成它的二进制反码,把二进制反码转换成浮点数。实质上是对数字求负然后减1。 and & —— or | —— XOR ^ —— 左移运算 << —— 有符号右移运算 >> —— 无符号右移运算 >> —— (未完)回应 2012-04-30 21:32 -
halluct (自个儿玩儿。)
1. 弱类型语言的同一变量可以存放不同类型的值。但在使用变量时,好的编程习惯是始终存放相同类型的值。 2. 变量可以存放两种类型的值,原始值和引用值。 原始值:存储在栈中的简单数据段,即,它们的值直接存储在变量访问的位置。有5中类型——Undefined、Null、Boolean、Number和String。(typeof运算符对于引用类型和null值都会返回object,null被认为是对象的占位符。typeof可以用于未定义的变量也不报错,将输出undefin...2012-04-28 12:39
1. 弱类型语言的同一变量可以存放不同类型的值。但在使用变量时,好的编程习惯是始终存放相同类型的值。2. 变量可以存放两种类型的值,原始值和引用值。 原始值:存储在栈中的简单数据段,即,它们的值直接存储在变量访问的位置。有5中类型——Undefined、Null、Boolean、Number和String。(typeof运算符对于引用类型和null值都会返回object,null被认为是对象的占位符。typeof可以用于未定义的变量也不报错,将输出undefined。) Undefined:变量未声明过,变量未初始化,以及函数无明确返回值时,其值均为undefined。 Null:值undefined是从值null派生出来的,因此在ECMAScript中把它们定义为相等,即null == undefined。但它们的含义不同,null用于表示尚未存在的对象。 Boolean:0和false之间可以相互转换。 Number:可以表示整数,浮点数,十进制,八进制(字面量的首数字必须是0),十六进制(字面量首数字必须是0,后接x)等。函数isFinit()判断是否是无穷大的数。特殊值NaN,表示非数,它与自身不相等。函数isNaN()判断是否是非数。 String:\n换行,\t制表符,\b空格,\r回车,\f换页符,\\反斜杠,\'单引号,\“双引号,\0nnn八进制代码nnn(n是0到7中的一个八进制数字)表示的字符,\xnn十六进制代码nn(n是0到f中的一个十六进制数字)表示的字符,\unnnn十六进制代码nnnn表示发unicode字符。3.转换成字符串:Boolean值、数字和字符串是伪对象,意味着它们具有属性和方法,如获得长度str.length。它们都有toString()方法。Boolean的toString()方法返回“true”或“false”;Number的toString()方法有默认模式和基模式两种,默认模式下返回都是数字的十进制表示,基模式可以用不同的基输出数字,例如二进制的基是2,number.toString(2)。4.转换成数字:两种方法——parseInt()和parseFloat()。只能对string类型调用这些方法,否则返回NaN。 parseInt()方法从位置0处的字符开始查看,判断它是否是个有效数字,直到找到非有效数字的字符为止。parseInt()也有基模式,可以将二进制、八进制、十六进制或其他任何进制的字符串转换成整数,如要解析十六进制的值,需parseInt("AF", 16); parseFloat()方法处理方式与parseInt()相似,第一个出现的小数点有效,后面再有小数点就无效。字符串必须以十进制形式表示浮点数。parseFloat()没有基模式。5.强制转换:Boolean(value),Number(value), String(value) 当要转换的值是至少有一个字符的字符串、非0数字或对象时Boolean()函数将返回true,否则返回false。 Number()转换整个值,如果字符串值能被完整转换,Number()将判断是调用parseInt()还是parseFloat()方法,否则将返回NaN。 String()方法和toString()方法的唯一不同之处在于,前者对null或undefined值强制转换可以生成字符串而不引发错误。回应 2012-04-28 12:39
-
1、getelementbyid:如果指定的id匹配某个元素的name的特性,ie6.0还会返回这个元素,这是一个bug,使用时一定要小心。 2、创建和操作节点 比较常用的创建方法是:createdocumentfragment,createelement,createtextnode,其他的要不不用,要么不能跨平台。 3、ie在setattribute()上有个很大的问题,当时使用他时,变更并不是总是能刷新出来,如果你使用ie,尽可能使用属性。如:div.classname="test"。 4、Node...
2011-03-01 14:23
1、getelementbyid:如果指定的id匹配某个元素的name的特性,ie6.0还会返回这个元素,这是一个bug,使用时一定要小心。2、创建和操作节点
3、ie在setattribute()上有个很大的问题,当时使用他时,变更并不是总是能刷新出来,如果你使用ie,尽可能使用属性。如:div.classname="test"。4、NodeIterator对象展示了一种有序的自顶向下遍历整个DOM树的方式。如果想遍历DOM树的特定区域,再看看某个节点的兄弟节点或子节点,可以使用TreeWalter。比较常用的创建方法是:createdocumentfragment,createelement,createtextnode,其他的要不不用,要么不能跨平台。
回应 2011-03-01 14:23 -
halluct (自个儿玩儿。)
完整的Javascript包括核心ECMAScript, DOM和BOM。 ECMAScript: ECMAScript描述了语法,类型,语句,关键字,保留字,运算符和对象。ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。 DOM: DOM是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。DOM通过创建树来表示文档。 DOM Level1由DOM core和DOM HTML构成。目标:规划文档的结构。 DOM Level2引入了DO... (1回应)2012-04-28 11:56 2人喜欢
完整的Javascript包括核心ECMAScript, DOM和BOM。ECMAScript: ECMAScript描述了语法,类型,语句,关键字,保留字,运算符和对象。ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。DOM: DOM是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。DOM通过创建树来表示文档。 DOM Level1由DOM core和DOM HTML构成。目标:规划文档的结构。 DOM Level2引入了DOM视图、DOM事件、DOM样式、DOM遍历和范围。扩展添加了对鼠标和用户界面事件、范围、遍历的支持,并通过对象接口添加了对CSS的支持。 DOM Level3引入了DOM Load和DOM Save,以统一的方式载入和保存文档。 目前Mozzila具有最好的DOM支持。BOM: BOM主要处理浏览器窗口和框架,有以下操作: 1.弹出新的浏览器窗口。 2.移动、关闭浏览器窗口以及调整窗口大小。 3.提供web浏览器详细信息的导航对象。 4.提供装载到浏览器中页面的详细信息的定位对象。 5.提供用户屏幕分辨率详细信息的屏幕对象。 6.对cookie的支持1回应 2012-04-28 11:56 -
halluct (自个儿玩儿。)
1. 弱类型语言的同一变量可以存放不同类型的值。但在使用变量时,好的编程习惯是始终存放相同类型的值。 2. 变量可以存放两种类型的值,原始值和引用值。 原始值:存储在栈中的简单数据段,即,它们的值直接存储在变量访问的位置。有5中类型——Undefined、Null、Boolean、Number和String。(typeof运算符对于引用类型和null值都会返回object,null被认为是对象的占位符。typeof可以用于未定义的变量也不报错,将输出undefin...2012-04-28 12:39
1. 弱类型语言的同一变量可以存放不同类型的值。但在使用变量时,好的编程习惯是始终存放相同类型的值。2. 变量可以存放两种类型的值,原始值和引用值。 原始值:存储在栈中的简单数据段,即,它们的值直接存储在变量访问的位置。有5中类型——Undefined、Null、Boolean、Number和String。(typeof运算符对于引用类型和null值都会返回object,null被认为是对象的占位符。typeof可以用于未定义的变量也不报错,将输出undefined。) Undefined:变量未声明过,变量未初始化,以及函数无明确返回值时,其值均为undefined。 Null:值undefined是从值null派生出来的,因此在ECMAScript中把它们定义为相等,即null == undefined。但它们的含义不同,null用于表示尚未存在的对象。 Boolean:0和false之间可以相互转换。 Number:可以表示整数,浮点数,十进制,八进制(字面量的首数字必须是0),十六进制(字面量首数字必须是0,后接x)等。函数isFinit()判断是否是无穷大的数。特殊值NaN,表示非数,它与自身不相等。函数isNaN()判断是否是非数。 String:\n换行,\t制表符,\b空格,\r回车,\f换页符,\\反斜杠,\'单引号,\“双引号,\0nnn八进制代码nnn(n是0到7中的一个八进制数字)表示的字符,\xnn十六进制代码nn(n是0到f中的一个十六进制数字)表示的字符,\unnnn十六进制代码nnnn表示发unicode字符。3.转换成字符串:Boolean值、数字和字符串是伪对象,意味着它们具有属性和方法,如获得长度str.length。它们都有toString()方法。Boolean的toString()方法返回“true”或“false”;Number的toString()方法有默认模式和基模式两种,默认模式下返回都是数字的十进制表示,基模式可以用不同的基输出数字,例如二进制的基是2,number.toString(2)。4.转换成数字:两种方法——parseInt()和parseFloat()。只能对string类型调用这些方法,否则返回NaN。 parseInt()方法从位置0处的字符开始查看,判断它是否是个有效数字,直到找到非有效数字的字符为止。parseInt()也有基模式,可以将二进制、八进制、十六进制或其他任何进制的字符串转换成整数,如要解析十六进制的值,需parseInt("AF", 16); parseFloat()方法处理方式与parseInt()相似,第一个出现的小数点有效,后面再有小数点就无效。字符串必须以十进制形式表示浮点数。parseFloat()没有基模式。5.强制转换:Boolean(value),Number(value), String(value) 当要转换的值是至少有一个字符的字符串、非0数字或对象时Boolean()函数将返回true,否则返回false。 Number()转换整个值,如果字符串值能被完整转换,Number()将判断是调用parseInt()还是parseFloat()方法,否则将返回NaN。 String()方法和toString()方法的唯一不同之处在于,前者对null或undefined值强制转换可以生成字符串而不引发错误。回应 2012-04-28 12:39 -
halluct (自个儿玩儿。)
6.引用类型,通常叫做类,处理的是对象。对象由new运算符加上要实例化的类的名字创建,如ar 0 = new object()。 object类:自身用处不大,所有类都由这个类继承而来。 属性有,constructor——对创建对象的函数的引用; prototype——对该对象的对象原型的引用。 方法有,hansOwnPrototype(prototype)——判断对象是否有某个特定的属性; isPrototypeOf(object)——判断该对象是否为另一...2012-04-30 21:32 1人喜欢
6.引用类型,通常叫做类,处理的是对象。对象由new运算符加上要实例化的类的名字创建,如ar 0 = new object()。 object类:自身用处不大,所有类都由这个类继承而来。 属性有,constructor——对创建对象的函数的引用; prototype——对该对象的对象原型的引用。 方法有,hansOwnPrototype(prototype)——判断对象是否有某个特定的属性; isPrototypeOf(object)——判断该对象是否为另一个对象的原型; prototypeIsEnumerable(prototype)——判断给定的属性是否可以用for...in语句进行枚举; toString()——返回对象的原始字符串表示;valueOf()——返回最适合该对象的原始值。上述属性和方法都会被其他类覆盖。 Boolean类:Boolean原始值的引用类型,var oBooleanObject = new Boolean(true); 覆盖object类的valueOf()方法和tostring()方法返回原始值(true或false)。 Number类:var oNumberObject = new Number(55); 要得到其原始值,只需使用valueOf()方法。 一些专用方法:toFixed()方法——返回具有指定位数(0-20位)小数的数字的字符串表示,如oNumberObject.toFixed(2); 返回55.00 。 toExponential()——返回用科学记数法表示的数字的字符串形式,如 oNumberObject.toExponential(1); 返回9.9e+1表示5.5*10(1)。 toPrecision()方法——返回数字的预定形式或指数形式。 String类:var oStringObject = new String("hello world!"); 具有属性length, 方法:charAt() 和charCodeAt()——访问字符串中的单个字符,区别在于前者得到字符,后者得到字符代码; concat()——把一个或多个字符串连接到String对象的原始值上,功能和+差不多; indexOf()和lastIndexOf()——判定在一个字符串中是否包含某个字符,返回的都是指定的字串在另一个字符串中的位置(或-1如果没找到)。前者从字符串开头开始检索,后者从结尾开始检索; localeCampare()——对字符串值进行排序,若string对象按照字母排序排在参数中的字符串之前就返回负数,等于参数中的字符串就返回0,排在之后就返回正数(区分大小写,大写字母在小写字母之后); slice()和substring()——返回要处理的字符串的子串。如oStringObject.slice(3); oStringObject.substring(3); //返回"lo world!" oStringObject.slice(3, 7); oStringObject.substring(3, 7); //返回“lo w”。两者只有在处理负数参数的时候不同,前者会用字符串的长度加上参数,而后者将其作为0处理; toLowerCase()和toUpperCase()——把字符串转换成全部小写和全部大写; toLocaleLowerCase()和toLocaleUpperCase()——基于特定区域实现的大小写转换(一般来说,如果不知道在以那种编码运行一种语言,则使用区域特定的方法比较安全)。7.instanceof运算符,与typeof运算符相似用于识别正在处理的对象的类型,不同的是instanceof方法要求开发者明确的确认对象为某特定类型,如typeof oStringObject返回object, oStringObject instanceof string返回true,虽不如typeof方法灵活,但管用。8.运算符: 一元运算符:只有一个参数。 delete——删除对以前定义的对象属性或方法的引用,如delete o.name,但不能删除对象尚未定义的属性或方法。 void——对任何值都返回undefined,通常用于避免输出不应该输出的值,如html里的一个<a href="javascript:window.open('about:blank')">Click Me</a>被点击后即可看到屏幕上显示[object],这是因为window.open返回了对新打开的窗口的引用,该对象将被转换成要显示的字符串,要避免这种情况就要使用void运算符调用window.open()函数: <a href="javascript:void(window.open('about: blank'))">Click Me</a>,此时函数返回的是undefined,不是有效的值,不会显示在浏览器窗口中。 前增量/前减量/后增量/后减量—— 一元加法/一元减法——一元加法对数字无任何影响,但会将字符串转换成数字(方法与parserInt()相似,不要不同为一元运算符只会将0x开头的字符串转换成十进制的值,而对二进制或者八进制的数都会直接得到其数字部分的字面量)。一元减法是对数值求负,也可以将字符串转换成数字并求负值。 位运算符:每个整数都可以表示成二进制形式的32位数值,前31位表示数值,第32位表示符号,0为正数,1为负数。 not——由否定号~表示,步骤:把运算数转换成32位数字,把二进制形式转换成它的二进制反码,把二进制反码转换成浮点数。实质上是对数字求负然后减1。 and & —— or | —— XOR ^ —— 左移运算 << —— 有符号右移运算 >> —— 无符号右移运算 >> —— (未完)回应 2012-04-30 21:32
-
halluct (自个儿玩儿。)
6.引用类型,通常叫做类,处理的是对象。对象由new运算符加上要实例化的类的名字创建,如ar 0 = new object()。 object类:自身用处不大,所有类都由这个类继承而来。 属性有,constructor——对创建对象的函数的引用; prototype——对该对象的对象原型的引用。 方法有,hansOwnPrototype(prototype)——判断对象是否有某个特定的属性; isPrototypeOf(object)——判断该对象是否为另一...2012-04-30 21:32 1人喜欢
6.引用类型,通常叫做类,处理的是对象。对象由new运算符加上要实例化的类的名字创建,如ar 0 = new object()。 object类:自身用处不大,所有类都由这个类继承而来。 属性有,constructor——对创建对象的函数的引用; prototype——对该对象的对象原型的引用。 方法有,hansOwnPrototype(prototype)——判断对象是否有某个特定的属性; isPrototypeOf(object)——判断该对象是否为另一个对象的原型; prototypeIsEnumerable(prototype)——判断给定的属性是否可以用for...in语句进行枚举; toString()——返回对象的原始字符串表示;valueOf()——返回最适合该对象的原始值。上述属性和方法都会被其他类覆盖。 Boolean类:Boolean原始值的引用类型,var oBooleanObject = new Boolean(true); 覆盖object类的valueOf()方法和tostring()方法返回原始值(true或false)。 Number类:var oNumberObject = new Number(55); 要得到其原始值,只需使用valueOf()方法。 一些专用方法:toFixed()方法——返回具有指定位数(0-20位)小数的数字的字符串表示,如oNumberObject.toFixed(2); 返回55.00 。 toExponential()——返回用科学记数法表示的数字的字符串形式,如 oNumberObject.toExponential(1); 返回9.9e+1表示5.5*10(1)。 toPrecision()方法——返回数字的预定形式或指数形式。 String类:var oStringObject = new String("hello world!"); 具有属性length, 方法:charAt() 和charCodeAt()——访问字符串中的单个字符,区别在于前者得到字符,后者得到字符代码; concat()——把一个或多个字符串连接到String对象的原始值上,功能和+差不多; indexOf()和lastIndexOf()——判定在一个字符串中是否包含某个字符,返回的都是指定的字串在另一个字符串中的位置(或-1如果没找到)。前者从字符串开头开始检索,后者从结尾开始检索; localeCampare()——对字符串值进行排序,若string对象按照字母排序排在参数中的字符串之前就返回负数,等于参数中的字符串就返回0,排在之后就返回正数(区分大小写,大写字母在小写字母之后); slice()和substring()——返回要处理的字符串的子串。如oStringObject.slice(3); oStringObject.substring(3); //返回"lo world!" oStringObject.slice(3, 7); oStringObject.substring(3, 7); //返回“lo w”。两者只有在处理负数参数的时候不同,前者会用字符串的长度加上参数,而后者将其作为0处理; toLowerCase()和toUpperCase()——把字符串转换成全部小写和全部大写; toLocaleLowerCase()和toLocaleUpperCase()——基于特定区域实现的大小写转换(一般来说,如果不知道在以那种编码运行一种语言,则使用区域特定的方法比较安全)。7.instanceof运算符,与typeof运算符相似用于识别正在处理的对象的类型,不同的是instanceof方法要求开发者明确的确认对象为某特定类型,如typeof oStringObject返回object, oStringObject instanceof string返回true,虽不如typeof方法灵活,但管用。8.运算符: 一元运算符:只有一个参数。 delete——删除对以前定义的对象属性或方法的引用,如delete o.name,但不能删除对象尚未定义的属性或方法。 void——对任何值都返回undefined,通常用于避免输出不应该输出的值,如html里的一个<a href="javascript:window.open('about:blank')">Click Me</a>被点击后即可看到屏幕上显示[object],这是因为window.open返回了对新打开的窗口的引用,该对象将被转换成要显示的字符串,要避免这种情况就要使用void运算符调用window.open()函数: <a href="javascript:void(window.open('about: blank'))">Click Me</a>,此时函数返回的是undefined,不是有效的值,不会显示在浏览器窗口中。 前增量/前减量/后增量/后减量—— 一元加法/一元减法——一元加法对数字无任何影响,但会将字符串转换成数字(方法与parserInt()相似,不要不同为一元运算符只会将0x开头的字符串转换成十进制的值,而对二进制或者八进制的数都会直接得到其数字部分的字面量)。一元减法是对数值求负,也可以将字符串转换成数字并求负值。 位运算符:每个整数都可以表示成二进制形式的32位数值,前31位表示数值,第32位表示符号,0为正数,1为负数。 not——由否定号~表示,步骤:把运算数转换成32位数字,把二进制形式转换成它的二进制反码,把二进制反码转换成浮点数。实质上是对数字求负然后减1。 and & —— or | —— XOR ^ —— 左移运算 << —— 有符号右移运算 >> —— 无符号右移运算 >> —— (未完)回应 2012-04-30 21:32 -
halluct (自个儿玩儿。)
1. 弱类型语言的同一变量可以存放不同类型的值。但在使用变量时,好的编程习惯是始终存放相同类型的值。 2. 变量可以存放两种类型的值,原始值和引用值。 原始值:存储在栈中的简单数据段,即,它们的值直接存储在变量访问的位置。有5中类型——Undefined、Null、Boolean、Number和String。(typeof运算符对于引用类型和null值都会返回object,null被认为是对象的占位符。typeof可以用于未定义的变量也不报错,将输出undefin...2012-04-28 12:39
1. 弱类型语言的同一变量可以存放不同类型的值。但在使用变量时,好的编程习惯是始终存放相同类型的值。2. 变量可以存放两种类型的值,原始值和引用值。 原始值:存储在栈中的简单数据段,即,它们的值直接存储在变量访问的位置。有5中类型——Undefined、Null、Boolean、Number和String。(typeof运算符对于引用类型和null值都会返回object,null被认为是对象的占位符。typeof可以用于未定义的变量也不报错,将输出undefined。) Undefined:变量未声明过,变量未初始化,以及函数无明确返回值时,其值均为undefined。 Null:值undefined是从值null派生出来的,因此在ECMAScript中把它们定义为相等,即null == undefined。但它们的含义不同,null用于表示尚未存在的对象。 Boolean:0和false之间可以相互转换。 Number:可以表示整数,浮点数,十进制,八进制(字面量的首数字必须是0),十六进制(字面量首数字必须是0,后接x)等。函数isFinit()判断是否是无穷大的数。特殊值NaN,表示非数,它与自身不相等。函数isNaN()判断是否是非数。 String:\n换行,\t制表符,\b空格,\r回车,\f换页符,\\反斜杠,\'单引号,\“双引号,\0nnn八进制代码nnn(n是0到7中的一个八进制数字)表示的字符,\xnn十六进制代码nn(n是0到f中的一个十六进制数字)表示的字符,\unnnn十六进制代码nnnn表示发unicode字符。3.转换成字符串:Boolean值、数字和字符串是伪对象,意味着它们具有属性和方法,如获得长度str.length。它们都有toString()方法。Boolean的toString()方法返回“true”或“false”;Number的toString()方法有默认模式和基模式两种,默认模式下返回都是数字的十进制表示,基模式可以用不同的基输出数字,例如二进制的基是2,number.toString(2)。4.转换成数字:两种方法——parseInt()和parseFloat()。只能对string类型调用这些方法,否则返回NaN。 parseInt()方法从位置0处的字符开始查看,判断它是否是个有效数字,直到找到非有效数字的字符为止。parseInt()也有基模式,可以将二进制、八进制、十六进制或其他任何进制的字符串转换成整数,如要解析十六进制的值,需parseInt("AF", 16); parseFloat()方法处理方式与parseInt()相似,第一个出现的小数点有效,后面再有小数点就无效。字符串必须以十进制形式表示浮点数。parseFloat()没有基模式。5.强制转换:Boolean(value),Number(value), String(value) 当要转换的值是至少有一个字符的字符串、非0数字或对象时Boolean()函数将返回true,否则返回false。 Number()转换整个值,如果字符串值能被完整转换,Number()将判断是调用parseInt()还是parseFloat()方法,否则将返回NaN。 String()方法和toString()方法的唯一不同之处在于,前者对null或undefined值强制转换可以生成字符串而不引发错误。回应 2012-04-28 12:39 -
halluct (自个儿玩儿。)
完整的Javascript包括核心ECMAScript, DOM和BOM。 ECMAScript: ECMAScript描述了语法,类型,语句,关键字,保留字,运算符和对象。ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。 DOM: DOM是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。DOM通过创建树来表示文档。 DOM Level1由DOM core和DOM HTML构成。目标:规划文档的结构。 DOM Level2引入了DO... (1回应)2012-04-28 11:56 2人喜欢
完整的Javascript包括核心ECMAScript, DOM和BOM。ECMAScript: ECMAScript描述了语法,类型,语句,关键字,保留字,运算符和对象。ECMAScript仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。DOM: DOM是HTML和XML的应用程序接口(API)。DOM将把整个页面规划成由节点层级构成的文档。DOM通过创建树来表示文档。 DOM Level1由DOM core和DOM HTML构成。目标:规划文档的结构。 DOM Level2引入了DOM视图、DOM事件、DOM样式、DOM遍历和范围。扩展添加了对鼠标和用户界面事件、范围、遍历的支持,并通过对象接口添加了对CSS的支持。 DOM Level3引入了DOM Load和DOM Save,以统一的方式载入和保存文档。 目前Mozzila具有最好的DOM支持。BOM: BOM主要处理浏览器窗口和框架,有以下操作: 1.弹出新的浏览器窗口。 2.移动、关闭浏览器窗口以及调整窗口大小。 3.提供web浏览器详细信息的导航对象。 4.提供装载到浏览器中页面的详细信息的定位对象。 5.提供用户屏幕分辨率详细信息的屏幕对象。 6.对cookie的支持1回应 2012-04-28 11:56
在哪儿借这本书 · · · · · ·
这本书的其他版本 · · · · · · ( 全部6 )
以下豆列推荐 · · · · · · ( 全部 )
- 图灵图书 (刘江)
- 学JavaScript不得不读的8本书 (song)
- web开发必备锦囊 (大森林)
- WEB前端开发 (AmirFish)
- 网站与平面设计 (餐巾纸的背面)
谁读这本书?
二手市场
订阅关于JavaScript高级程序设计的评论:
feed: rss 2.0










0 有用 tartaros 2013-01-24
还成吧
0 有用 tomsheep 2010-12-04
拿来入门很不错,翻了两天,有很多帮助 --2011年3月 ////////////////////////////////////////////////////////////// 在地铁上断断续续又读了一遍,主题覆盖的比较全面,不过有一部分已经过时(做技术的真苦逼)结合这半年接触到的应用,理解更深了一些 ---2011年9月1日
0 有用 西湖土豆 2009-05-16
javascript最佳的参考书
0 有用 一天哥哥 2010-12-02
花了一下午读完了,不错
0 有用 whoCare 2010-06-22
很有帮助! 回头再看一次,真是感觉很好,好多以前看不明白的,已经轻松pass
0 有用 缸-3 2017-09-03
我居然看完了可是为什么都没有几条近几年的评论。。难道这本书过时了?
0 有用 游魂 2016-07-26
还不错的书~
0 有用 莫再提 2017-05-08
没过段时间拿出来看,都有心得体会。
0 有用 麦麦 2015-10-30
值得多次研读
0 有用 西山 2015-10-05
入门大全,不解释