Ojo con lo que me acabo de topar!
 delete no varía la longitud del array!: 
 Código PHP:
    var a=["uno","dos","tres","cuatro","cinco"];
for(var i in a)
    document.write(i+" --> "+a[i]+", ");
document.write("<br/>");
for(var i=0; i<a.length; i++)
    document.write(i+" --> "+a[i]+", ");
document.write("<br/>");
document.write("Longitud: "+a.length+"<br/><br/>");
//borramos
delete a[1];
for(var i in a)
    document.write(i+" --> "+a[i]+", ");
document.write("<br/>");
for(var i=0; i<a.length; i++)
    document.write(i+" --> "+a[i]+", ");
document.write("<br/>");
document.write("Longitud: "+a.length+"<br/>"); 
    
   Cita:  0 --> uno, 1 --> dos, 2 --> tres, 3 --> cuatro, 4 --> cinco,
0 --> uno, 1 --> dos, 2 --> tres, 3 --> cuatro, 4 --> cinco,
Longitud: 5
 
0 --> uno, 2 --> tres, 3 --> cuatro, 4 --> cinco,
0 --> uno, 1 --> undefined, 2 --> tres, 3 --> cuatro, 4 --> cinco,
Longitud: 5
    Pero for..in recorre todos los definidos y un for normal hasta donde le digamos, y cuidado si utilizamos length. 
Solo por comentarlo.