buenas...
el asunto es el siguiente. primero nótese que estás comparando por posiciones del array. es decir, índice 0 con índice 0, índice 1 con índice 1, etc. en el primer ejemplo, obtienes el alert
a1 1 a2 2 y
a1 undefined a2 undefined. el primero es obvio, estás comparando índice 0 con índice 0. el segundo, te da undefined porque estás comparando dos posiciones del array que no existen en ninguno. de modo que automáticamente cualquier índice que no existe en el array devolverá undefined. si lo vemos ciclo por ciclo con los arrays array1 [1] y array2 [1,2,3,], la comparación es como sigue:
Código:
index array1 array2
0 1 == 1 (se muestra en el alert)
1 undefined != 2
2 undefined != 3
3 undefined == undefined (se muestra en el alert)
entonces, ¿por qué se muestra el segundo alert? porque tu bucle va de 0 a 3, lo cual es una lontigud equivocada. tienes que cambiar la longitud o el operador de comparación. fíjate que tienes
menor o igual (<=).
el otro caso es cuando tienes un array tal que array1 [2], array2 [1,2,3]. si haces la corrección anterior —el operador o la lontigud— no deberías ver ningún alert, de nuevo, porque estás comparando por posiciones del array.
Código:
index array1 array2
0 2 != 1
1 undefined != 2
2 undefined != 3
no estoy muy claro en lo que quieres hacer. si determinar si un elemento existe en el otro array o si comparar por posiciones. si es la primera premisa, entonces básicamente tendrías que hacer dos bucles, uno dentro del otro. un bucle para recorrer un array y otro bucle para recorrer el segundo array y evaluar la existencia de los valores.
Código:
var array1 = [8,1,0], array2 = [2,9,8,0];
for (var i = 0, len1 = array1.length; i < len1; i++){
for (var j = 0, len2 = array2.length; j < len2; j++){
if (array1[i] == array2[j]) console.log("array1: ", i, ", array2: ", j, " -> ", array1[i]);
}
}