【问题标题】:Unexpected token, expected :意外的令牌,预期:
【发布时间】:2018-09-20 07:04:01
【问题描述】:

我想使用三元运算符,但收到以下错误消息:

" 意外令牌,应为:"

这是为什么呢?

这是我的第一个代码:

const GetUp = (num) => {
  for (let i = 1; i <= num; i++) {
    if (i % 3 === 0) {
      console.log('Get')
    }
    if (i % 5 === 0) {
      console.log('Up')
    }
    if (i % 3 === 0 && i % 5 === 0) {
      console.log('GetUp')
    } else {
      console.log(i)
    }
  }
}
GetUp(200)

这是我最近的代码:

const SetRuc = (num) => {
  for (let i = 1; i <= num; i++) { 
    (i % 3 === 0) ? console.log('Set')
    (i % 5 === 0) ? console.log('Ruc')
    (i % 3 === 0 && i % 5 === 0) ? console.log('SetRuc') : console.log(i)
  }
}

SetRuc(100)

【问题讨论】:

  • 当你使用三元运算符时,你必须像上一个那样给它一个替代项(在: 之后)。这就是为什么它被称为“三元”的原因:因为它有三个部分,即condition ? true-branch : false-branch
  • 而且你的情况并不是很好地使用三元运算符,坚持 if
  • 看起来像 Fizz Buzz,但名称不同。
  • 它看起来确实像 Fizz Buzz,但在 5 3 的倍数上,这会注销“Set Ruc SetRuc”,而不仅仅是“SetRuc”
  • 关于你原来的代码(新的也有同样的问题),假设它必须遵循fizzbuzz的经典规则,把最后一个条件放在第一位,在第一个条件之后使用else if。跨度>

标签: javascript ecmascript-6 ternary-operator


【解决方案1】:

如果您不想在三元运算符出现错误结果的情况下做任何事情。你可以说类似statement ? 'expression' : null

只需在其中提及null。像

const SetRuc = (num) => {
  for (let i = 1; i <= num; i++) { 
    (i % 3 === 0) ? console.log('Set') : null;
    (i % 5 === 0) ? console.log('Ruc') : null;
    (i % 3 === 0 && i % 5 === 0) ? console.log('SetRuc') : console.log(i);
  }
}

SetRuc(100)

【讨论】:

    【解决方案2】:

    如果没有else,则使用&amp;&amp; 进行速写

    添加半列; 让它知道它是指令的结尾,否则它将把三行作为一条指令进行评估。

    const SetRuc = (num) => {
      for (let i = 1; i <= num; i++) { 
        (i % 3 === 0) && console.log('Set');
        (i % 5 === 0) && console.log('Ruc');
        (i % 3 === 0 && i % 5 === 0) ? console.log('SetRuc') : console.log(i);
      }
    }
    
    SetRuc(100)

    【讨论】:

      【解决方案3】:
      const SetRuc = (num) => {
        for (let i = 1; i <= num; i++) { 
          (i % 3 === 0) ? console.log('Set') :
          (i % 5 === 0) ? console.log('Ruc') :
          (i % 3 === 0 && i % 5 === 0) ? console.log('SetRuc') : console.log(i)
        }
      }
      
      SetRuc(100)
      

      你在console.log('Set')console.log('Ruc')之后错过了:

      【讨论】:

        【解决方案4】:

        你误用了三元运算符,语法是:

        condition ? expr1 : expr1
        

        假设条件为真则执行expr1,否则执行expr2

        所以你可能想要这个:

        const SetRuc = (num) => {
          for (let i = 1; i <= num; i++) { 
            (i % 3 === 0) ? console.log('Set') :
            (i % 5 === 0) ? console.log('Ruc') :
            (i % 3 === 0 && i % 5 === 0) ? console.log('SetRuc') : console.log(i)
          }
        }
        
        SetRuc(100)
        

        【讨论】:

          【解决方案5】:

          例如:

          (i % 3 === 0) ? console.log('Set')
          

          没有为? 提供: 选项。如果您不希望在? 检查为假的情况下发生任何事情,您可以简单地提供一个空对象,或undefined

          (i % 3 === 0) ? console.log('Set') : {}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-19
            • 2019-03-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多