Javascript 如何使用eval()将一个对象指定给另一个对象
免责声明:我知道你不应该使用Javascript 如何使用eval()将一个对象指定给另一个对象,javascript,eval,Javascript,Eval,免责声明:我知道你不应该使用eval(),但如果我有其他选择的话,我不会这么做。这一点,你必须相信 为什么下面的代码会抛出一个错误,如何生成一个等价的表达式 let r=“.b.b=a.b.b” 设l={b:{b:5} 设a={b:{b:0} l、 toString() 警报(eval(l+r))导致错误的一个原因是l.toString()调用正在返回字符串“[Object Object]” 尝试改用l=JSON.stringify(l) 尽管如此,为了使代码段正常工作,您需要完全省略字符串化
eval()
,但如果我有其他选择的话,我不会这么做。这一点,你必须相信
为什么下面的代码会抛出一个错误,如何生成一个等价的表达式
let r=“.b.b=a.b.b”
设l={b:{b:5}
设a={b:{b:0}
l、 toString()
警报(eval(l+r))
导致错误的一个原因是l.toString()
调用正在返回字符串“[Object Object]”
尝试改用l=JSON.stringify(l)
尽管如此,为了使代码段正常工作,您需要完全省略字符串化l
。而是将l
引用为字符串“l”
,以使eval按预期工作
let r=“.b.b=a.b.b”
设l={b:{b:5}
设a={b:{b:0}
log(eval(“l”+r))
它会抛出什么错误?这可能与缺少的有关代码>?“你必须信任这个”-不,我不信任。根据我的经验,在几乎所有有人说“我需要评估”的情况下,结果证明这是一个XY问题,最好不用它来解决。你需要它的确切场景是什么?即使你不得不使用eval
,我也不清楚这段代码试图实现什么。您的预期输出是什么?eval存在并且完全受语言支持,因此不要被保姆愚弄:您完全可以使用它。我仍然不明白为什么家长。孩子[otherobjchild]=otherParent。孩子[otherobjchild]
需要eval
@EricMORAND MDN甚至有一个很大的章节介绍。我不相信“永远”是有道理的;但它几乎从来都不是最好的选择。eval('l.b.b=a.b.b')
如何比l.b.b=a.b.b
更好?老实说,我更喜欢后者,但他的问题是如何让这个eval代码工作。也许他有一个独特的用例?@AndrewSteinheiser几乎所有选择使用eval
的人都声称自己有一个独特的用例,但几乎所有时候都不是这样。事实上,我所看到的eval
的合法用法大多是向那些试图找到解决方案而没有提及eval
的人建议的。我理解你通常不应该使用eval()
,大多数情况下没有它是可以解决的,但是,这不是不可能的。不久前我就有了它的用例。我们希望能够输入小的javascript代码片段(例如,if(x>2){return 5}else{return x*2}
),以便对每个项目进行动态、唯一的计算。@vlaz,您如何解释javascript代码,就像预编译的模板一样,而无需评估?我还有另一个观点:几乎所有选择使用eval声明的人都有一个独特的案例,几乎所有的时候都是这样。