Colección de citas famosas - Consulta de diccionarios - La diferencia entre JS forEach nativo y el recorrido de mapas y los métodos de escritura compatibles

La diferencia entre JS forEach nativo y el recorrido de mapas y los métodos de escritura compatibles

1. Recorrido nativo de JS forEach() y map()

***Mismos puntos:

1.

2. Cada función anónima ejecutada en forEach() y map() admite 3 parámetros: el elemento actual en la matriz, el índice del elemento actual y la entrada de la matriz original.

3. Esto en funciones anónimas se refiere a Window.

4. Sólo se pueden atravesar matrices.

1.forEach()

Sin valor de retorno.

;

var res = ary.forEach(función (elemento,índice,entrada) {

entrada[índice] = elemento*10;

})

console.log(res);//-->undefinido;

console.log(ary);//-->reemplazará el original La matriz cambia;

2.map()

tiene un valor de retorno y se puede devolver.

;

var res = ary.map(función (elemento,índice,entrada) {

devolver elemento*10;

})

console.log(res);//-->;

console.log(ary);//-->;

Compatible Método de escritura:

Tanto forEach como map no son compatibles en IE6-8 (en caso de incompatibilidad, no hay dos métodos en Array.prototype), entonces necesitamos encapsular un método que sea compatible con nosotros mismos. , el código es el siguiente:

[javascript] ver copia simple

/**

* forEach atraviesa la matriz

* @param callback [función] función de devolución de llamada;

* @param contexto [objeto] contexto;

*/

Array.prototype.myForEach = función myForEach(callback,context) {

contexto = contexto || ventana;

if('forEach' en Array.prototye) {

this.forEach (devolución de llamada, contexto);

return;

}

//Escribe tu propia lógica de ejecución de función de devolución de llamada en IE6-8

for(var i = 0, len = this.length; i < len;i++) {

devolución de llamada && callback.call(context,this[i],i,this);

}

}

[javascript] ver copia simple

/**

* el mapa atraviesa la matriz

* @param devolución de llamada [función] función de devolución de llamada;

* @param contexto [objeto] contexto;

*/

Array.prototype.myMap = función myMap(callback,context) {

context = contexto || ventana;

if('map' en Array.prototye) {

devuelve esto .map(callback,context);

}

//Escribe tu propia lógica de ejecución de función de devolución de llamada en IE6-8

var newAry = [];

for( var i = 0,len = this.length; i < len;i++) {

if(tipo de devolución de llamada === 'función') {

var val = callback.call (context,this[i],i,this);

newAry[newAry.length] = val;

}

}

return newAry;

}