2016-01-25 57 views
1

我無法弄清楚爲什麼我不能在三元操作中使用我的for循環。這裏要說的是不工作的代碼:Javascript三元w/for循環錯誤; 「Uncaught SyntaxError:意外的令牌」

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; 
    } 
}; 

具體的的情況下,其中m ==「聲音」和typeof運算==「對象」引發錯誤「未捕獲的SyntaxError:用於意外標記」。如果我將該情況更改爲:

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; 

...然後一切按預期工作。

這是爲什麼?

+0

在您需要使用返回一些值,循環不會返回任何表情三元。 – sergioFC

+1

三元運算符可以非常方便,但它也爲無法讀取的意大利麪代碼留下了空洞。在我的愚見中,這是其中的一例。我不會推薦以這種方式編寫代碼。使用'if'。 – Timeout

+0

我和許多人指出的一樣......簡單的if/else語句以獲得更簡潔的代碼。謝謝大家的意見。謝謝Pointy解釋問題所在。 – cw84

回答

2

三元運算符的語法期望「分支」是表達式。你不能只在那裏發表任何陳述;在JavaScript中,for循環是而不是的表達式。

你可以將循環包裝在一個函數中並調用它,但是使用普通的if語句會簡單很多。

+3

我還會添加:「和更清晰」 –

0

如果你把你的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

但風格上你真的推信封...

+0

這也是一個語法錯誤。事實上,也是基於同樣的原因。一旦你用'('開始語句,唯一可以遵循的就是一個表達式,而'for'不是可以啓動表達式的一部分的標記。 – Pointy

+0

正確。@Pointy先前說明了唯一可以實現的方法這將是一個立即執行的匿名函數。 – voam

相關問題