没有结果的条件是什么原因?

时间:2014-10-22 09:03:49

标签: javascript

我遇到了这段代码:

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() };

不是两个条件。

你为什么这样写呢?

2 个答案:

答案 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)

它更短。

虽然在这种情况下"短缺"被大量的空白丢失了。

这种优化只能 由缩小程序完成,不能手动,因为它会降低代码的可读性。