防止从 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.
要同时保留 a
和 b
,请使用:
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)};
(请注意,由于 document.querySelectorAll + ""
的计算结果已经是一个字符串,因此您无需再次对其调用 toString
- 如果需要,您可以省略该部分)
有这个代码:
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.
要同时保留 a
和 b
,请使用:
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)};
(请注意,由于 document.querySelectorAll + ""
的计算结果已经是一个字符串,因此您无需再次对其调用 toString
- 如果需要,您可以省略该部分)