碰到一个JavaScript的eval问题,大概有这么一段代码
function buildRequestJson(key, value) { return JSON.stringify(eval('({"'+ key +'": "'+ value +'"})')); }
上面这段代码如果传入一个带字符串的key或者value时,就会报错
let key = "this is key"; let value = '{"name":"abc"}'; buildRequestJson(key, value); // 报错
上面的value因为有内容中包含双引号,在执行eval时,与eval中的双引号形成了冲突,所以会报错;
通常的做法是双引号和单引号混合并进行转移,虽然这样也能处理,但是总感觉很牵强。
其实可以另外一个做法,就是向一个空的json中放入key-value即可,这样就不用管key或者value是否有单双引号了
比如下面这样
function buildRequestJson(key, value) { let data = {}; // 创建一个新的空json对象 data[key] = value; // 然后将key-value设置进去即可 return JSON.stringify(data); }
再次使用上面的那些数据,就不用担心单双引号的问题了,也不用去做转义。
原文地址:https://www.cnblogs.com/-beyond/p/14552832.html