在应用方法之前检查元素/事件的健全性

时间:2011-11-15 17:28:40

标签: javascript

说,你想在元素proto中应用一个方法,该元素可能在dom中,也可能不在dom中。

通常,我曾经做过:

var foo = document.getElementById("foo"); // or $("foo") for mootools/prototype, whatever
if (foo)
    foo.focus();

虽然我现在认为由于flasy null和lazy&&,它实际上可以写成:

var foo = document.getElementById("foo"); 
foo && foo.focus(); 

类似地:

var clickHandler = function(event) {
    event && event.foo && event.foo();
};


clickHandler({
    foo: function() { alert("bar"); }
});

clickHandler();

我没有看到这种用法或根本不用作为一种模式,这让我相信它是:

  • 不便于阅读(不管怎样对我而言)
  • 有失败的情况

我可以继续使用吗?

http://jsfiddle.net/td6We/1/玩。我似乎无法打破它......

1 个答案:

答案 0 :(得分:1)

安全吗?

在代码能够执行的上下文中。 ||&&的返回机制是一致且明确的。使用不了解JS中||&&行为的程序员可能不安全。

可读

这取决于你在做什么。对于您对dom元素执行操作的情况,我强烈建议您使用if语句。对于跨浏览器的使用,单个语句很容易变成多个:

foo && foo.bar()

可能会变成

foo && foo.bar();
foo && foo.baz();

在这一点上,它更清晰:

if (foo) {
  foo.bar();
  foo.baz();
}

然而,有些利基案例可能不会变得更多。我一直使用这种特殊的语句风格:

console&&console.log(foo, bar, baz);