Oi Francis!
Que interessante a sua observação sobre a diferença entre definir o valor do campo como 0 ou como uma string vazia ' '. Ambos têm suas aplicações dependendo do que você deseja alcançar no comportamento do formulário.
Quando você define o valor como 0:
document.getElementById('quantidade').value = 0;
Você está explicitamente colocando um zero no campo, o que é útil quando você deseja que o usuário veja que o campo foi resetado para um valor numérico específico. No entanto, como você mencionou, isso pode causar a concatenação de números, como no exemplo de 04, se o usuário não apagar o zero antes de digitar um novo número.
Por outro lado, ao definir o valor como uma string vazia:
document.getElementById('quantidade').value = ' ';
Você está deixando o campo visualmente vazio, o que pode ser mais intuitivo para o usuário, já que ele não precisa apagar um valor preexistente antes de inserir um novo. Isso pode melhorar a experiência do usuário, especialmente se ele está acostumado a inserir valores diretamente.
Ambas as abordagens têm seus méritos, e a escolha entre uma ou outra pode depender do contexto do seu projeto e da experiência que você deseja proporcionar ao usuário. É sempre bom testar diferentes abordagens para ver qual delas se adapta melhor às suas necessidades e às dos usuários.
Espero ter ajudado e bons estudos!