《javascript语言精粹》读书笔记四

第七章 正则表达式

正则表达式是处理字符串的最强道具,没有之一。 通过正则表达式,我们可以非常简便的对字符串进行各种操作,这里就对此就不对这章进行总结,之后对正则表达式进行一次专门的总结。

第八章 方法

‘+’运算符在较新的浏览器中,进行过较多的优化,会对该运算符进行优化,比array.join函数运行速度要快的多。

array

Array.concat和Array.slice函数可以生成新的数组。

Array.shift函数通常比pop速度要快。

在使用Array.sort回调函数中,默认会将数组元素当做字符串进行比较。同样,该方法是不稳定的(其方法稳定性根据不同的浏览器实现不同),使用sort().sort(),这样的链式操作,是无法获得稳定的排序,所以,应该避免使用sort函数的链式操作。

Array.unshift方法将返回新数组的长度,而ie6浏览器对unshift函数的实现有错误,总是返回undefined。

number

number.toFixed方法和number.toPrecision方法的差别在于,toFixed方法支持的参数值在0~20,而toPrecision函数支持的参数范围为0~21。

number.toString函数的参数代表进制,默认为10,可以给他设定为任意数字,当然通常设定为整数,通过这个方法可以很简单的生成随机数,比如Math.random().toString(36).substr(3),即可生成一个随机数。

regexp

regExp.exec方法虽然强大,但是也是最慢的函数,他会使用前向匹配的技术,不断的重新扫描已扫描过的字符串,当有g这个修饰符的时候,其性能会进一步降低。

regexp.text方法虽然简单,但是是最快的函数,不要对他使用g标识,因为没有用。

string

string.match方法会对一个正则表达式进行匹配,如果表达式没有待用g标识,那么他的效果和regexp.test相同,如果他带有g标识,那么它生成一个包含所有匹配(非捕获分组之外)的数组。

如果string.replace方法在当第二参数是字符串,那么字符$有特别的含义,具体如下:

美元符号序列 替换对象
$$ $字符的转义
$& 整个匹配的文本
$number 分组捕获的文本
$` 匹配之前的文本
$' 匹配之后的文本

而当第二个参数为函数时,其参数为 ($&, $1……$9)的排列。

string.split方法有第二个参数,用于限制返回数组的大小。当第一参数为正则表达式时,将会把来自分组捕获的文本包含到分割后的数组中。同时,ie8之前的浏览器会在输出数组中排除空字符串

string.toLocalLowerCase,主要用在土耳其语上,因为在土耳其语中‘I’转义为‘l’而不是i。

第九章 代码风格

优秀的程序拥有前瞻性的结构,它会预见未来可能需要的修改,而又不会让其成为过度的负担。

注意把{放在一行的结尾而不是下一样的开头,因为它会避免js的return语句中一个可怕的设计错误。

努力保持注释是最新的,错误的注释甚至比没有注释更加糟糕。

当程序不能自我说明的时候,需要编写注释,注释必须时有意义的,显而易见的代码无需注释。

代码中应该更多的使用行注释,块注释往往用于正式的文档记录和注释。

对于脚本应用和工具库,我只使用唯一一个全局变量。每个对象都有自己的命名空间,以方便管理代码。

更多编码风格可以参见第五部分

最后本读书笔记将于第五部分结束,第五部分将总结被本书作者认为是优美的特性,以及毒瘤和糟粕,同时给出个人总结的javascript代码编写规范ppt。

Table of Contents