JavaScript 语法建议:自动格式化时前缀表达式中的左侧无效
JavaScript syntax advice: Invalid left hand side in prefix expression when auto formatting
我继承了一个代码库,也就是“遗留代码”,我非常小心不要破坏任何东西。我在自动格式化时偶然发现错误。
函数的目的是对图表进行排序。我评论了我不明白的部分:
function sortChartBy(field,dir=1) {
if(g_sortMethod != field){
g_sortDir = 1;
}
g_sortMethod = field;
g_sortDir = g_sortDir * -1 * dir;
var ranks = g_chart["ranks"];
var sortMethod = g_sortMethod;
var sortDir = g_sortDir;
var sortFunc = undefined;
if(field == "release_date"){
sortFunc = function(a,b){
var aVal = a[sortMethod];
var bVal = b[sortMethod];
if(aVal == "1970-01-01") aVal = "9999--99-99";
if(bVal == "1970-01-01") bVal = "9999-99-99";
if(aVal < bVal) return -1 * sortDir;
if(aVal > bVal) return 1 * sortDir;
return 0;
};
}else{
sortFunc = function(a,b){
var aVal = a[sortMethod];
var bVal = b[sortMethod];
// ###### QUESTION HERE ########################################
if (aVal == -1 && bVal !=- -1) return 1;
// 'bVal !=- -1' What does that mean? Why '-' directly after '!='
if (aVal != -1 && bVal == -1) return -1;
if (aVal < bVal) return -1 * sortDir;
if (aVal > bVal) return 1 * sortDir;
return 0;
};
}
ranks.sort(sortFunc);
renderChart();
}
我将 IntelliJ 用作 IDE。当我使用自动格式时,'!=' 后的 '-' 减号字符向右移动一个字符,显示该行为
if (aVal == -1 && bVal != --1) return 1; // Invalid left hand side in prefix expression
现在 Intellij 显示一个错误,指出 Invalid left hand side in prefix expression
并用红色错误下划线标记“1”。
我不明白为什么在原始代码中有两个用 space !=- -1
分隔的缺点以及为什么 Intellij 将其格式化为错误。该代码似乎在原始代码中运行良好。我在JavaScript中从未见过!=-
。对我来说这似乎无效。
请解释为什么行 if (aVal == -1 && bVal !=- -1) return 1;
似乎工作正常,但随后自动格式化为错误。
正确的代码应该是什么样的?
Please explain why the line if (aVal == -1 && bVal !=- -1) return 1;
seems to work fine, but then gets autoformatted into an error.
格式化程序确实破坏了该代码,但我怀疑它已经被破坏了。 :-) 但是格式化程序违反了一个基本原则:它改变了代码的含义(在这种情况下,从有效但可能错误的语法到无效语法 :-D )。
多亏了 运行 它通过不同的格式化程序,我下午昏昏欲睡的大脑明白了为什么原来的解析:它是一元 -
运算符被使用了两次。
所以代码是 != - -1
即 != -(-1)
即 != 1
.
但这可能是一个拼写错误,支票可能应该针对 -1
,而不是 1
。
我继承了一个代码库,也就是“遗留代码”,我非常小心不要破坏任何东西。我在自动格式化时偶然发现错误。
函数的目的是对图表进行排序。我评论了我不明白的部分:
function sortChartBy(field,dir=1) {
if(g_sortMethod != field){
g_sortDir = 1;
}
g_sortMethod = field;
g_sortDir = g_sortDir * -1 * dir;
var ranks = g_chart["ranks"];
var sortMethod = g_sortMethod;
var sortDir = g_sortDir;
var sortFunc = undefined;
if(field == "release_date"){
sortFunc = function(a,b){
var aVal = a[sortMethod];
var bVal = b[sortMethod];
if(aVal == "1970-01-01") aVal = "9999--99-99";
if(bVal == "1970-01-01") bVal = "9999-99-99";
if(aVal < bVal) return -1 * sortDir;
if(aVal > bVal) return 1 * sortDir;
return 0;
};
}else{
sortFunc = function(a,b){
var aVal = a[sortMethod];
var bVal = b[sortMethod];
// ###### QUESTION HERE ########################################
if (aVal == -1 && bVal !=- -1) return 1;
// 'bVal !=- -1' What does that mean? Why '-' directly after '!='
if (aVal != -1 && bVal == -1) return -1;
if (aVal < bVal) return -1 * sortDir;
if (aVal > bVal) return 1 * sortDir;
return 0;
};
}
ranks.sort(sortFunc);
renderChart();
}
我将 IntelliJ 用作 IDE。当我使用自动格式时,'!=' 后的 '-' 减号字符向右移动一个字符,显示该行为
if (aVal == -1 && bVal != --1) return 1; // Invalid left hand side in prefix expression
现在 Intellij 显示一个错误,指出 Invalid left hand side in prefix expression
并用红色错误下划线标记“1”。
我不明白为什么在原始代码中有两个用 space !=- -1
分隔的缺点以及为什么 Intellij 将其格式化为错误。该代码似乎在原始代码中运行良好。我在JavaScript中从未见过!=-
。对我来说这似乎无效。
请解释为什么行 if (aVal == -1 && bVal !=- -1) return 1;
似乎工作正常,但随后自动格式化为错误。
正确的代码应该是什么样的?
Please explain why the line
if (aVal == -1 && bVal !=- -1) return 1;
seems to work fine, but then gets autoformatted into an error.
格式化程序确实破坏了该代码,但我怀疑它已经被破坏了。 :-) 但是格式化程序违反了一个基本原则:它改变了代码的含义(在这种情况下,从有效但可能错误的语法到无效语法 :-D )。
多亏了 -
运算符被使用了两次。
所以代码是 != - -1
即 != -(-1)
即 != 1
.
但这可能是一个拼写错误,支票可能应该针对 -1
,而不是 1
。