如何在JS中合并if / else语句?

时间:2010-04-18 12:34:33

标签: javascript merge if-statement

我想知道如何正确合并这些JS if / else语句?

if (window.addEventListener) { window.addEventListener('dosomething', foo, false); }
else { document.addEventListener('dosomething', foo, false); }

if (window.attachEvent) { window.attachEvent('dosomething', foo); }
else { document.attachEvent('dosomething', foo); }

编辑我

原始代码是:

if (window.attachEvent) { window.attachEvent('dosomething', foo); }
else if (window.addEventListener) { window.addEventListener('dosomething', foo, false); }
else { document.addEventListener('dosomething', foo, false); }

现在,我想添加

document.attachEvent('dosomething', foo);

这里。

编辑II

原来,“document.addEventListener”/“document.attachEvent”是多余的,所以我会把它留给

if (window.addEventListener) { window.addEventListener('dosomething', foo, false); } 
else if (window.attachEvent) { window.attachEvent('dosomething', foo); }

谢谢大家!

6 个答案:

答案 0 :(得分:1)

两个条件执行不同的任务,您不应加入它们。不过,您可能需要查看javascript ternary operator to lessen your code.

答案 1 :(得分:1)

您不希望“合并”这些if语句。你正在检查两个完全不同的东西,即使它们是相关的。我强烈建议你不要。

答案 2 :(得分:1)

原始代码看起来没问题,但最好先检查window.addEventListener,因为这是标准的DOM Events接口。 attachEvent仅应用作9之前的IE版本的后备版。

我不知道您在检查windowdocument上的方法时所做的工作。如果方法存在于其中,则必然存在于另一方,因此您的额外选项将永远不会发生。

如果既没有window.addEventListener也没有window.attachEvent,那么您使用的是古老的浏览器或有限的(例如手机)浏览器。这些都不会在document上使用相同的方法;如果它们完全支持事件,那么你只能使用旧式window.onsomething= function() {...};样式事件进行绑定。

答案 3 :(得分:0)

保持原样。

如果你真的想改进你的代码,可以使用一个可以处理所有浏览器统一事件的js库(即jQuery)。

答案 4 :(得分:0)

您可以使用|| operator将其缩短为:

(window.addEventListener || document.addEventListener)('dosomething', foo, false);
(window.attachEvent || document.attachEvent)('dosomething', foo);

这是有效的,因为表达式expr1 || expr2的计算方法如下:

  

如果可以转换为true,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,||如果任一操作数为true,则返回true;如果两者都为假,则返回false。

答案 5 :(得分:0)

不建议在JS中制定if / else语句,如

if (foo) {
   bar();
} else {
   bla();
}

避免使用分号插入问题?