6

我在想要获取其值的 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

4

1 回答 1

8

使用aget

(aget js/a "user-agent")

点表示法不起作用,因为 clojurescript 编译器会进行一些名称修改以支持扩展,以便支持变量名称等?字符!。除其他外,名称 munging 还将破折号更改为下划线,因此诸如字段访问(.-user-agent js/a)被编译为类似a.user_agent.

只要您留在 clojurescript 中,名称 munging 是透明的,您通常不需要注意它,除非您正在执行 javascript 互操作。在这种情况下,您可以使用 interpo 功能,例如agetaset

于 2013-02-24T08:09:22.027 回答