select2代码的三元运算符需要说明

Posted

技术标签:

【中文标题】select2代码的三元运算符需要说明【英文标题】:Need explanation on ternary operator of select2 code 【发布时间】:2017-12-24 23:48:05 【问题描述】:

在 jquery 的 select2 组件中,我在 'keypress' 事件监听器中遇到了以下代码。

 a.isOpen() ? c === d.ESC || c === d.TAB || c === d.UP && b.altKey ? (a.close(),
                b.preventDefault()) : c === d.ENTER ? (a.trigger("results:select", ),
                b.preventDefault()) : c === d.SPACE && b.ctrlKey ? (a.trigger("results:toggle", ),
                b.preventDefault()) : c === d.UP ? (a.trigger("results:previous", ),
                b.preventDefault()) : c === d.DOWN && (a.trigger("results:next", ),
                b.preventDefault()) : (c === d.ENTER || c === d.SPACE || c === d.DOWN && b.altKey) && (a.open(),
                b.preventDefault())

谁能解释一下这个复杂的结构?

【问题讨论】:

【参考方案1】:

三元组转换为 if 和 else 语句,您可以将它们嵌套在一起。

它大致翻译成这个。您可以继续深入兔子洞,将其分解为更多嵌套的 if 和 else 语句

if(a.isOpen())

    if(c === d.ESC || c === d.TAB || c === d.UP && b.altKey)
        a.close();
        b.preventDefault();
    
    else
        if(d.ENTER)
            a.trigger("results:select", ;
            b.preventDefault();
        
        else

            if(d.SPACE && b.ctrlKey)
                a.trigger("results:toggle", );
                b.preventDefault();
            
            else

                if(c === d.UP)
                    a.trigger("results:previous", );
                    b.preventDefault()
                
                else
                    ...and so on and so on
                
            
        
    


【讨论】:

以上是关于select2代码的三元运算符需要说明的主要内容,如果未能解决你的问题,请参考以下文章

PHP 三元运算符说明

Java中与if else相比三元运算符的弊端?

三元运算符

三元运算符中不需要的 NullPointerException - 为啥? [复制]

PHP三元运算符

python 的三元运算符