Javascript While循环条件下的语句

Javascript While循环条件下的语句,javascript,while-loop,Javascript,While Loop,假设我有一个可以通过collection.GetByIDlong访问的东西集合,但我无法提前获得该东西的长度。我想建立一个while循环来遍历每一个 显然,我可以这样做: var iter = 0; var thing = TheCollection.GetByID(iter); while (thing != null) { dealWithTheThing(thing); iter++; thing = TheCollection.GetByID(iter); }

假设我有一个可以通过collection.GetByIDlong访问的东西集合,但我无法提前获得该东西的长度。我想建立一个while循环来遍历每一个

显然,我可以这样做:

var iter = 0; var thing = TheCollection.GetByID(iter);
while (thing != null) {
    dealWithTheThing(thing);
    iter++;
    thing = TheCollection.GetByID(iter);
}
var iter = 0; var thing;
while ((thing = TheCollection.GetByID(iter++)) != null) {
    dealWithTheThing(thing);
}
但我更愿意通过将修改放在构造函数中来整理它,并能够得到如下结果:

var iter = 0; var thing = TheCollection.GetByID(iter);
while (thing != null) {
    dealWithTheThing(thing);
    iter++;
    thing = TheCollection.GetByID(iter);
}
var iter = 0; var thing;
while ((thing = TheCollection.GetByID(iter++)) != null) {
    dealWithTheThing(thing);
}

这是可能的还是类似的情况?

在循环看起来很漂亮的条件中使用赋值运算符时,可能会导致其他人混淆,因为很容易键入==to=

在向您发出警告后,我发现以下内容更具可读性:

var iter = 0; var thing;
while (thing = TheCollection.GetByID(iter++) && thing != null) {
    dealWithTheThing(thing);
}

是的,你的例子很好。你可以在一定条件下完成作业,而且至少对我来说,作业的风格非常清晰。

你为什么不试试呢?它会起作用的:我试过了,但没能让它起作用,所以我问这个问题是为了检查我的想法是否正确。现在我知道这不是问题所在,我可以看出由于收藏的内容,它不起作用。谢谢将表达式放在while条件下比放在下面的块中要慢一些,但通常不是很明显。出于几个原因,我不同意,尤其是这改变了他的循环的性质。你的赋值语句对于任何虚假的东西都是虚假的,因此,false,0,等等,而这些东西中的许多都是!=无效的因此,您将在不同的条件下中断循环,因为您使用了&&。实际上,您已经测试了两次,第一次测试是相当隐蔽的。这篇文章的可读性比原著要低,而不是更高。如果您确实想这样做,可以使用逗号运算符。它也不会提高可读性,但至少不会带来问题。@TJCrowder:我的印象是,不管赋值多少,赋值总是返回true。当然,你是对的:谢谢你的回答!很好,这次讨论指出了赋值的布尔值,因为这不是我事先明确知道的。@Matt:事实上,我是对的,也是错的,&&的优先级高于=,因此循环实际上是在thing=collection.GetByIDiter++&&thing!=null,这一点更不明显:-@TJCrowder:如果这种构造让每个人都感到困惑,那么最好避免这种构造:P。我已经使用这种方法很多年了。。。谢天谢地,只有真实的价值观,这就是为什么我一直生活在泡沫中这么长时间!谢谢知道这不是一个问题帮助我在代码中找到了真正的问题,并让我对结果的外观更满意!