等价于 JavaScript 中的 continue 语句
Posted
技术标签:
【中文标题】等价于 JavaScript 中的 continue 语句【英文标题】:Equivalent of a continue statement in JavaScript 【发布时间】:2016-09-17 08:26:41 【问题描述】:我想知道 javascript 中 continue 语句的结构化等价物是什么?我试图摆脱 continue 声明,但不知道如何。谁能指出我正确的方向?谢谢!
function Hand()
this.cards = new Array();
this.addOneCard = function(card)
this.cards.push(card);
this.evaluateHand = function()
// Needs to handle two aces better
var total1 = new Number;
var total2 = new Number;
for(var i in this.cards)
if (this.cards[i].value == "A")
total1 += 1;
total2 += 11;
continue;
if (isNaN(this.cards[i].value * 1))
total1 += 10;
total2 += 10;
continue;
total1 += Number(this.cards[i].value);
total2 += Number(this.cards[i].value);
return [total1, total2];
;
【问题讨论】:
为什么需要改变?continue
是语言的一部分,非常适合您的需求。
【参考方案1】:
continue
语句在 JavaScript 中有效。您可以像在任何语言中一样使用它。
说完之后,您可以阅读此interesting discussion,了解您为什么要避免它以及如何避免它。
【讨论】:
【参考方案2】:else if
对在这里为您提供帮助:
for(var i in this.cards)
if (this.cards[i].value == "A")
total1 += 1;
total2 += 11;
else if (isNaN(this.cards[i].value * 1))
total1 += 10;
total2 += 10;
else
total1 += Number(this.cards[i].value);
total2 += Number(this.cards[i].value);
【讨论】:
【参考方案3】:这应该适用于任何语言,而不仅仅是 java 脚本
function Hand()
this.cards = new Array();
this.addOneCard = function(card)
this.cards.push(card);
this.evaluateHand = function()
// Needs to handle two aces better
var total1 = new Number;
var total2 = new Number;
for(var i in this.cards)
if (this.cards[i].value == "A")
total1 += 1;
total2 += 11;
else if (isNaN(this.cards[i].value * 1))
total1 += 10;
total2 += 10;
else
total1 += Number(this.cards[i].value);
total2 += Number(this.cards[i].value);
return [total1, total2];
;
【讨论】:
【参考方案4】:一个选项是:
this.cards.forEach(function(card)
if (card.value == "A")
total1 += 1;
total2 += 11;
return;
if (isNaN(card.value * 1))
total1 += 10;
total2 += 10;
return;
total1 += Number(card.value);
total2 += Number(card.value);
);
显然有些人认为return
会终止一切...return
会停止为当前元素运行的函数,从而立即开始下一次迭代,就像continue
一样。我并不是说这比仅使用 continue
更好,但它绝对是一个替代方案。
【讨论】:
return
结束函数,但 continue
继续 for 循环。
returns
结束循环中的函数并开始循环的下一次迭代。这不就是continue
在做什么吗?
不,return
终止函数(和)。没有更多的迭代。 continue
跳转到 for 循环的开头并跳过部分到 for 循环的末尾。
这是不正确的。我建议您打开控制台并运行类似var a = []; [1, 2, 3, 4].forEach(function(i) if (i % 2 == 0) return; a.push(i);
的内容,然后查看a
中的内容(提示:它是[1, 3]
)
forEach()
和 return
当然等同于 for
和 continue
,但我的印象是 OP 希望避免像那样跳出中间。 (不确定这是否是 OP 的目标,但我知道有些人认为函数的结构应该在末尾有一个返回,并且没有像 continue
或 break
这样的跳转语句 - 我不同意那些人。)
以上是关于等价于 JavaScript 中的 continue 语句的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .ForEach() 方法中使用 continue 语句
javascript 等价于 php unpack() 函数
Javascript 等价于 python 的 .format()