Sobre essa coisa de uma linguagem ser compilada ou interpretada, escrevi um post sobre isso.
Mas de forma resumida, não existe essa coisa de que uma linguagem só pode ser um dos dois. É um pouquinho mais complicado que isso, então sugiro que leiam :-)
Obs: nas primeiras versões do JavaScript, usava-se um interpretador, mas hoje em dia as engines dos browsers mais usados costumam usar um compilador que gera byte code, que por sua vez é executado por uma VM (que pode ter outro compilador just in time - JIT - que converte o byte code para código de máquina). Enfim, o meu post explica em mais detalhes.