《JavaCcript 王者归来》读书笔记

Perface:作者反复提到的《JavaScript权威指南 第四版》的确是本很好的工具书,也是我案头不可或缺的手册了。
看了前言,就让我有一种想通读一篇的欲望,也许是作者散文式的文风不同于大多数IT翻译书籍,颇有听他娓娓道来的感觉,尽管Macacus的工作进度很赶,还是想先把这本书读完,可以把一些有实战价值的东西放到Macacus的开发中,让我们少走一点弯路,错路。

26章 应用框架
26.5 已存在的应用框架
我已经用了jQuery有半年多的时间了,所以先跳到这章来看看作者对于不同框架的评价。
作者重点推荐的4种框架:
Prototype 定义是应用最为广泛。
jQuery 轻量级应用框架,更加完备和具有系统性。
Dojo提供完整的UI组件,好像Zend Framework推荐配套的就是Dojo啊,做完Macacus应该研究一下,B/S web应用程序应该才是未来的方向,出色的GUI界面则是基础。
JSVM 国内的框架,我第一次听说过。

其他的框架:
Bindows AJAX应用商业框架(是不是直接支持Socket?)
BackBase .net和Java平台集成比较好,商业框架

其他的不考虑了。
第一部分 概论
第一章 从零开始
作者没有用通用的Hello World来说,而用了一句 翻译的 “程序设计之道无远弗届,御晨风而返”诗书味极浓的作为开篇。
1.1.1 用户需求决定了B/S模式的兴起,这个理由同样是我开发全B/S界面的呼叫中心系统的MacacusCRM的理由,越方便越好。
1.1.2 正确的时候,正确的地方使用JavaScript。
1.1.3 JavaScript 来源于CMM C减减的语言,JavaScript的创造者 Brendan Eith(向他致敬),目前在Mozilla工作,所以Firefox对于标准的支持做的一定比IE好。
**客户端的JS程序可以和嵌入页面的JavaApplet进行交互,这个和JS和Flex的交互应该雷同吧!
JavaScript是基于原型的面向对象,我对这种拗口的对象描述本来就是稀里糊涂的。
1.1.4 警惕!脚本诱惑,我的理解就是少用,尽量少用,不过我的Macacus作为一个局域网的web应用已经挂了十几个JS了,不同的页面还需要调用独立的JS,最后完成程序的时候看样子是要做一次良好的JS精简才行了。
1.1.5 数字高通滤波器,作者给的第一个例子不是传统的 alert(“Hello World “),而是这个几乎我也只是看的懂结构,还不能理解意思的数字高通滤波器模型,怪不得论坛上很多人说作者是炫耀,不予置评。
1.2.1 客户端的JavaScript
<noscript></noscript> 防御性编程,好像我的程序里面没有用到,我默认了所有的客户端都会支持JS,这种只有些骨灰级的用户才会主动关闭JS功能来加快页面浏览或者提高安全性,不过作为一个好的程序,防御性编程还是必不可少的,不能用太多的假设来解决问题。
1.2.2 服务器的端的JavaScript 第一次听说,IIS加net 环境已经可以用,不过不知道有什么用,难道数据交换?
1.4.1 Firefox的地址栏直接支持 如javascript:alert(“ok”)的伪协议。
1.5.2 所有的客户端数据校验都是不安全的,所以在服务器端的PHP程序对于一些非常关键的数据还是要2次校验,普通的工作交给JS去处理。
1.7.1 像程序员一样的思考
第一境界:知器
第二境界:格物
第三境界:明理
第四境界:悟道
博大精深啊,我感觉自己处于格物状态,会的东西已经很多,但是还不能100%的随意揉合自由发挥,路漫漫其修远兮,吾将上下而求索。
用最少的代码做最多的事情,即使只有三行的代码也有需要维护的一天。

第二章 浏览器中的JavaScript
面向接口的JavaScript程序 通过getParameter()方法来捕捉url传递的值,再根据值来做相应的处理,而不通过php来捕捉再回调到JS来处理,是一个新的想法,这样可能对于GUI的无数据库操作有很大帮助。

