O browser entende JavaScript, mas browsers diferentes além de versões diferentes de cada browser suportam features diferentes do JavaScript.
Para verificar o nível de suporte de uma feature, normalmente usamos o site caniuse.com. Por exemplo, suporte para Array.prototype.map é bem grande enquanto suporte para Native Filesystem API é pequeno ainda.
Além disso, com bibliotecas como React e Vue, a gente escreve código que o browser não entende nativamente. E se adicionarmos TypeScript no meio, daí que complica mesmo, porque o browser não sabe interpretá-lo.
Para suportar os casos acima e outros mais, normalmente usamos ferramentas de compilação ou transpilação. Muitas vezes falamos de compilação quando estamos falando de transpilação, então não precisa focar na diferença, mas existe.