Uma outra característica que marca o JavaScript é por ser uma linguagem interpretada, o que significa que o código é executado diretamente pelo navegador linha por linha, sem a necessidade de um processo de compilação.
É um pouco mais complicado que isso. Se pegarmos, por exemplo, a engine V8 (usada no Chrome e no Node), veremos que ela compila o código sim. Inclusive, a própria documentação do V8 diz claramente que "V8 compiles and executes JavaScript source code".
Na verdade, é uma abordagem mista, com um interpretador executando inicialmente, juntamente com um compilador JIT (just in time), que como o nome diz, pode compilar determinados trechos mais usados (tudo feito durante a execução, podendo inclusive otimizar o código - ou seja, reescrevê-lo para uma versão mais eficiente que produza o mesmo resultado). O mesmo vale para outras engines, a maioria das mais conhecidas usa uma abordagem similar com JIT.
Vale lembrar também que essa definição de linguagem "interpretada" e "compilada" está a cada dia mais longe de ser algo preto-e-branco, ficando mais para uma área cinzenta e difícil de definir onde termina um e acaba outro. Eu entendo quando as pessoas fazem simplificações para facilitar o entendimento, mas é importante saber que o buraco é mais embaixo (uma definição mais precisa sobre o JavaScript seria "compilada em tempo de execução", por exemplo). Ver mais sobre isso aqui, aqui e aqui.
Sobre usar ;
no final de cada statement, é uma dica que pode parecer besta, mas eu acho importantíssima.
Pode parecer "frescura", e sei que o JavaScript "aceita" o código sem ponto e vírgula e "funciona" (e muita gente até ensina e defende que não se use), mas usá-lo sempre evita algumas situações bizarras que podem ocorrer se você não usá-los, como essa e essa (veja mais sobre isso aqui).
Por fim, vale lembrar que o nome oficial da linguagem é ECMAScript (sendo JavaScript a implementação mais conhecida). Ver mais sobre isso aqui.