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

Javascript
用户注册常用javascript代码
JavaScript 事件监听实例代码[兼容IE,firefox] 含注释
javascript appendChild,innerHTML,join性能比较代码
JavaScript 继承详解 第一篇
javascript 控制 html元素 显示/隐藏实现代码
Javascript 判断函数类型完美解决方案
获取URL地址中的文件名和参数的javascript代码
js 获取浏览器高度和宽度值(多浏览器)
FF IE兼容性的修改小结
JS URL传中文参数引发的乱码问题
javascript 24小时弹出一次的代码(利用cookies)
ie focus bug 解决方法
javascript concat数组累加 示例
javascript 触发事件列表 比较不错
当文本框的值发生改变时,触发事件,在IE中有效
javascript 操作table的特性
jquery判断单个复选框是否被选中的代码
关于javascript中的parseInt使用技巧
JavaScript 密码强度判断代码
js跨域和ajax 跨域问题的实现思路

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 333 ::
收藏到网摘: 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测试过,结果是一样的!