您的位置:首页 > Web前端 > JavaScript

从firefox 与 Ie 鼠标事件区别分析javascript或运算符“||”

2008-10-13 14:48 711 查看
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表达式。

以上属个人理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: