当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 利用JScript中运算符"||"和"&&"的特殊特性实现代码精简

Javascript
js 方法实现返回多个数据的代码
Ext 表单布局实例代码
javascript document.referrer 用法
JavaScript 字符编码规则
JS 动态加载脚本的4种方法
jQuery textarea的长度进行验证
jQuery select的操作实现代码
jQuery 1.2.x 升級 1.3.x 注意事项
关于viewport,Ext.panel和Ext.form.panel的关系
日期 时间js控件
JavaScript的parseInt 进制问题
javascript 有用的脚本函数
javascript 两个字符串比较函数
javascript 代码运行器
js arguments.callee的应用代码
JavaScript Table排序 2.0 (更新)
给Function做的OOP扩展
<script defer> defer 是什么意思
FF和IE之间7个JavaScript的差异
javascript获取当前ip的代码

Javascript 中的 利用JScript中运算符"||"和"&&"的特殊特性实现代码精简


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 367 ::
收藏到网摘: n/a

在JScript的众多运算符里,提供了三个逻辑运算符&&||!,噢?! 是高级语言都提供的。按我们对逻辑运算的正常认识,逻辑运算的结果因该是ture或者false。但是JScript的逻辑运算却不完全是这么定义的,这里只有!运算符总是返回true|false,而||和&&运算比较的好玩。
JScript对于逻辑运算的true|false是这么定义的:
  • 所有对象都被认为是 true。
  • 字符串当且仅当为空(""或'')时才被认为是 false。
  • null 和未定义的均被认为是 false。
  • 数字当且仅当为 0 时才是 false。

可是逻辑运算符||&&虽然遵循上面的定义规则,但是它们返回的值却很有意思。
对于&&运算,按照上面的规则,表达式 if ( 'abc' && '123' && new Date() ) 是执行true分支,可是这个表达式如果写成:

var value = 'abc' && '123' && new Date();

结果value=Fri Jan 21 00:01:17 UTC+0800 2005,原它从左到右检测,如果到了最后一个表达式也是为true的,就返回那个表达式。

对于||运算同理,对于下面的表达式:

var value1 = 'abc' || '123' || null || false;
var value2 = null || '' || false || 'ok';

结果value1='abc',value2='ok'。这是因为||运算会有"短路"特性,他也是从左向右检测,只不过它是一但发现有为true的值,就立即返回该表达式。
这样的特性可以帮组我们写出精简的代码,可是同时也带来代码不便于阅读维护的问题。
由于我手头暂时没有NS和moz什么的浏览器,不知道标准JavaScript是否也是这样支持的?如果您方便的话,请告如我运行后的结果。

JScript中,这些逻辑运算都是判断一个表达式是否为"有意义的"
例如 0,"",null,false,undefined,NaN..等都是无意义的..
&& 会返回 true 或 false
而 a||b 则是, 如果a是有意义的,则返回a,否则返回b
所以有时候,我不这样写代码:
var obj=QuerySomeObject();
if(obj==null)return null;
return obj.Property;
我会写成
return (QuerySomeObj()||{}).Property;
另外要注意 null 与 false 的比较.
0 "" 等与 false 进行==比较时都是相等的.
但是 null 则不同了. 例如
if(!null)
{
alert(1);
}
if(null==false)
{
alert(2);
}
在Firefox测试过,结果是一样的!