说,你想在元素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/玩。我似乎无法打破它......
答案 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);