Javascript 正在分析包含函数到对象的字符串
我想分析这个字符串:Javascript 正在分析包含函数到对象的字符串,javascript,Javascript,我想分析这个字符串: var str1 = `{ sayHello: function() { console.log('hello'); }, content: "I'm a content", }`; 并将其转换为: var str2 = { sayHello: function() { console.log('hello'); }, content: "I'm a content", }; 我已经测试了JSON.parse(str1),但它不起
var str1 = `{
sayHello: function() {
console.log('hello');
},
content: "I'm a content",
}`;
并将其转换为:
var str2 = {
sayHello: function() {
console.log('hello');
},
content: "I'm a content",
};
我已经测试了JSON.parse(str1),但它不起作用,eval(str1)也是一样。有什么想法吗?你可以使用
eval
var str1=`var obj={
sayHello:function(){
log('hello');
},
内容:“我是一个内容”,
}`;
eval(str1);
obj.sayHello()代码>您的字符串不是有效的javascript,否则它将与eval一起工作。问题是第一个{
被解释为代码块,而不是对象的开始
这一点可以用eval来解释:
`({
sayHello: function() {
console.log('hello');
},
content: "I'm a content",
})`;
或者您可以直接尝试解析整个字符串,包括声明。但是,它在严格模式下无法工作
`var str1 = {
sayHello: function() {
console.log('hello');
},
content: "I'm a content",
}`
正如评论所建议的那样,我非常确定有更好的方法来完成您正在尝试的工作,您不必评估随机js代码。JSON.parse(str1)
不起作用,因为这不是json。eval
应该起作用,但由于这是在不同的范围内,你不会从外部看到str1
。最好的解决方案几乎可以肯定是“重新设计系统,这样你就不会首先传递字符串化的函数”.Quentin是对的。如果你必须通过json将函数作为字符串传递,那么你绝对是在做不应该做的事情。应该避免使用Eval。这会使调试变得困难,使代码更容易受到攻击,而且理论上会更慢,因为Eval代码不会被缓存。这个想法是要用一个字符串替换一个js对象我是数据库,所以我别无选择