如何在clojurescript中使用破折号获取属性?

时间:2013-02-24 06:51:18

标签: clojure clojurescript

我在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

1 个答案:

答案 0 :(得分:7)

使用aget

(aget js/a "user-agent")

点符号不起作用,因为clojurescript编译器为了支持扩展而执行某些名称调整,以便在变量名中支持?!等字符。除此之外,名称munging还会将破折号更改为下划线,以便将(.-user-agent js/a)等字段访问编译为类似a.user_agent的内容。

只要你留在clojurescript里面,名字munging是透明的,你通常不需要知道它,除非你正在做javascript互操作。在这种情况下,您可以使用插值功能,例如agetaset