从firefox 与 Ie 鼠标事件区别分析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,则resultTrue。下面的表举例说明了result是如何被决定的:

如果 expression1 是且 expression2 是则 result 是
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse

那么,我们来分析最上面的代码:
首先是 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表达式。



以上属个人理解。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值