You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ClojureScript中正确解构JavaScript对象?

解决ClojureScript解构JavaScript对象的问题

你遇到的这个问题很常见:ClojureScript的:keys解构默认是针对Clojure风格的map(关键字键),但你用#js{:a 10, :b 20}生成的是JavaScript对象——它的属性键是字符串类型的"a"、"b",而非Clojure的关键字:a、:b,所以直接用:keys根本匹配不到,自然会返回nil。

下面给你两种实用的解决办法:

方法1:用:strs专门解构字符串键的JS对象

ClojureScript提供了:strs选项,专门用来处理键为字符串的对象(包括JS对象),语法和:keys类似,只需传入字符串形式的键名即可:

(let [{:strs [a b]} #js{:a 10, :b 20}]
  (print a) ;=> 10
  (print b)) ;=> 20

方法2:用:keywordize-keys转成Clojure map再解构

如果你更习惯用关键字解构,可以给解构添加:keywordize-keys true选项,它会自动把JS对象的字符串属性名转换成Clojure关键字,这样:keys就能正常匹配了:

(let [{:keys [a b] :keywordize-keys true} #js{:a 10, :b 20}]
  (print a) ;=> 10
  (print b)) ;=> 20

额外补充

顺便提一句:当你用#js{:a 10, :b 20}创建JS对象时,ClojureScript会自动把关键字:a、:b转换成字符串"a"、"b"作为对象的属性名——这就是为什么直接用:keys匹配失败的核心原因。

内容的提问来源于stack exchange,提问作者Didier A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:06:02