是否有一种简单的方法可以将对象文字作为字符串解析为新对象?
我正在寻找一个像下面这样的字符串:
'{ name: "A", list: [] }'
放入类似的对象
{ name: 'A', list: [] }
注意:
我不是在寻找JSON.parse()
,因为它接受json字符串而不是对象文字字符串。我希望eval
可以工作,但不幸的是没有。
答案 0 :(得分:2)
eval
确实可以工作,但有一点调整:问题是独立行
{ name: 'A', list: [] }
被解析为解释器,作为块的开始,而不是对象文字的开始。因此,就像隐式返回对象的箭头函数一样,需要在对象周围加上括号:
arr.map(item => ({ item }))
您需要在输入字符串周围加上括号,以便将其中的内容(即以{
开头的对象)正确地解析为表达式:
const input = '{ name: "A", list: [] }';
const obj = eval('(' + input + ')');
console.log(obj);
当然,与涉及eval
的所有情况一样,您应该非常确定首先确定输入是值得信赖的。
答案 1 :(得分:1)
虽然我永远不会执行此IRL,但您可以尝试以下操作:
var myObjLiteralString = '{ name: "A", list: [] }';
var myObj;
eval('myObj = ' + myObjLiteralString);
console.log(myObj);