JavaScript语法建议:自动格式化时前缀表达式的左侧无效

JavaScript语法建议:自动格式化时前缀表达式的左侧无效,javascript,syntax,operators,legacy-code,Javascript,Syntax,Operators,Legacy Code,我继承了一个代码库,也就是“遗留代码”,我非常小心不要破坏任何东西。我在自动格式化时偶然发现一个错误 该函数的目的是对图表进行排序。我评论了我不理解的部分: function sortChartBy(field,dir=1) { if(g_sortMethod != field){ g_sortDir = 1; } g_sortMethod = field; g_sortDir = g_sortDir * -1 * dir; va

我继承了一个代码库,也就是“遗留代码”,我非常小心不要破坏任何东西。我在自动格式化时偶然发现一个错误

该函数的目的是对图表进行排序。我评论了我不理解的部分:

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显示一个错误,说明前缀表达式中的
左侧无效,并用红色错误下划线标记“1”

我不明白为什么有两个负号用空格隔开
!=--1
在原始代码中,以及Intellij将其格式化为错误的原因。该代码在原始代码中似乎运行良好。我从未见过
=-在JavaScript中。对我来说,这似乎是无效的

请解释为什么行
if(aVal==-1&&bVal!=-1)返回1似乎工作正常,但随后自动格式化为错误

正确的代码应该是什么样子

请解释为什么行
if(aVal==-1&&bVal!=-1)返回1似乎工作正常,但随后自动格式化为错误

格式化程序确实正在破坏该代码,但我怀疑它已经被破坏了。:-)但是格式化程序违反了一个基本原则:它改变了代码的含义(在本例中,从有效但可能错误的语法到无效语法:-D)

多亏通过一个不同的格式化程序运行它,我午后昏昏欲睡的大脑理解了原始解析的原因:一元
-
运算符被使用了两次

所以代码是
!=--1
哪个是
!=-(-1)
哪个是
!=1


但这可能是一个输入错误,检查可能是针对
-1
,而不是
1

不确定他们为什么这样做,但
console.log(--1)
这基本上是一个输入错误
--1
是无效代码,因为它试图对文本(
1
)使用前缀减量运算符(
--
)。前缀递减运算符的工作是递减存储在变量或属性中的值;它写回它递减的值。你不能写回文字。代码应该是
-1
@T.J.Crowder谢谢您的及时回复。请把它写成一个答案,这样我就可以接受了。在prettier中运行它并将其格式化为:
if(aVal==-1&&bVal!=-1))返回1也许用函数的预期输入和输出编写一个测试,以确保您的更改不会破坏任何内容:)我们不会发布“it's a typo”答案,因此,我们只需关闭问题。但是现在我真的很想理解解析代码。谢谢你的解释。我测试了
-1
1
。在这两种情况下,排序都正确完成。我使用
bVal!=1现在。我用原始代码添加了一条注释,以防万一。@EliteRaceElephant-排序回调代码比它需要的复杂得多。如果
aVal
bVal
是数字,则回调可以是
return(a[sortMethod]-b[sortMethod])*sortDir
假设对于升序排序,
sortDir
1
,对于降序排序,
-1
。类似地,前面比较日期字符串的回调可以将
return
s的最后三行替换为:
return aVal.localeCompare(bVal)*sortDir
if (aVal == -1 && bVal != --1) return 1; // Invalid left hand side in prefix expression