我正在使用我在一个项目中继承的一些 JS 代码,并且在几个实例中它有像这样设置的循环:
while(text = someBufferObject.read()) {
//do stuff with text
}
我假设这是为了实现某种 do-while 类型的功能。然而,当我通过 JSLINT 运行它时,它提示说它“需要一个条件表达式,但却看到了一个赋值。”
对于这些循环,我应该使用更可接受的方法吗?我不确定下面这样的方法是否是最好的方法:
text = someBufferObject.read()
while(text) {
//do stuff with text
text = someBufferObject.read()
}
最佳答案
Is there a more accepted approach
不要将 JSLint 的建议当作福音。这是一个脾气暴躁的老人的教条意见;有些完全合理,有些则相当值得怀疑。
while (variable= assignment)
,虽然它有时可能是一个错误的比较器,但它也是一种被广泛理解的类 C 语言的习语。无论您使用那种方法还是另一种方法,都是个人品味问题,您应该亲自权衡,而不是盲目接受克罗克福德的法令。
JavaScript 确实有一个 do-while 循环,所以如果你的测试始终在最后,那将是一个更合适的结构:
do {
text= someBufferObject.read();
// do something
} while (text);
虽然您正在查看的是一个中期测试循环,但更常见的是。您可能喜欢也可能不喜欢 Python 使用的 break
习语:
while (true) {
text= someBufferObject.read();
if (!text)
break;
// do something
}
关于Javascript "do-while"类型循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1726826/