分享您的想法,请参见2024年Clojure状态调查!

欢迎!请参阅关于页面,了解更多有关此操作的信息。

0
ClojureScript

步骤

(def foo (let [bar "baz"]
           (reify Object)))
(.stringify js/JSON (clj->js foo))

或者一行代码

clj -Srepro -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version
"1.10.520"}}}' -m cljs.main -re node -e '(def foo (let [bar "baz"]
(reify Object))) (.stringify js/JSON (clj->js foo))'

实际

打印出了bar变量值,这令人惊讶,如果错误地暴露了敏感数据,可能会很危险

"{\"bar\":\"baz\",\"meta529\":{\"meta\":null,\"cnt\":0,\"arr\":[],\"__hash\":-15128758,\"cljs$lang$protocol_mask$partition0$\":16647951,\"cljs$lang$protocol_mask$partition1$\":139268},\"cljs$lang$protocol_mask$partition0$\":393216,\"cljs$lang$protocol_mask$partition1$\":0}"

预期

输出中不包含bar

1 个答案

0

被选中
 
最佳答案

您需要实现toJSON方法
`
(let [bar "baz"]
(reify Object

(toJSON [this]
   (js/JSON.stringify #js{:bar bar})))))

`

打印的结构只是实现细节。

...