【问题标题】:Prevent to change some string from Google Closure Compiler?防止从 Google Closure Compiler 更改某些字符串?
【发布时间】:2020-01-26 19:06:59
【问题描述】:

有这个代码:

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 不编译此代码/字符串?

【问题讨论】:

  • 如果你希望 indexOf 的参数是字符串a + b 那么为什么不在indexOf 中使用'a + b' 而不是a + b 呢?
  • 因为我需要某些系统不解析我的代码。他们用正则表达式阻止了我的代码,我什么也做不了
  • 我需要将“从这里开始”更改为“开始”+“这里”。但是编译器返回给我以前的值@NickParsons

标签: javascript google-closure-compiler


【解决方案1】:

您可以使用experimental @noinline annotation

表示不应被优化内联的函数或变量。

要同时保留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 - 如果您愿意,可以不使用该部分)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-21
    • 2014-10-15
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多