Saltar al contenido

¿Cuáles son las alternativas a eval en JavaScript?

Este tutorial ha sido analizado por nuestros especialistas para asegurar la exactitud de este tutorial.

Solución:

function StrippedExample(i1, i2, i3, i4, i5, i6, i7, i8) 
    var args = [i1, i2, i3, i4, i5, i6, i7, i8]; // put values in an array
    this.i = [];
    for (var i=0,j=0 ;i<8;i++)  // now i goes from 0-7 also
        var k = args[i]; // get values out
        if (k > 0) 
            this.i[j++] = k;
        
    

El código anterior se puede simplificar aún más, solo hice el cambio mínimo para deshacerme de eval. Puedes deshacerte de jpor ejemplo:

function StrippedExample(i1, i2, i3, i4, i5, i6, i7, i8) 
    var args = [i1, i2, i3, i4, i5, i6, i7, i8];
    this.i = [];
    for (var i = 0; i < args.length; i++) 
        var k = args[i];
        if (k > 0)  this.i.push(k); 
    

es equivalente. O, para usar el incorporado arguments objeto (para evitar tener su lista de parámetros en dos lugares):

function StrippedExample(i1, i2, i3, i4, i5, i6, i7, i8) 
    this.i = [];
    for (var i = 1; i < arguments.length; i++) 
        var k = arguments[i];
        if (k > 0)  this.i.push(k); 
    

Incluso si no estuviera filtrando la lista, no querrá hacer algo como this.i = arguments porque arguments no es una matriz real; tiene un callee propiedad que no necesita y le faltan algunas array métodos que podría necesitar en i. Como han señalado otros, si desea convertir rápidamente el arguments objeto en un arraypuedes hacerlo con esta expresión:

Array.prototype.slice.call(arguments)

Podrías usar eso en lugar del var argumentos = [i1, i2 ... lines above.

You are simply making an array from your function 8 arguments, removing the ones that are less than or equal to zero.

The following code is equivalent, and it will work for any arbitrary number of arguments:

function StrippedExample() 
  var args = [];  para (var i = 0; i < arguments.length; i++) 
    if (arguments[i] > 0)  argumentos.push(argumentos[i]);    //... 

Evaluar alternativa:

exp = '1 + 1'
x = Function('return ' + exp)()
console.log(x)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *