unsorted = [2,4,88,5,6,5,5,8888888] unsorted = unsorted.sort(function(a,b){ if (a.length == b.length) { if (a < b) { return -1; } else if (a > b) { return 1; } else { return 0; } } else if (a.length < b.length) { return -1; } else { return 1; } }); console.log(unsorted);Los números no tienen una propiedad de length , por lo que 1.length no está undefined . Dado que a.length y b.length no están definidos, a.length == b.length devuelve verdadero.
Si realmente desea comparar la longitud de los dígitos de un número, primero conviértalo en una cadena: a.toString().length
var a=1; var b=10; console.log("a.length: " + a.length); console.log("b.length: " + b.length); console.log(a.length == b.length); console.log("a.toString().length: " + a.toString().length); console.log("b.toString().length: " + b.toString().length); console.log(a.toString().length == b.toString().length);