javascript或运算符“||”

Mozilla与IE在事件模型上略有差异 

<script language="JavaScript">
window.document.onmousedown = function(e){
e||(e=window.event);
var b = e.button||e.which;
if (b == 1) {
alert("Left Button");
}
}
</script>

等同于


 <script   language="JavaScript"> 
  var   ie   =   window.navigator.appVersion.indexOf('MSIE')==-1?false:true; 
  window.document.onmousedown   =   function(e){ 
  var   e   =   ie?window.event:e; 
  var   b   =   ie?e.button:e.which; 
  if   (b   ==   1)  { 
  alert("Left   Button"); 
  } 
  } 
  </script>
 此代码摘自:http://blog.csdn.net/laolaowhn/archive/2008/07/24/2706040.aspx
然而,上面代码用了 || 使代码更简短,同时,代码可读性就下降了许多。
那么,|| 到底是怎么实现的呢?

在其他语言里,
result=expression1||expression2


如果两个表达式中有一个或两个等于True,则result是True。下面的表举例说明了result是如何被决定的:

如果 expression1 是 且 expression2 是 则 result 是
True True True
True False True
False True True
False False False

那么,我们来分析最上面的代码:
首先是 e||(e=window.event)我们来看下面的代码:
alert(null||123-123)
页面提示一个对话框显示 0
alert(123||123-123)
页面提示 : 123

在javascript中:

所有对象都被认为是 true。
字符串当且仅当为空时才被认为是 false。
null和 undefined被认为是 false。
数字当且仅当为 0 时才是 false。

这个就解释了上面为什么会用e||(e=window.event)来代替 result?exp1:exp2 了。

我个人理解:
result=expression1||expression2
并不是直接返回的true或false,
而是:
当expression1为“true”返回expression1
当expression1为“false”,而expression2为“true”时,返回expression2
当expression1,expression2都为false时,返回后面的expression2
【可以去测试:alert(undefined||null);】

这个规则也相当好记,因为javascript是很公平的啊,当全为true是返回第一个表达式,当全为false时,返回第二个表达式,如果只有一个是true,那么返回true表达式。


以上属个人理解。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kkai189/archive/2008/10/13/3069128.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值