【发布时间】:2021-02-13 16:22:36
【问题描述】:
我继承了一个代码库,也就是“遗留代码”,我非常小心不要破坏任何东西。我在自动格式化时偶然发现了一个错误。
该函数的目的是对图表进行排序。我评论了我不明白的部分:
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”。
我不明白为什么原始代码中有两个用空格!=- -1 分隔的减号以及为什么 Intellij 将其格式化为错误。该代码似乎在原始代码中运行良好。我从未在 JavaScript 中见过 !=-。对我来说,这似乎是无效的。
请解释为什么if (aVal == -1 && bVal !=- -1) return 1; 行似乎可以正常工作,但随后会自动格式化为错误。
正确的代码应该是什么样的?
【问题讨论】:
-
不知道他们为什么这样做,但
console.log(- -1) -
这基本上是一个错字。
--1是无效代码,因为它尝试在文字 (1) 上使用前缀递减运算符 (--)。前缀递减运算符的工作是递减存储在变量或属性中的值;它写回它减少的内容。你不能写回文字。该代码应该只是-1。 -
@T.J.Crowder 感谢您的及时回复。请把它写成答案,以便我接受。
-
通过 prettier 运行它并将其格式化为:
if (aVal == -1 && bVal != -(-1)) return 1;也许编写一个带有预期输入和函数输出的测试,以确保您的更改不会破坏任何东西:) -
我们不会在 SO 上发布“这是一个错字”的答案,我们只是关闭问题。但现在我真的有兴趣了解解析的代码。
标签: javascript syntax operators legacy-code