JavaScript高级程序设计(第三版)读书笔记
纸上得来终觉浅,觉知此事要躬行。

工作1年了,总结一下做项目中的问题,最严重的一个就是有时候解决bug,一知半解,根本原因就是基础知识不牢靠,很多时候GOOGLE or BAIDU后,找到了想要的代码,加以修改解决了问题,却不能立刻完全理解。自己很是苦恼。因此在工作1年之际,静心再读书,从豆豆推荐的JavaScript高级程序设计(第三版)开始。
在慕课之类的网站上边学边练,效果也比较明显,但
对于自小就喜欢读书、喜欢刨根问底的我而言,还是看技术著作收获更大,更开心。
按章节总结:
Chap1:
JavaScript诞生于1995年。最初由网景公司开发。
JavaScript包括:1,ECMAScript(由ECMA-262定义);2,DOM;3,BOM。
是专为与网页交互而设计的脚本语言。
Chap2:
JS的插入方式2种。
使用src引入外部文件较好:可维护性;可缓存。<noscript></noscript>
标签可在脚本无效情况下显示。
Script标签依次在DOM中被解析。
Chap3:
ECMAScript基本数据类型包括:underfind、Null、Boolean、Number、String
无整数型、浮点数型,NUMBER可用于所有数值
有很多类C语言的基本操作符。
语句:if、do-while、while、for、for-in、label、break和continue、with、switch等。
Chap4:
JS变量可以用来保存两种类型值:基本类型值、引用类型值。前者在内存中占据固定大小空间,被保存在栈内存中;后者的值是对象,保存在堆内存中。
JS从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象。
确定一个值的类型可以用:typeof操作符;确定一个值是那种引用类型:instanceof。
JS具有自动垃圾收集机制。
Chap5:
对象在JS中被称为引用类型的值,函数实际上是Function类型的实例,因此函数也是对象。
由于函数是对象,其也拥有方法,可以用来增强其行为。
JS中基本类型值可以被当做对象来访问。
Chap6:
JS支持OO(面向对象)编程,但不使用类或者接口。
JS主要通过原型链实现继承。
原型链的构建是通过将一个类型的实例赋值给另外一个构造函数的原型实现的。
Chap7:
JS没有名字的函数表达式称为匿名函数。
递归函数应该使用arguments.callee来递归地调用自身。使用函数名,函数名可能发生变化。
当在函数内部定义了其他函数,就创建了闭包。闭包有权访问包含函数内部的所有变量。
Chap8:
浏览器对象模型(BOM)以window对象为依托,表示浏览器窗口以及页面可见区域。同事,window对象还是ECMAScript的global对象,因而所有全局变量和函数都是他的属性,且所有原生的构造函数及其他函数也都存在于它的命名空间下。
BOM中还有screen和history两个对象。
前者保存着与客户端显示器有关的信息,这些信息一般只用于站点分析。
后者为访问浏览器的历史记录开了一个小缝隙,开发人员可以据此判断历史记录的数量,也可用于导航。
Chap9:
第九章谈到了客户端检测,现在不同浏览器对代码的解读差异日益缩小。本章速读。
客户端检测有:能力检测、怪癖检测、用户代理检测。
Chap10:
DOM是语言中立的API,用于访问和操作HTML和XML文档。
DOM1级将HTML和XML文档形象地看做一个层次化的节点树,可以使用js来操作这个节点树,进而改变底层文档的外观和结构。
DOM的各种节点:
最基本,Node;
其他:Document、Element。
理解DOM的关键,就是理解DOM对性能的影响。DOM操作往往是JS程序中开销最大的部分。访问NODELISI导致的问题最多。NODELIST都是动态的,每次访问NODELIST对象,都会运行一次查询。因此,最好尽量减少DOM操作。
Chap11:
DOM扩展。
此章需要在实践中理解、记忆。
Chap12:
DOM2&DOM3
DOM1级主要定义的是HTML和XML文档的底层结构。
DOM2DOM3则在此基础上引入了更多交互能力。也支持更高级的XML特性。
Chap13:
事件。
事件是JS与网页联系在一起的主要方式。
Chap14:
表单脚本。
表单的提交、重置、字段。
文本框脚本,一些操作:选择文本、过滤输出、自动切换焦点、HTML5约束验证API。
选择框脚本的操作。
这章内容貌似我全部使用过。
Chap15:
Canvas绘图。
填充、描边、绘制形状、文本了阴影、渐变,etc。