我在javascript对象中有一个名为'user-agent'的属性,我希望得到它的值。我怎么在clojurescript中做到这一点?
(js/eval "a = {'user-agent': 'curl/7.22.0'}")
(js/eval "a['user-agent']") ;=> curl/7.22.0
(.-user-agent js/a) ;=> (returns nothing)
(. js/a -user-agent) ;=> (returns nothing)
这是因为在这里使用点表示法而不是括号表示法检索属性吗? https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj#L734
答案 0 :(得分:7)
使用aget
:
(aget js/a "user-agent")
点符号不起作用,因为clojurescript编译器为了支持扩展而执行某些名称调整,以便在变量名中支持?
和!
等字符。除此之外,名称munging还会将破折号更改为下划线,以便将(.-user-agent js/a)
等字段访问编译为类似a.user_agent
的内容。
只要你留在clojurescript里面,名字munging是透明的,你通常不需要知道它,除非你正在做javascript互操作。在这种情况下,您可以使用插值功能,例如aget
和aset
。