Você está vendo isso porque o índice é uma string; o 15º elemento que você adiciona tem o índice '15', não o número 15; e com comparação de string '9' é maior que '15'. Então,
last
está mostrando a string mais alta valor, que ainda é '9'. Como @Koen diz, isso é o comportamento documentado
:onde 'mais alto' e 'mais baixo' são baseados em comparação de string .
Isso não tem nada a ver com quantos muitos elementos que existem (que é claramente 15); é apenas o comportamento do valor do índice que é afetado.
Se você tiver mais elementos, verá o
last
o valor muda quando você passa de 89, pois '90' é um valor maior que '9' e '91' é maior que '90'; mas quando você passa de 99, fica lá até chegar a 900. E assim por diante. db<>fiddle