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コンパイラは、変数名などの文字をサポートするために拡張をサポートするために名前の変更を行うため、ドット表記は機能しませ?!。特に、名前の変更はダッシュをアンダースコアに変更するため、などのフィールドアクセスは。(.-user-agent js/a)のようなものにコンパイルされますa.user_agent

clojurescriptの内部にいる限り、名前の変更は透過的であり、javascriptの相互運用を行っていない限り、通常はそれを意識する必要はありません。その場合、agetやなどのインターポ機能を使用できますaset

于 2013-02-24T08:09:22.027 に答える