To keep 0, but still filter out falsy values, try this:
[0, 5, undefined, 4, null, 7, NaN, -4].sort().filter(function(item){
return item || item === 0;
});
Edit: Refactored with ES2015 arrow function
[0, 5, undefined, 4, null, 7, NaN, -4].sort().filter(item => item || item === 0);