赋值表达式的标准格式是什么?

What's the standard format for assignment expressions?

我在 JavaScript 中有以下功能,当 运行 它通过 JSLint 时,它对我大喊大叫,正如我所说的那样。

function getPos(event, element) {
    var x = event.clientX,
        y = event.clientY,
        currentElement = element;

    do {
        x -= currentElement.offsetLeft - currentElement.scrollLeft;
        y -= currentElement.offsetTop - currentElement.scrollTop;
    } while ((currentElement = currentElement.offsetParent));

    return {
        x: x,
        y: y
    };
}

特别是关于while循环中的内联赋值表达式。我认为双括号是标准的说法,"I'm expecting the returned value from the assignment expression to be type-casted to a Boolean for the conditional." JSLint 似乎不同意,即使我启用了 "assignment expressions." 然后我尝试在前面添加一个 !!,JSLint 抱怨它是 "confusing usage." 所以我的问题是,格式化这个的正确方法是什么?

编辑: "this",我指的是内联赋值表达式。我的问题的目的是澄清该特定行的可接受标准是什么,如果真的想使用它,虽然我同意 thefourtheye 的答案是编写函数的最正确方法,但它不是答案我问的问题。

根据 this article,对于 JSHint、ESHint 和 JSLint(从 2013 年 7 月之前开始),您可以将其强制为这样的条件:

do {
  // ...
} while ((currentElement = currentElement.offsetParent) !== null);

对于较新版本的 JSLint,你运气不好,如果你看重全绿色,则需要将你的作业分开。

条件表达式中最好不要有赋值表达式。但是,我相信 whiledo...while 更适合这种情况。您可以将代码转换为这个

function getPos(event, element) {
    var x = event.clientX,
        y = event.clientY,
        currentElement = element;

    while (currentElement) {
        x -= currentElement.offsetLeft - currentElement.scrollLeft;
        y -= currentElement.offsetTop - currentElement.scrollTop;
        currentElement = element.offsetParent;
    }

    return {
        x: x,
        y: y
    };
}

现在,条件表达式中不涉及赋值,我相信这看起来很干净。