1

我正在使用 jsMin.php https://github.com/rgrove/jsmin-php/在生产中缩小 Javascript

这是未缩小的 JS 代码:

  function arc(r, p, a) {
    return "A" + r + "," + r + " 0 " + +(a > Math.PI) + ",1 " + p;
  }

和缩小的代码:

function arc(r,p,a){return"A"+r+","+r+" 0 "++(a>Math.PI)+",1 "+p;}

缩小后,代码会引发“意外标识符”错误。如果我在离开+之前把标志(a > Math.PI)拿走,它就可以了。

我想我的问题有两个部分 - 为什么这是一个错误,当它全部在一条线上时,我是否通过删除第二个 + 符号来改变它的工作方式?没有它似乎可以正常工作,但我没有编写代码,所以我不完全确定它在做什么。

4

2 回答 2

7

您不应该从您提供的缩小代码中收到“意外标识符”错误。如果你是,那是你使用它的 JavaScript 引擎中的一个错误。您最初发布的代码也是如此,即:

function arc(r,p,a){return"A"+r+","+r+" 0 "+ +(a>Math.PI)+",1 "+p;}
// You used to have a space here -----------^

但是使用您发布的更新代码:

function arc(r,p,a){return"A"+r+","+r+" 0 "++(a>Math.PI)+",1 "+p;}
// No space here anymore -------------------^

...这是一个问题,因为它++是一个增量运算符(前缀 [ ++a] 或后缀 [ a++])。这需要一个标识符(要增加的东西)。just 在该++位置无效(您得到的确切错误可能因 JavaScript 引擎而异)。

您可以通过稍微更改代码来保护代码免受缩小器的影响:

function arc(r, p, a) {
  return "A" + r + "," + r + " 0 " + (+(a > Math.PI)) + ",1 " + p;
}

括号防止 the+和 other+合并到++. 恕我直言,它们还使意图更加清晰。


关于你问题的第二部分,不,你不能删除它+,它会改变函数的工作方式。特别是,a > Math.PIwill be trueorfalse和 the在连接到字符串之前将其设为+数字​​(1for true0for )。false如果删除它,您将在字符串中看到trueorfalse而不是1or 0

于 2013-05-10T14:29:14.903 回答
1

我想问题并不真的存在,但就在之前,即使它看起来像在这里,因为无效的令牌是function. 尝试添加;

;function arc(r,p,a){return"A"+r+","+r+" 0 "+ +(a>Math.PI)+",1 "+p;};

不过,我对缩小器确实让;之前感到有点惊讶}。没用的。

于 2013-05-10T14:31:36.870 回答