缩小时出现Javascript错误

Gri*_*... 1 javascript minify

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

这是未经授权的JS代码:

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

和缩小的代码:

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

缩小时,代码会抛出"意外标识符"错误.如果我+(a > Math.PI)离开之前拿走标志,它就可以了.

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

T.J*_*der 7

您不应该从您提供的缩小代码中获得"意外标识符"错误.如果你是,那就是你正在使用它的JavaScript引擎中的一个错误.最初发布的代码也是如此,这是:

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

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

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

...这是一个问题,因为它++是一个增量运算符(前缀[ ++a]或后缀[ a++]).而将需要一个标识符(递增的东西).在++刚刚是不是在那个位置有效(你得到确切的错误可能是由JavaScript引擎而变化).

您可以通过稍微更改它来防止代码执行此操作:

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

parens阻止了+和另一个+结合++.它们也使意图更清晰,恕我直言.


问题的第二部分,不,你不能删除它+,它将改变函数的工作方式.特别是,a > Math.PI它将是truefalse,并且在它连接到字符串之前+使其成为一个数字(1for true,0for false).如果你删除它,你会看到truefalse在字符串而不是10.