防止从 Google Closure Compiler 更改某些字符串?

Prevent to change some string from Google Closure Compiler?

有这个代码:

var a = 'Start';
var b = ' here';
return (document.querySelectorAll + "").toString().toLowerCase().indexOf(a + b) == -1;

在Google Closure Compiler之后,这段代码将是:

return (document.querySelectorAll + "").toString().toLowerCase().indexOf('Start here') == -1;

如何防止更改此字符串,因为我不需要 indexOf 'Start here' 的参数,非常重要,这将是 'a + b'? 我在这段代码上方是否有特定键可以解释 GCC 不编译此 code/string?

您可以使用 experimental @noinline annotation 其中:

Denotes a function or variable that should not be inlined by the optimizations.

要同时保留 ab,请使用:

function x() {
  /** @noinline */
  var a = 'Start';
  /** @noinline */
  var b = ' here';
  return (document.querySelectorAll + "").toString().toLowerCase().indexOf(a + b) == -1;
}

结果:

function x(){var a="Start",b=" here";return-1==(document.querySelectorAll+"").toString().toLowerCase().indexOf(a+b)};

Demo

(请注意,由于 document.querySelectorAll + "" 的计算结果已经是一个字符串,因此您无需再次对其调用 toString - 如果需要,您可以省略该部分)