有条件地应用!到JavaScript中的方法

时间:2015-12-15 22:10:54

标签: javascript

不确定如何更好地说出这一点(因此,无法找到以前的答案,但我希望之前已经得到了解答),但我对是否有办法转换代码感兴趣:

if ( this.props.mailboxFilter == 'sent' ) {
  return this.currentUser.canActOnBehalfOf( m.senderID );
} else {
  return !this.currentUser.canActOnBehalfOf( m.senderID );
}

如下所示(不确定如何更好地表达它):

var bangOrNot = this.props.mailboxFilter == 'sent ? '!' : '';
bangOrNot( this.currentUser.canActOnBehalfOf( m.senderID ) );

有没有办法通过选择是否用一声巨响调用return行来避免扩展的if / else语法和所有重复?

5 个答案:

答案 0 :(得分:9)

您可以通过其他方式简化它:

db = DriverManager.getConnection(
        "jdbc:mysql://74.220.192.113/advanfc7_atm", 
        "myuserid",
        "mypwd");

通常,如果函数更改任何状态,您可能希望避免使用此方法。但是,因为在这种情况下你无论如何都在调用它,所以首先缓存它的值是没有害处的。

答案 1 :(得分:5)

如果this.currentUser.canActOnBehalfOf( m.senderID ) allways返回一个布尔值,你可以做XOR。

return (this.props.mailboxFilter != 'sent') ^ this.currentUser.canActOnBehalfOf(m.senderID);

XOR与true的布尔值产生NOT。与false的XOR创建一个保持相同值的缓冲区。

请注意,我已将==更改为!=

并且,如果您打算实际使用它,请确保对代码的这一部分进行注释。一段时间后阅读此代码并不容易。

<强>更新

Bergi所述,最好使用布尔XOR !=返回布尔值。

return (this.props.mailboxFilter != 'sent') != this.currentUser.canActOnBehalfOf(m.senderID);

当然,如果它也可以与布尔XNOR一起使用,只需在上面的代码中用!=替换==

答案 2 :(得分:3)

你想在这里使用布尔XNOR运算符 - 也称为等价

return this.currentUser.canActOnBehalfOf(m.senderID) == (this.props.mailboxFilter == 'sent');

答案 3 :(得分:0)

关于为什么或为什么不做这样的事情,有许多好的评论。我假设OP有充分的理由想要在函数调用的结果前应用bang(!)。我的回答更多是OP问题的技术解决方案。

function bang(r) {
    return !r;
}
function notBang(r) {
    return r;
}
function canActOnBehalf() {
    return true;
}
var filter = 'notsent';
var f = (filter == 'sent' ? bang : notBang);
f(canActOnBehalf('whatever'));

答案 4 :(得分:-4)

假设您正在使用javascript,则可以使用eval方法来评估一串javascript代码。您可以有条件地将爆炸应用于字符串的前面,然后返回eval的结果。