¿Por qué la ordenación modifica el original en este caso?

Tuve un problema que hacía que la matriz original cambiara, lo curioso es que agregararr.join("...").split("...") parece evitar esto:

Un pequeño fondo:

my script crea y agrega cosas a unaarrayesta matriz inicializada vacía comoarr=[]las cosas se agregan pasandoarr[index] = "..."entonces quiero tener una copia de laarr pero ordenado cuando hago la clasificación, el originalarr es modificad

Aquí hay una versión simplificada de lo que está sucediendo:

var arr=[], sorted;

arr[0] = "hello";
arr[1] = "world";

//buggy, the original is sorted
//sorted = arr.sort(function(a,b){return (a.length-b.length);});

sorted = arr.join("improbableCollision").split("improbableCollision").sort(function(a,b){return (a.length-b.length);});
Por qué agregar.join("*").split("*") resuelve el problema @ ¿Qué estaba causando el problema? ¿Hay alguna forma más elegante de arreglar esto?

Para el script completo, marque esta jsFiddle

Respuestas a la pregunta(4)

Su respuesta a la pregunta