       ; non-string key. game over.
       (obj-map->hash-map coll k v)))
   (-contains-key? [coll k]
-    (obj-map-contains-key? k strobj))
+    (if (and ^boolean (goog/isString k)
+             (coercive-not= (scan-array 1 k keys) nil))
+      true
+      false))
 
   IMap
   (-dissoc [coll k]

  ILookup
  (-lookup [coll k] (-lookup coll k nil))
  (-lookup [coll k not-found]
    (obj-map-contains-key? k strobj (aget strobj k) not-found))

  IAssociative
  (-assoc [coll k v]

; key already exists in strobj, the old value is overwritten. If a
; non-string key is assoc'ed, return a HashMap object instead.

(defn- obj-map-compare-keys [a b]
  (let [a (hash a)
        b (hash b)]
