在JScript中运算符"||"和"&&"的特殊特性

    在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是否也是这样支持的?如果您方便的话,请告如我运行后的结果

posted on 2005-01-21 00:07 birdshome 阅读(4476) 评论(8) 编辑 收藏

评论

#1楼  回复 引用 查看   

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;
2005-01-21 01:25 | Lostinet      

#2楼  回复 引用 查看   

另外要注意 null 与 false 的比较.
0 "" 等与 false 进行==比较时都是相等的.

但是 null 则不同了. 例如

if(!null)
{
alert(1);
}
if(null==false)
{
alert(2);
}
2005-01-21 01:30 | Lostinet      

#3楼  回复 引用   

嗯,null和false做(null==false)为false是因为null是个object,它表示空对象,但正好和你前面说的吻合了,只不过它其实是"有意义"的而已。
2005-01-21 01:38 | birdshome

#4楼  回复 引用 查看   

在Firefox测试过,结果是一样的!
2005-01-21 09:06 | Boler Guo      

#5楼  回复 引用 查看   

好贴
2005-01-21 10:02 | Aqee      

#6楼  回复 引用 查看   

Lostinet 真是个怪物。
2005-02-19 07:19 | 辣妹子      

#7楼  回复 引用   

very good strong
2008-07-16 09:27 | snr_yang[未注册用户]

#8楼  回复 引用 查看   

有谁会这样用这些运算符?
2009-10-11 12:30 | 小桥      

导航

公告

  原创技术文章和心得,转载必须注明来源"博客园"!
  贴子以"现状"提供,且没有任何担保,同时也没有授予任何权利。
昵称:birdshome
园龄:7年10个月
荣誉:推荐博客
粉丝:73
关注:3

搜索

 

常用链接

我的标签

随笔分类(337)

文章分类(147)

相册

Ex-Colleagues

常用链接

兄弟情深

积分与排名

  • 积分 - 3145044
  • 排名 - 6

最新评论

阅读排行榜

推荐排行榜