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

Javascript
JS 文件本身编码转换 图文教程
jQuery Ajax之$.get()方法和$.post()方法
jQuery Ajax之load()方法
JavaScript 核心参考教程 内置对象
JavaScript 核心参考教程 RegExp对象
javascript hashtable实现代码
百度留言本js 大家可以参考下
javascript 判断某年某月有多少天的实现代码 推荐
让iframe子窗体取父窗体地址栏参数(querystring)
jquery pagination插件实现无刷新分页代码
jQuery与javascript对照学习 获取父子前后元素 实现代码
通用javascript脚本函数库 方便开发
JQuery 绑定事件时传递参数的实现方法
支持IE,Firefox的javascript 日历控件
javascript 变速加数功能实现代码
extjs 学习笔记(一) 一些基础知识
extjs 学习笔记(二) Ext.Element类
Jquery 学习笔记(一)
一些技巧性实用js代码小结
jquery 常用操作整理 基础入门篇

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


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