1) Делай действие когда анимация реально закончится а не через 400 миллисекунд (но это фиг с ним) 2) Делегируй обработку событий на общего родителя (это самое важное)
.toString() это метод обычного объекта или объекта-обёртки примитива. В зависимости от объекта он может работать по разному и даже может быть переопределён. String() выполняет гору проверок и в зависимости от типа аргумента, наличия Symbol.toPrimitive он в конце концов может выполнить метод .toString(). В целом, в большинстве случаев если у объекта есть .toString() он вернёт то же самое что String(). Нюансы можешь посмотреть в спеке.