Javascript 应用方法之前对元素/事件进行健全性检查

Javascript 应用方法之前对元素/事件进行健全性检查,javascript,Javascript,比方说,您希望将元素proto中的方法应用于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 &

比方说,您希望将元素proto中的方法应用于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();
我没有看到过这种模式被大量使用,或者根本没有被用作一种模式,这让我相信它是:

  • 不利于可读性(对我来说不是这样)
  • 有失败的案例
我可以继续使用它吗

玩。我似乎无法打破它…

它安全吗

是的,在代码能够执行的上下文中。
|
&&
的返回机制是一致的和定义良好的。在不了解JS中
|
&&
行为的程序员周围使用可能不安全

它可读吗

这取决于你在做什么。对于在dom元素上执行操作的情况,我强烈建议使用
if
语句。在跨浏览器使用时,很容易将一条语句转换为多条语句:

foo && foo.bar()
可能变成

foo && foo.bar();
foo && foo.baz();
在这一点上,它更加清晰:

if (foo) {
  foo.bar();
  foo.baz();
}
然而,在一些特殊情况下,它不太可能变成更多。我一直使用这种特殊的语句样式:

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