将JavaScript字符串转换为JavaScript字面量。

5
在Chrome中,当你在控制台上右键单击一个字符串时,你会看到"复制为JavaScript文本"选项。这就是我现在想要在JavaScript中实现的功能。
例如,假设我有以下文本内容:
console.log('hoge');

我的问题是,我如何从上面的内容中获取下面的内容?
"console.log('hoge');"

我需要这样做,因为我有一个由webpack生成的大量JavaScript代码,出于某种原因,我需要在另一个环境中eval()这个脚本,所以我想将JavaScript文本直接拷贝到"eval()"内部。(你可以建议使用json.stringify/parse而不是字面值来交换数据,但目前我更喜欢字面值的方式)
那么这是否可行呢?谢谢。

Function 原型有一个 toString() 方法。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/toString - ImInYourCode
2
只需用两个反引号包裹生成的内容 export const content = \你的Webpack生成的内容``。 - Cesare Polonara
2个回答

3

在注意到使用eval存在安全漏洞的建议后(请参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval),您可以通过将整个字面代码包含在反引号内,并使用生成的字符串作为eval参数来实现您想要的效果。反引号引用的字符串可以包括换行符,因此您应该能够将整个代码块传递到单个集合内。

工作示例:

console.log('hoge');
console.log('another hoge');


eval(`console.log('hoge');
console.log('another hoge')`);


如果JS代码中存在反引号,您应该对其进行转义,否则将会出现SyntaxError错误(请参见我的答案)。 - user14967413

0

您可以轻松地使用反引号将Javascript括起来,以获取一个模板字面量

eval(`console.log('hoge')`)

但是你还应该转义JavaScript代码中的反引号,以处理这样的情况:

eval(`console.log(`hoge`)`)  // SyntaxError

作为解决方案,您可以使用这个bash one-liner:

 sed 's/`/\\`/g' | xargs -0 printf 'eval(`%s`)'
  1. 按下 Enter 键来调用命令。
  2. 粘贴您想要转义的 Javascript 代码并再次按下 Enter 键。
  3. 按下 Ctrl+D 键完成输入。
  4. 您将获得有效的带有转义模板字面量的 eval() 函数调用输出。

您可以将这个单行命令分配给别名以便于使用:

 alias js_eval_literal="sed '"'s/`/\\`/g'"' | xargs -0 printf '"'eval(`%s`)'"'"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接