我遇到了这段代码:
navigation.on('click', '.main-nav-item', function (e) {
var clickedNavItem = $j(this),
className = clickedNavItem.data('class'),
midNavItem = $j('.' + className, midNavigation);
midNavItem.length > 0 && e.preventDefault();
});
我试着理解最后一行的目的:
midNavItem.length > 0 && e.preventDefault();
如果midNavItem.Length>似乎停止点击0,但我不遵守这个的语法。它应该是_
if(midNavItem.length > 0) { e.preventDefault() };
不是两个条件。
你为什么这样写呢?
答案 0 :(得分:4)
它被称为short-circuit evaluation。你是对的 - 这是写你建议的if
陈述的另一种方式:
if (midNavItem.length > 0) {
e.preventDefault();
}
它有效,因为&&
won't execute the second operand unless the first is truthy。
使用它的基本原理通常是制作更整洁的代码。当然,这是主观的。可能有人说明确使用if
语法总是更好 - 但是你也会发现很多人/流行的图书馆使用这种速记。
答案 1 :(得分:3)
它更短。
虽然在这种情况下"短缺"被大量的空白丢失了。
这种优化只能 由缩小程序完成,不能手动,因为它会降低代码的可读性。