bma*_*ddy 5 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)
Run Code Online (Sandbox Code Playgroud)
这是因为在这里使用点表示法而不是括号表示法检索属性吗?https://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj#L734
用途aget
:
(aget js/a "user-agent")
Run Code Online (Sandbox Code Playgroud)
点符号不起作用,因为clojurescript编译器做了一些名称以支持,以支持字符,如扩展改写(munging)?
和!
变量名.除此之外,名称munging还会将破折号更改为下划线,以便将字段访问权限(.-user-agent js/a)
编译成类似的内容a.user_agent
.
只要你留在clojurescript里面,名字munging是透明的,你通常不需要知道它,除非你正在做javascript互操作.在这种情况下,您可以使用插值功能,如aget
和aset
.