Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JSON.stringify在eval上下文中转义字符串_Javascript_Json_String_Escaping_Eval - Fatal编程技术网

Javascript 使用JSON.stringify在eval上下文中转义字符串

Javascript 使用JSON.stringify在eval上下文中转义字符串,javascript,json,string,escaping,eval,Javascript,Json,String,Escaping,Eval,首先:我知道有很多关于逃跑的问题,但到目前为止我还没有找到一个普遍有效的答案。 假设我有一个简单的玩具功能用于演示: function f(somePOJO) { var s = eval("'" + JSON.stringify(somePOJO) + "';"); // for demonstration only return JSON.parse(s); } const clone = f({a: 1, b: "c"})

首先:我知道有很多关于逃跑的问题,但到目前为止我还没有找到一个普遍有效的答案。 假设我有一个简单的玩具功能用于演示:

function f(somePOJO) {
  var s = eval("'" + JSON.stringify(somePOJO) + "';"); // for demonstration only
  return JSON.parse(s);
}
const clone = f({a: 1, b: "c"});
给定一个对象文本,例如
{a:1,b:“c”}
(一个POJO),
f
应该返回它的“克隆”。(请注意,我并不是真的将这种方法用于克隆或类似的方法,我知道
eval
是邪恶的,而且这里甚至不需要它,它只是为了演示逃避问题!)

这很好,但前提是POJO值不包含
。现在,我当然可以使用类似于
JSON.stringify(somePOJO.replace(/'/g,“\\'”)
的东西来转义JSON。如果POJO值包含
,则此操作有效,但如果POJO值包含
\\\'
,则不起作用。这就形成了一个逃跑的螺旋


有什么解决办法吗?

通过
eval
函数、JavaScript编译器在某些情况下或通过
JSON.parse
函数求值来保存JSON字符串的转义函数实际上是
JSON.stringify
。这个
JSON
方法将愉快地字符串化字符串值,而不仅仅是对象数据类型

函数f(somePOJO){
var s=eval(JSON.stringify(JSON.stringify(somePOJO));
返回JSON.parse;
}
const obj={a:1,b:c,d:back\\,forward/“}
常数克隆=f(obj);
控制台日志(obj);

console.log(克隆)
因为这是一个理论问题:
stringify
提供了一个可选的第二个函数参数,您可以使用它来清理您的值。