como a contagem das posições dos valores no array começa no 0, a última posição que tem um valor é a posição tamanho do array (length) MENOS 1:
valor 1 = posição 0 valor 2 = posição 1 valor 3 = posição 2 ... valor 90 = posição 89
no código em questão a gente tá usando a variável i pra contar as posições dos valores no array.
e a condição que definimos relaciona a posição (i) com o tamanho (letras.length) do array:
for( var i = 0; i <= letras.length; i++ ) {
A = posição 0 (i = 0) B = posição 1 (i = 1) C = posição 2 (i = 2) D = posicão 3 (i = 3)
quando usamos <= no código, estamos criando também um alerta para a posição (i) que é IGUAL ao tamanho (length) do array. neste caso o tamanho do array é 4 e veja que a última posição que possui um valor é a posição 3. ou seja, não há valor definido pra posição 4, por isso o 5º alerta é "undefined"
MAS resolvemos isso trocando o <= por um modesto <
for( var i = 0; i < letras.length; i++ ) {
e plim! correto. então só menor já basta :D