我在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的答案是最正确的写函数的方法,但它不是答案我问的问题。
答案 0 :(得分:3)
根据this article,对于JSHint,ESHint和JSLint(从2013年7月开始),你可以强制它成为这样的条件:
do {
// ...
} while ((currentElement = currentElement.offsetParent) !== null);
对于更新版本的JSLint,如果您重视全部绿色,那么您将失去运气。
答案 1 :(得分:2)
最好不要在条件表达式中使用赋值表达式。但是,我认为while
比do...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
};
}
现在,条件表达式中没有涉及任务,我相信这看起来很干净。