Learning jQuery要出新版了
2008年12月31日 好书
前几天刚看到jQuery1.3.1b征求测试的消息,今天就收到Packt的NewsLetter,预告Learning jQuery的新版Learning jQuery 1.3将在2009年5月出版。作者仍然是Karl Swedberg和 Jonathan Chaffer。
顺便提一下,Learning jQuery作为“全球第一部jQuery著作”(责任编辑杨爽同学的手笔——没错,是全球第一本),其中文版《jQuery基础教程》(人民邮件出版社200807,图灵程序设计丛书),得到了广大读者的认可。第一次印刷的4000千册已经告罄,现在销售的应该是第二次印刷的了。因此,该书也荣登“图灵2008年度十大总排榜”(“十大总”啥意思?回头得问问刘江老师)。
《jQuery基础教程》这本书卖得不错,倒不是因为本人的翻译有多好,主要还是出版社有眼光,引进了全球第一本jQuery专著(第二本jQuery in Action也是图灵引进的,估计2009年第一季度能上市)。而且,根据本人的观察,jQuery在国内应该是最受欢迎的JavaScript框架,无论是在Web专业开发人员,还是在普通的Web开发爱好者中,jQuery的口碑都是最棒的!(插播一条广告:jQuery以简单易用著称,不信请试试。)另外,2008年9月微软和诺基亚都宣布将在自己的平台中集成jQuery,无疑又为更多人转向学习jQuery起到了巨大的推动作用。
短路逻辑与条件运算符
2008年12月30日 编程技术
逻辑运算符包括逻辑与、逻辑或、逻辑非,英文分别对应:(logical)and、or、not。由于逻辑运算返回的是布尔值true(真)或false(假),因此逻辑运算符也叫布尔运算符。(英文operator在程序设计的语境下有两种译为:运算符、操作符。)
Python中的逻辑运算符有一个非常有意思的特性——“短路”,即不做无用功、选择最短路线。具体来说,逻辑运算中的短路表现在逻辑运算符只对有必要求值的表达式求值。例如,表达式x and y(x和y都有可能是表达式),只在x和y同时为真的情况下才会返回True。显然,如果x为假,那么就没有再对y求值的必要了——即使y为真,整个表达式仍然会返回False。因此,and运算符的行为就是:如果x为假,返回x;否则,返回y。
and运算符的这种行为就叫“短路逻辑”(或者懒惰求值)。可见,逻辑运算符的右运算数(如这里的y)有可能不会被求值——原因就是“短路”。
同样,or运算符也有短路行为。例如,对于表达式x or y,如果x是真,则返回x;否则,返回y。
设计短路逻辑有目的何在呢?主要是为了减少不必要的计算。但是,在短路逻辑的基础上,还可以实现一些巧妙的结构。例如:
name = raw_input('Enter name:') or '<unknow>'
这个赋值语句就利用逻辑运算符or实现了在用户输入为空的情况下为name设置默认值的操作。另外,利用短路逻辑还可以实现另一种运算符,即条件运算符,或者叫三元运算符:
b if a else c # 如果a为真,则返回b;否则,返回c
短路逻辑与条件运算符同样也存在于JavaScript中。即,x && y的行为是:如果x可以转换false,则返回x;否则,计算并返回y的值。x || y的行为是:如果x可以转换为true,则返回x;否则,计算并返回y的值。显示,如果&&、||运算符分别在x可转换为false、true的情况下,会执行短路操作——忽略右运算数y。
而利用or运算符的短路行为,JavaScript也实现了为变量赋默认值:
//如果name可以转换为false,则不能短路,必须对右运算符求值,从而实现赋默认值 var name = name || 'unprovided';
以及另一种表现形式的条件表达式——?::
x > 0 ? x * y : -x * y
SitePoint近访John Resig
2008年12月28日 Web开发, 翻译
SitePoint的Ara Pehlivanina最近采访了John Resig。谈了JavaScript库、John Resig得意的几个项目、那本JavaScript高手期待已久但却一再推迟的Secrets of the JavaScript Ninja,还谈了Resig的个人生活。
SP:作为jQuery的创建者,你如何看待JavaScript库之间的竞争,以及它们将来的发展?
Resig:JavaScript都要经历几个循环(从某角度上讲,类似浏览器)。首先是一段时间的竞争,然后是相互合作,最后就是同质化。例如,目前所有库均已实现的CSS选择符引擎,最初竞争的焦点是引擎性能;人们以最有效方式反复实现同一特性,造就了不同实现性能上的差异。然后,不同的库开始合作,就共同支持的选择符集合达成一致,同时也共享提升性能的技术。结果,我们就看到了同质化的代码基——形成一个统一的后台(如Sizzle)。对于库中都存在的其他特性,肯定也要经历类似的循环。
库的最大好处表现在两方面:一是应该帮助用户处理浏览器问题,二是应该为用户提供能够简化开发的API。成功的库必须同时做到这两点。不过,也应该知道,寻求一种统一的库不太可能。毕竟,库与库间的差别主要体现在API,以及如何解决浏览器问题上。让所有库都提供平淡、通用的API,只会导致用户对其反复修补(Turning it into a bland, generic API will only result in a device that users will have to paper over again and again.)。
SP:Sizzle是什么?
Resig:Sizzle是一个新的纯JavaScript写成的CSS选择符引擎。Sizzle是这个引擎的代号,它最终会成为jQuery的新引擎。我希望能有一个高效(至少与其他竞争性引擎相比)、纤小(较小的文件)、容易扩展并且没有依赖性的引擎。
实现这样一个引擎的必要性在于,它很可能被其他一些主要的库采用。我已经跟MochiKit、Prototype、Dojo和TinyMCE团队谈过了,他们都表示对Sizzle的代码基很感兴趣。如果能统一JavaScript中CSS选择符的使用就再好不过了。 查看全文 »
Tags: HTML/XHTML, JavaScript
JavaScript中的Function(函数)对象
2008年12月26日 编程技术
JavaScript中的Function对象是函数,函数的用途分为3类:
- 作为普通逻辑代码容器;
- 作为对象方法;
- 作为构造函数。
1.作为普通逻辑代码容器
function multiply(x, y){
return x*y;
}
函数multiply封装了两位数的乘法运算公式:
var product = multiply(128,128); // product = 16384
创建函数实例的方式有3种。第一种是声明式,即像声明变量一样,将通过function(){}标识符创建的匿名函数直接赋值给变量,以该变量作为调用时的函数名称:
var multiply = function(x, y){
return x*y;
}
第二种是定义式,即以function关键字后跟函数名称及(){}来直接定义命名函数,前面第一个multiply函数就是通过定义式创建的。
第三种是构造函数式,即通过new运算符调用构造函数Function来创建函数。这种方式极不常用,因此就不作介绍了。 查看全文 »

为之漫笔(李松峰),本博客专注于Web前后端技术、移动平台开发技术、交互设计和技术翻译。 