【发布时间】:2011-09-17 15:31:57
【问题描述】:
给定一个 JavaScript 对象,
var obj = { a: { b: '1', c: '2' } }
还有一个字符串
"a.b"
如何将字符串转换为点表示法以便我可以去
var val = obj.a.b
如果字符串只是'a',我可以使用obj[a]。但这更复杂。我想有一些直截了当的方法,但目前我没有想到。
【问题讨论】:
-
@Andrey
eval是邪恶的;不要使用它 -
仅供参考:以下是我刚刚进行的一些有趣的速度测试:jsperf.com/dereference-object-property-path-from-string
-
如果 perf 是一个严肃的考虑因素,并且您经常重复使用相同的路径(例如,在数组过滤器函数中),请使用下面我的回答中描述的 Function 构造函数。当同一路径被使用数千次时,Function 方法的速度可以比每次取消引用时评估或拆分和减少路径的速度快 10 倍以上。
-
在某些情况下,您必须使用 eval 或 new Function(),尤其是当您想从模板创建函数时,就像将 JSP 页面转换为 JAVA 一样,不是一种更有效的模板制作方法,这个 eval 是邪恶的教条,这只是一个教条,什么是邪恶的是评估你没有自己创建的脚本,当然在这种精确的情况下没有理由使用评估
标签: javascript