Javascript"do-while"类型循环

Dun*_*son 4 javascript

我正在使用我在项目中继承的一些JS代码,并且在几个实例中它具有像这样的循环设置:

while(text = someBufferObject.read()) {
  //do stuff with text
}
Run Code Online (Sandbox Code Playgroud)

我假设这是为了实现某种类型的do-while类型功能.但是,当我通过JSLINT运行它时,它抱怨它"预期一个条件表达式,而是看到一个赋值."

是否有一种更为公认的方法我应该用于这些循环?我不确定下面的内容是否是最佳方式:

text = someBufferObject.read()
while(text) {
  //do stuff with text
  text = someBufferObject.read()
}
Run Code Online (Sandbox Code Playgroud)

bob*_*nce 11

是否有更容易接受的方法

不要将JSLint的建议视为福音.这是一个胡思乱想的老人的教条意见; 其中一些是完全合理的,有些是相当可疑的.

while (variable= assignment)虽然它有时可能是一个错误的比较器,但也是一种广泛理解的类C语言的习语.无论你使用这种方法还是其他方法都是品味问题,你应该亲自权衡,而不是盲目地接受克罗克福德的法令.

JavaScript 确实有一个do-while循环,所以如果你的测试始终在最后,那么这将是一个更合适的结构:

do {
    text= someBufferObject.read();
    // do something
} while (text);
Run Code Online (Sandbox Code Playgroud)

更常见的是,你正在看的是一个中等测试循环.您可能喜欢也可能不喜欢breakPython使用的习语:

while (true) {
    text= someBufferObject.read();
    if (!text)
        break;
    // do something
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*wig 11

您只需将其包装在另一组括号中以使JSLint满意.

while((text = someBufferObject.read())) {
  //do stuff with text
}
Run Code Online (Sandbox Code Playgroud)

  • 在最新版本的JSLint中似乎不是这种情况 - 它仍然会检测到它 (3认同)