javascript语言精粹
the good parts
第一章
1.分析javascript
函数/弱类型/动态对象/对象字面量
函数基于词法作用域(权威指南8.8.1)
第二章
2.基本语法知识
总:空白,标识符,数字,字符串(16位),语句(每个script标签提供一个编译且立即执行的编译单元)变量应该被定义在函数的头部。表达式,字面量(属性名可以是字符串和标识符,对象,数组,函数,正则表达式 )
注意:
- 语句:视为假的值有:false,null,undefined,空字符串,NaN,数值0;其他所有的值都被当作真;for in语句,try-catch语句,throw 语句
- typeof取值:number,string,boolean,object,function,undefined。
- 运算符的结合性:一元/赋值/三元条件运算符结合性从右到左,(权威指南5.2.4运算符的结合性);“%”求余和求模的区别
第三章 对象
3.对象
- 对象字面量:名/值对,检索(从undefined的成员属性中取值会导致TypeError错误,此时可以利用&& 来避免错误);更新:扩充和替换;引用:对象通过引用来传递,它们永远不会被复制
- 原型和委托(随着原型一层一层的寻找需要的属性)
- 反射(访问对象属性的值):hasOwnProperty()返回布尔值,不会检查原型链
- 枚举:常用的过滤器有hasOwnProperty(),typeof用来排除函数。
- 删除 delete
- 减少全局变量污染:最小化使用全局变量(只创建一个唯一的全局变量)
第四章 函数
4.函数
- 所谓编程就是将一组需求分解成一组函数与数据结构的技能。
- 函数对象:每个函数在创建时会附加两个隐藏的属性:函数的上下文和实现函数行为的代码
- 通过函数字面量创建的函数对象包含一个连到外部上下文的链接,这被称为闭包。
- 调用: 函数在调用时,会接收两个附加的参数:this和arguments,this 的值取决于调用模式(方法调用模式,函数调用模式,构造器调用模式,apply调用模式)
四种调用方式:- 方法调用模式:当一个函数被保存为对象的一个属性,称它为方法,当此方法被调用时,this被绑到该对象
- 函数调用模式:不是对像的属性时,this被绑定到全局对象。解决方法:将this赋给that 变量
- 构造器调用模式:如果一个函数前面带上new,背地里创建一个链接到该函数prototype成员的新对象,同时this会被绑定到该对象上。
Apply 调用模式 :apply()接受的两个参数:1.绑定到this上的值,2.参数数组;
其他:参数,返回,异常,扩充类型的功能(如给Number类型扩充integer方法等),递归(函数自身调用自身),作用域(作用:减少名称冲突,提供自动内存管理,因为没有块级作用域,最好在函数体的顶部声明函数中可能用到的所有变量),闭包(私有变量,包在一个函数体里)
- 闭包 注意点:避免在循环中创建函数。
- 回调的概念:找相关例子。
- 模块:使用函数和闭包来构造模块,是一个提供接口却隐藏状态与实现的函数或对像。模块模式的一般形式:一个定义了私有变量和函数的函数,利用闭包创建可以访问私有变量和函数的特权函数,最后返回这个特权函数,或将其保存到一个可以访问的地方。什么是单例模式(对象字面量创建的对象)?
- 级联:一些方法没有返回值,如果让这些方法返回this而不是undefined,就可以启用级联。可产生出极富表现力的接口。
- 柯里化
- 记忆:将先前操作的结果记录在某个对象中,(数组或对象)
第五章 继承
5.继承(继承模式:没法保护隐私)
- 伪类
- 对象说明符:可以将json对象传递给一个构造器,将返回一个构造完全的对象。
- 原型:差异化继承是什么。
- 函数化:应用模块模式保护函数隐私。更好的封装和信息隐藏。
- 部件:把对象组装起来。
第六章 数组
6.数组
- length:(参考权威指南7.2 数组元素的读和写),【】将其中的表达式转换成一个字符串;设置更大的length值不会给数组分配更多的空间,设小则会删除一些元素。
- 删除数组中的一个元素 :delete与splice的区别。
- 数组的一些方法