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