【发布时间】:2016-01-25 18:45:18
【问题描述】:
我无法弄清楚为什么我不能在三元运算中使用我的 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;
}
};
特别是 m == 'voice' 和 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;
...然后一切都按预期进行。
这是为什么呢??
【问题讨论】:
-
在三元中你需要使用返回一些值的表达式,for循环不返回任何东西。
-
三元运算符非常方便,但它也为不可读的意大利面条代码留下了一个漏洞。在我看来,这就是其中之一。我不建议以这种方式编写代码。使用
if。 -
我采用了许多人指出的...简单的 if/else 语句,代码更简洁。谢谢大家的意见。感谢 Pointy 解释问题所在。
标签: javascript for-loop ternary