首页 文章

Javascript三元w / for循环错误; “未捕获的SyntaxError:意外的令牌”

提问于
浏览
1

我无法弄清楚为什么我不能在三元运算中使用我的for循环 . 这是不起作用的代码:

this.ask = function() {
  m = (isVoice) ? 'voice' : 'text';
  switch (true) {
    case m == 'voice' && typeof questions[timer.question].voice == 'string':
      (++timer.attempts > timer.maxAttempts) ?
        console.log('Stop'):
        console.log('Play file (' + timer.attempts + '): ' + questions[timer.question].voice);
      break;
    case m == 'voice' && typeof questions[timer.question].voice == 'object':
      (++timer.attempts > timer.maxAttempts) ?
        console.log('Stop'):
        for (i = 0; i < questions[timer.question].voice.length; i++) {
          console.log(questions[timer.question].voice[i])
        };
      break;
    default:
      (++timer.attempts > timer.maxAttempts) ?
        console.log('Stop'):
        console.log('Say Text (' + timer.attempts + '): ' + questions[timer.question].text);
      break;
  }
};

具体来说 case where m == 'voice' and typeof == 'object' 会抛出错误"Uncaught SyntaxError: Unexpected token for" . 如果我改变那个案例是:

case m == 'voice' && typeof questions[timer.question].voice == 'object':
            console.log('Audio, Array.');
            if (++timer.attempts > timer.maxAttempts) {
                console.log('Stop');
            }
            else {
                for (i in questions[timer.question].voice) {
                    console.log(questions[timer.question].voice[i]);
                }
            }
            break;

......然后一切都按预期工作 .

为什么是这样??

2 回答

  • 0

    三元运算符的语法要求"branches"是表达式 . 你不能只在那里任意陈述;在JavaScript中, for 循环不是表达式 .

    你可以将循环包装在函数中并调用它,但是使用普通的 if 语句会简单得多 .

  • 2

    如果你将for循环包装在括号中它可能会起作用 .

    function() {
        for (i = 0; i < questions[timer.question].voice.length; i++) {
         console.log(questions[timer.question].voice[i])
        }
    }()
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

    但风格上你真的在推动信封......

相关问题