Javascript 应用方法之前对元素/事件进行健全性检查
比方说,您希望将元素proto中的方法应用于dom中可能存在或不存在的元素 通常,我会: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 &
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);