¿Qué navegadores admiten de forma nativa Array.prototype.forEach?

forEach se agregó en Javascript 1.6 (ECMA-262 Edition 5). Entonces, la pregunta se convierte en qué navegadores son totalmente compatibles con Javascript 1.6 y son extras.

Combinando información de algunos sitios (pero no la he probado yo mismo), encuentro esta lista de navegadores que deberían admitir Javascript 1.6 más las extensiones como forEach:

  • Opera 11+
  • Firefox 1.5+
  • Safari 5+
  • Chrome 8+
  • Internet Explorer 9+

La parte más problemática de esta lista es que ninguna versión lanzada actual de IE lo admite, por lo que tendría que codificar una de las soluciones alternativas para poder usarla.

Otros métodos de matriz útiles agregados en Javascript 1.6 incluyen every (), filter (), map () y some (). Ver https://developer.mozilla.org/en… para más información.

Y, esto es lo que el centro de desarrollo de Mozilla dice que debe hacer para cada navegador cruzado: https://developer.mozilla.org/En….

Acabo de hacer algunas experiencias con el código recomendado de mozilla. Parece funcionar muy bien, pero la única advertencia es que ya no puede usar esta sintaxis con matrices:

  var testArray = [1,2,3,4,5,6,7,8,9];

 para (var i en testArray) {
	 debug ("" + i + "," + testArray [i] + "\ n");
 }

porque la función que se agregó manualmente al prototipo de matriz se mostrará como un atributo personalizado en la matriz en el bucle for en los navegadores donde se debe agregar el método forEach personalizado (por ejemplo, todas las versiones de IE menores de 9).

Esto no debería ser un problema para un código completamente nuevo porque el método forEach es en sí mismo un mejor reemplazo para este tipo de código, pero bien podría ser un problema para el código anterior. Y, probablemente, es una buena razón para no utilizar este método de iteración de matriz en primer lugar. Aunque el método anterior es conveniente cuando no tiene forEach (menos escritura), este método a continuación es más seguro y no tiene este problema cuando se agregan prototipos a la clase Array:

  var testArray = [1,2,3,4,5,6,7,8,9];

 for (var len = testArray.len, i = 0; i <len; i ++) {
	 debug ("" + i + "," + testArray [i] + "\ n");
 }

Cuando tenga el método forEach, usaría esto:

  var testArray = [1,2,3,4,5,6,7,8,9];

 testArray.forEach (función (elemento, índice, matriz) {
	 debug ("" + index + "," + element + "\ n");
 }