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
提供了一个可选的第二个函数参数,您可以使用它来清理您的值。