今天在浏览《Javascript高级程序设计》的译者:曹力的blog:http://shiningray.cn的时候,看到了一个有意思的js编写方式:“短路”条件调用
var f = false; var t = true; var n=2; var z = (f == 4) || (t == n); // the key alert(z); // output:2
之前在看一些库的源码的时候都看到过类似的这种用法,但是由于无法用简单的例子测试而没有借鉴来实践在自己的项目中。在曹力的blog里看到了这个简单的例子,终于
豁然开朗了。既可以作为判断,又能根据需要来赋值,可谓一举两得,这种编写方式值得借鉴!!
原文网址:《函数式JavaScript编程指南》
另外在它的blog里也看到了一篇关于优化js的不错的文章,文章中提供了很多js细节上的效率问题,推荐大家阅读:《如何优化JavaScript脚本的性能》
2009/12/04 update:
上面提到了“短路”的编写方法,也让我想到了另外的一些编写方式来避免丑陋的if…else…的格式,本人是非常讨厌if..else..的,除非必要,否则都会使用另外的方式来代替它。
//假设id为一个已知的变量
var getById= typeof id === "string" ? function(){
return document.getElementById(id);
} : function(){
return id;
}
上面使用三元运算符的方式也很好的避免了丑陋的if..else..判断。
这个不算“短路”吧,很常见的用法啊,连我都知道,||和&&运算符返回的就是最后一次被求值的表达式的值,是||运算符的话,如果第一个表达式为true,则返回左边表达式,而不再计算右边表达式,如果左边为false,则返回右边表达式,&&运算符的话,如果左边为false则返回左边表达式,不再计算右边,如果左边为true,则返回右边表达式。
比如:
ver evtTarget = evt.target || evt.srcElement
var div1 = document.createElement && document.createElement(‘div’);
如果支持document.createElement的话,最后返回的是那个新建的div。如果不支持的话,最后返回的是document.createElement,因为是未定义的属性,所以值是undefined
Supersha 回复:
一月 7th, 2010 at 9:36 上午
@番茄, 这只是一种概念性的东西吧,要不然,你说什么是“短路”?