我刚刚编写了以下循环,它工作得很好:
let position = 0;
// tslint:disable-next-line:no-conditional-assignment
while ((position = source.indexOf('something interesting', position)) > 0) {
// do something interesting with something interesting
position += 1;
}
但请注意,我必须添加 tslint 异常(exception)。显然有人
已决定不允许在
while
有条件的。然而,这是我所知道的最直接的代码模式特定的情况。
如果这不是“允许的”(或者我应该说“不鼓励”),那该怎么办
驱动这个的人认为正确的代码模式是什么?
最佳答案
它使代码的意图更难确定。使用赋值作为表达式是不寻常的——如果你在一个条件中看到它,你有多确定代码的作者打算使用赋值,或者它可能是一个错字?如果代码的编写者打算比较该值怎么办?例如
while ((position = source.indexOf('something interesting', position)) > 0) {
对比
while ((position == source.indexOf('something interesting', position)) > 0) {
这两个是非常不同的。 (在这种特殊情况下,Typescript 会警告您与 bool 值和数字的比较可能是一个错误,但这不会发生在 Javascript 中,也不会在其他一些情况下发生。)
对于上面的代码,您可以使用正则表达式(尽管在不知道
// do something interesting with something interesting
的内容的情况下无法确定),而不是在条件内部分配,在条件外部分配,甚至更好。不幸的是,它看起来重复,但另一种选择是
let position = 0;
const getPos = () => {
position = source.indexOf('something interesting', position);
};
getPos();
while (position > 0) {
// do something interesting with something interesting
getPos();
}
关于javascript - 为什么在 Javascript 中不鼓励在 while 语句中赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58704026/