2

祝大家感恩节快乐:

我已经在这个问题上绞尽脑汁半小时了,但还是不太明白条件句的作用所在。我想我已经把它记下来了,但只是想由专业人士来运行它。

(i%3)?(i%5)?i:'Buzz':(i%5)?'Fizz':'FizzBuzz'

它分解为以下几点:

    if ((i%3) == false) {
        if ((i%5) == false) {
            console.log("FizzBuzz");
        } else {
            console.log('Fizz');
        }
    } else {
        if ((i%5) == false) {
            console.log("Buzz");
        } else {
            console.log(i);
        }
    }

而且我假设三元运算符按以下方式分组(我习惯于在典型结果中看到三元运算符?a : b时尚,所以额外的结果和条件让我失望)

(i%3)?
    //if the condition is not a multiple of 3
    //check if it is a multiple of 5
    //if it isn't, log the number
    //otherwise log "Buzz" 
    (i%5)?i:'Buzz'
    //if the condition is a multiple of 3
    //check if it is a multiple of 5
    :(i%5)?
        //if it is log "Fizz", 
        //otherwise i is a multiple of 3 & 5 -
        //log "FizzBuzz"
        'Fizz':'FizzBuzz

我非常感谢任何量化的帖子和/或澄清。再次感谢。

4

2 回答 2

3

三元运算符具有从右到左的结合性,这意味着表达式与

(i%3) ? ((i%5) ? i : 'Buzz') : ((i%5) ? 'Fizz' : 'FizzBuzz')

或者它以下列方式分解

1st ? ( 2nd ) : ( 2nd )

2nd这两个部分也是三元的这一事实对第一个的过程没有影响。

于 2012-11-23T03:44:43.153 回答
1

在 C 的传统中,三元运算符并不是真正的var ? var : var. 实际上是:

statement ? statement : statement

这意味着,代替变量或值,您可以将代码放在那里进行评估,并将该代码的返回值作为值。所以,

(i%3)?(i%5)?i:'Buzz':(i%5)?'Fizz':'FizzBuzz'

分解为:

(i%3) ?
         (i%5) ?
                  i
               :
                  'Buzz'
      :
         (i%5) ?
                  'Fizz'
               :
                  'FizzBuzz'

(基本上你在问题中写的,所以你的解释是正确的)

它有助于将它们:放在单独的行中,以便您可以看到模式。我还将 与 对齐?:查看哪个与哪个分组。

于 2012-11-23T03:46:23.110 回答