代码之家  ›  专栏  ›  技术社区  ›  EliteRaceElephant

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

  •  0
  • EliteRaceElephant  · 技术社区  · 3 年前

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

    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 在原始代码中以及为什么Intellij将其格式化为错误。代码在原始代码中似乎运行良好。我从没见过 !=-

    请解释为什么要排队 if (aVal == -1 && bVal !=- -1) return 1; 似乎工作正常,但随后自动格式化为错误。

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

    1 回复  |  直到 3 年前
        1
  •  1
  •   T.J. Crowder    3 年前

    if (aVal == -1 && bVal !=- -1) return 1; 似乎工作正常,但随后自动格式化为错误。

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

    感谢 Mellet mentioned 通过一个不同的格式化程序运行它,我午后昏昏欲睡的大脑理解了最初解析的原因:它是一元数 -

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

    但这可能是一个拼写错误,支票应该是对的 -1 ,不是 1 .