第三章 开发环境和调试方法
调试是我所关心的,不多的Alert让我晕菜。
作者还没有提到 Aptana,不过提到了1st JavaScript Editor Pro和 JS Eclipse两个工具,1st JavaScript Editor Pro我测试过,当时对中文处理不好。所以我的推荐还是Apatana for Eclipse 结合 Zend studio for Eclipse 来做开发。
Opera对于同样的JavaScript程序处理速度反而是最快的,有点意外哦。
3.4.1 WatchObj方法查看对象内部的属性和值,利用DebugOutput输出调试信息。
3.6.3 Error ,EvalError (表达式计算错误),RangeError(下标越界),TypeError(数据类型错误),SyntaxError(语法错误)。
本章作者用VS来举例,对我没有什么帮助,希望后面能看到基于Firebug和venkman的调试知识。
第二部分 JavaScript核心
第四章 语言结构
JavaScript直接用双字节来处理编码了,并且直接支持了Unicode字符集,所以可以用中文来命名函数和变量了,我马上测试了一下,真的可以,这样是否可以写很容易维护的中文WEB应用呢,可惜PHP还不支持否则?
对于作者反复提到的闭包这个概念,我还一下子不好理解,希望看过第五章可以理解,感觉还是作用域的问题吧。
Switch也有default: aptana的js提示没有那个Default,我也没有查手册,还以为没有呢,真的想想是搞笑 ,怎么可能没有呢?
4.4.5 跳转语句
break 跳出循环或者 switch语句。
continue 开始一次新的迭代
return 指定函数的返回值
try throw catch 还是不觉得好用,看来进步是一起的,什么时候 php的捕获异常用熟悉了,js也估计熟练了。

第五章 数据类型
toString()方法可以转换为不同进制的数,比如toString(2)就是2进制 toString(16)就是16进制。
NaN已经遇到过了,JS数学计算里面常用,代表非数值,可以用isNaN()来检查这个值。
Array,有没有更简单的直接往数组的最后增加新纪录的做法,而不是用s[s.length+1]这样的做法。
在第8章集合里面找到了方法:
s.push(1)就是把1放到数组的最后一个。

JSON 是一个符合规范的对象常量而已,不要想的太复杂了。
5.3 函数
作者这里解释了他所谓的闭包:被调用时候创建封闭环境的函数。
JS函数支持在函数体内定义并返回另外一个函数,我理解就是函数体内嵌套另外一个函数。
5.8.1 浮点数的精度问题
我已经遇到了,用(floor(sX100))/100来解决小数点后2位四舍五入,好像有点傻。作者给出了一个 s.toFixed(2)的方法。

第六章 再次回到函数
6.1.2 函数调用前,先计算参数中的所有表达式,一个函数可以有多个return,但是一次调用只会有一个return语句被执行。
函数的默认参数 : if(!b) b=30 的更优化写法 b=b||30 这个就是我不容易看懂别人js代码的地方,js代码可以写的太简化了。
Arguments形参的对象,Arguments.length读取默认形参的数量。
6.3 函数的顶层调用者是window对象,看到这里有点发晕了。

第9章给出了一个完整的棋谱阅读器,有空可以帮老爸写个自己用的棋谱阅读器啊。

第十章 正则表达式 先跳过。

第三部分 浏览器和DOM
Window对象最基本的浏览器对象。通过Window对象可以实现不同窗口的交互。
Document对象,这些对象好像jQuery封装后的用起来更方便了。
Document.referrer属性用来防止盗链。

第十五章 数据存储的脚本化
之前的关于DOM的操作对于我已经熟悉的很了。而这样的cookie却是我一直想用但是用的很少的,包括PHP我也基本用session而不喜欢用cookie。
jQuery有一个Cookie插件,我之前用它好像更简单。而有一个问题是全AJAX网站的前后导航问题,history对象是没有用的了,那么如何实现前后呢,虽然用的不多,但是作为一个设计良好的软件,前后导航还是很有必要的,忘记了那本书里面特地写了一章,书看的太多也不好,不容易记住。

第四部分 数据交互
第十六章 同步和异步
setTimeout()和 steInterval() 我怎么看都发现区别不大。作者写的我也看不懂,水平是有差异啊。

后面的东西越来越挑战我的耐心,终于我的耐心被磨完了。