This is an edge case of clojure.string/split with limits and non-consuming assertions. ^ and $ are fully supported with the meaning of the underlying regex engine (which may be subtly different in javascript and java).
This is clearly wrong. It occurs because clojure.string/match uses the size of the match to determine where to split. Since the match is always empty, it always splits at index 0.
cljs.user=> (clojure.string/split "123" #"$" 2)
["" "123"]
However, I'm not sure why you consider Clojure's answers to be correct. I would expect this in Clojure:
user=>(clojure.string/split "123" #"^" 2)
["" "123"]