不要逃避双引号

时间:2016-12-07 14:58:18

标签: javascript json quotes double-quotes uglifyjs

我发现uglifyJS忽略单引号字符串中的转义双引号。

'test \" + foo + \"'

结果

'test " + foo + "'

这只是一种错误的行为。

我想要缩小.js,这些数据必须进入JSON。但是JSON API必须是这样的。

{
    string: "test \" + foo + \""
}

不是

{
    string: "test " + foo + ""
}

有没有办法配置uglifyJS它不要忽略\"

目前我将我的javascript更新并用占位符替换所有\"。在此之后,我使用所有占位符替换字符串以使其正常工作。 但后来我的测试不起作用。

编辑:我的Javascript的uglify版本必须有效JSON且有效Javascript

编辑:根据要求,是实例的一部分。此代码必须被uglified,然后放入JSON。

var privacylink = '#privacyButtonURL#';
link = '<a href=\"' + privacylink + '\" target=\"_blank\" style=\"color:#4398b5; text-decoration:underline;\">hear</a>';

uglify版本将是

var a="#privacyButtonURL#", b='<a href="'+a+'" target="_blank" style="color:#4398b5; text-decoration:underline;">hear</a>'

这不起作用。

JSON.stringify('var a="#privacyButtonURL#", b='<a href="'+a+'" target="_blank" style="color:#4398b5; text-decoration:underline;">hear</a>'')

2 个答案:

答案 0 :(得分:1)

你想:

'test \\" + foo + \\"'

参考: http://es5.github.io/#x7.8.4

答案 1 :(得分:0)

报价格式为github issue

上面链接中给出的解决方案是告诉uglify保留原始报价格式:

$ echo "console.log(\"foo\",'bar');" | uglifyjs --quotes=1
console.log('foo','bar');

$ echo "console.log(\"foo\",'bar');" | uglifyjs --quotes=2
console.log("foo","bar");

$ echo "console.log(\"foo\",'bar');" | uglifyjs --quotes=3
console.log("foo",'bar');

或者使用gulp,将以下参数作为参数提供给uglify.minify()函数:

{ output: { quote_style: 3 } }

对于您的具体问题,因为我不确定它是否会保留不必要的转义字符(在javascript中),解决方案是:

  • 通过将所有内容切换为双引号并在必要时将其转义,从javascript中删除所有单引号
  • 使用上述选项
  • 来修改代码
  • 执行{string: JSON.stringify(code)}

如果您的javascript代码由于某种原因必须包含单引号,则可以在&#34;&quot;的javascript代码中替换生成的html中的双引号。

请注意,我觉得var a = 'abc \" def';之类的内容首先是有效的javascript。

另一件需要考虑的事情是你如何包含文件(它没有提到),也许还有一种更好的方法可以直接将文件加载到一个字符串中,然后你可以在其中调用{{1 }}

修改

如果你使用最新的javascript引擎,你也可以在代码中使用backquotes(`)并用它们替换双引号或单引号。

,如果您的javascript代码中没有JSON.stringify()或反引号,您只需执行以下操作:

$