Learning jQuery 1.3前几天刚看到jQuery1.3.1b征求测试的消息,今天就收到Packt的NewsLetter,预告Learning jQuery的新版Learning jQuery 1.3将在2009年5月出版。作者仍然是Karl SwedbergJonathan Chaffer

顺便提一下,Learning jQuery作为“全球第一部jQuery著作”(责任编辑杨爽同学的手笔——没错,是全球第一本),其中文版《jQuery基础教程》(人民邮件出版社200807,图灵程序设计丛书),得到了广大读者的认可。第一次印刷的4000千册已经告罄,现在销售的应该是第二次印刷的了。因此,该书也荣登“图灵2008年度十大总排榜”(“十大总”啥意思?回头得问问刘江老师)。

jQuery基础教程》这本书卖得不错,倒不是因为本人的翻译有多好,主要还是出版社有眼光,引进了全球第一本jQuery专著(第二本jQuery in Action也是图灵引进的,估计2009年第一季度能上市)。而且,根据本人的观察,jQuery在国内应该是最受欢迎的JavaScript框架,无论是在Web专业开发人员,还是在普通的Web开发爱好者中,jQuery的口碑都是最棒的!(插播一条广告:jQuery以简单易用著称,不信请试试。)另外,2008年9月微软和诺基亚都宣布将在自己的平台中集成jQuery,无疑又为更多人转向学习jQuery起到了巨大的推动作用。

逻辑运算符包括逻辑与、逻辑或、逻辑非,英文分别对应:(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

mao.jpg

SitePointAra 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的新引擎。我希望能有一个高效(至少与其他竞争性引擎相比)、纤小(较小的文件)、容易扩展并且没有依赖性的引擎。

实现这样一个引擎的必要性在于,它很可能被其他一些主要的库采用。我已经跟MochiKitPrototypeDojoTinyMCE团队谈过了,他们都表示对Sizzle的代码基很感兴趣。如果能统一JavaScript中CSS选择符的使用就再好不过了。 查看全文 »

Tags: ,

JavaScript中的Function对象是函数,函数的用途分为3类:

  1. 作为普通逻辑代码容器;
  2. 作为对象方法;
  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来创建函数。这种方式极不常用,因此就不作介绍了。 查看全文 »