《Javascript - The Definitive Guide》阅读杂记一

轻松的转换字符串为数字

标准的你可以这么写

var total = parseInt("12",10) + 2; //用parseInt转换目标为数字,别忘了第二个参数(进制)

其实你还可以

var total = "12" * 1 + 2; //乘法之后自动转换为数字
var total = "12" - 0 + 2; //减法之后自动转换为数字

不过虽然方便,也只可酌情使用 :) 另外最近了解到两种其他的转换方式:

  • 用一元操作符(unary)+,具体的例子可以看这里。然后我发现mootools里面早就用了类似的代码,倒是我到现在才发现return +new Date;
  • 使用零填充右移位操作符(Right shift with zero extension)可以看lifesinger将任意值转换为自然数

注意parseInt的第二个参数

之前文章有提到过,这个可是重大的陷阱之一。parseInt可以带入第二个参数,表示以何种进制来解析目标字符串。如果不带参数2,遇到某些以0开头的字符串,就会得到错误的值(如果字符串以0开头(不包括0x或者0X),parseInt会默认使用8进制来解析。)。例如

parseInt("077"); //我的目的是想转换成77,但是输出结果确是63
parseInt("077",10); //设定第二个参数为10,强制采用十进制,这回正确了

Reading《Javascript - The Definitive Guide》

本命年里过的浑浑噩噩,自身提高也不够。有鉴于此,新年伊始开始做一些小打算。在china-pub定了2本关于Javascript的书。一本是《Javascript - The Definitive Guide》英文影印版,另一本是《Javascript 王者归来》。由于某些原因(就不阐述了...),《Javascript 王者归来》后来没有到手。但前者已经足够厚了(字典级别的)...想想就先看着吧。

至于为什么定英文影印版,一来是想提高一下非母语的阅读能力,二来拿起来会更壮观(还是厚度)。

希望自己在看的过程能做一些简单的记录... :)

骚扰我的JavaScript的陷阱

今天在Google Reader上看到一篇 JavaScript的陷阱 @ 随网之舞,颇为感慨,这些个错误我也是犯之再犯...以下也说说我的体会:

最常犯的错误

因为编辑器的帮助,养成了机械式的关闭一些匹配符号的习惯,所以也不会存在“不匹配的引号、圆括号或花括号”的问题,所以“多余的逗号”成了我最常犯的错误。由于写CSS的习惯,总会在每条css属性定义后加;,这样的习惯也使我在定义一些javascript对象的时候,会在每个属性后面加一个,。写的正欢,总会变成这样:


.highlight {
	text-align:center;
	font-size:1.1em;
	color:lightblue;//CSS这样写没错
}
...
var highlight = {
	"text-align":"center",
	"font-size":"1.1em",
	"color":"lightblue",//javascript这样写,IE8以前的IE版本会报错
}

如何防止这个问题,自己也很郁闷,也因此这一条在我的”错误排除榜“上高居榜首。

最郁闷的错误

最让人郁闷的是一些无意的错误,不会抛出错误,让人很难排查。文中提到的条件语句的第2个陷阱:

把第二个参数的值赋给第一个参数。因为它是一个逻辑问题,它将一直返回true且不会报错。

一个等号和两个等号,在庞大的代码里面,通常会很不起眼,很容易让人有错觉。自己啃这个骨(苦)头已经不是一次两次了,因此这个进入了”错误排除榜“的三甲。

最无知的错误

之前由于基础不扎实的缘故,经常会犯一些无知的错误,而浪费大把的时间来调试。比如文中提到的parseInt,一直不知道它有第二个参数。当然这闹了很多笑话,也让我长了脑子...

做事的时候一定要以一个平和的心态,不要让自己太High,当然这也是个人见解 :)