_.isNumber(..) returns false always for strings it seems. I think _.isNumber does strict type inference on this. That's not what this needs to do. It needs to verify that the given value is a valid number (duck typed), and return the default value otherwise. There is no strict type verification, it's not really necessary. Underscore's utility method simply won't work here.