表达式为true时,JS返回false

时间:2014-08-06 22:10:24

标签: javascript

我喜欢,经常使用

return this || that

现在我从db中得到一个true或false值,当为true时我想返回false,而当false返回一个元素时,如下所示:

$('.orderDetailPanelLeft').append(function () {
    return !(!json.controls.download) ||
        $('<div>')
        .addClass('subPanel')
        .text('Download Results')
});

无论我如何添加!,!(!,!(!!它返回true或(错误地)元素。我意识到有一个简单的&#34; if&#34;解决方案,所以请不要&#39;提供这个。当json.controls.download为真时,我想使用这个||语法返回false。

如何写这个,以便在&#34; return&#34;中返回false或div。声明?

3 个答案:

答案 0 :(得分:2)

如果你可以放弃对||的持久爱,但仍然希望自由地去if - 免费:

$('.orderDetailPanelLeft')
    .append(function () {
        return json.controls.download ? false :
            $('<div>')
                .addClass('subPanel')
                .text('Download Results');
    })

答案 1 :(得分:2)

return !json.controls.download && $('<div>')
                                      .addClass('subPanel')
                                      .text('Download Results');

如果您不想要包含三元运算符的if的任何变体,这将适合您的情况。 (或者你只是讨厌关键字false。)

为了更好的可读性,您应该更喜欢Paul Roub's answer

&&short-circuits中的||相反。

答案 2 :(得分:0)

我认为这是不可能的,因为||运算符在计算到true时返回第一个操作数,第二个操作数在第一个操作数被计算为false时返回。

因此,无论你设置为第一个操作数,只要它是一个被评估为true的布尔值,你就会得到那个布尔值,而不是元素。

正如Derek所建议的那样,您实际需要的是&&运营商。使用&&运算符,可以在第一个操作数计算为true时获取第二个操作数。