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

时间:2015-01-10 06:54:24

标签: javascript standards jslint

我在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循环中的内联赋值表达式。我认为双括号是标准的说法,“我期望赋值表达式的返回值被类型转换为条件的Boolean。”即使我启用了“赋值表达式”,JSLint似乎也不同意。然后我尝试在前面添加一个!!,JSLint抱怨它“混乱使用”。所以我的问题是,格式化这个的正确方法是什么?

编辑:通过“this”,我的意思是内联赋值表达式。我的问题的目的是澄清该特定线路的可接受标准是什么,如果一个人真的想要使用它,虽然我确实认为thefourtheye的答案是最正确的写函数的方法,但它不是答案我问的问题。

2 个答案:

答案 0 :(得分:3)

根据this article,对于JSHint,ESHint和JSLint(从2013年7月开始),你可以强制它成为这样的条件:

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

对于更新版本的JSLint,如果您重视全部绿色,那么您将失去运气。

答案 1 :(得分:2)

最好不要在条件表达式中使用赋值表达式。但是,我认为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
    };
}

现在,条件表达式中没有涉及任务,我相信这看起来很干净。