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 j
por 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)