评论区由:favila 提供
bq.是否有任何证据表明高频率使用str确实有问题?
打开 CLJS-847 的 Kevin Neaton 正在使用一个仅在生产环境中针对高阶情况修复的补丁。他说这个补丁为他们解决了问题。由于它要么使用了 ''+x 已经(已应用 CLJS-801)要么使用了 {{[x].join('')}}(尚未与 Safari 6.0.5 进行测试,但可能有效),所以他不受 str 宏情况的影響。
因此,如果我们使用 str 宏的 ''+x 存在问题,那么在 CLJS-847 应用的情况下,我们当然会有 ''+x 与字符串函数之间的问题。
我还没有拉下 master,但是这里有一个我敢打赌将在 CLJS-847 补丁下失败的测试用例
(def tricky-obj #js {"toString" (fn [] "hello") "valueOf" (fn [] 42)}) (assert (= (apply str tricky-obj) "hello")) ;; 将得到 "42"