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;
}
}
}
Приведенный выше код может быть еще более упрощен, я просто внес минимальное изменение, чтобы избавиться от eval
. Вы можете избавиться от j
, например:
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); }
}
}
эквивалентно. Или, чтобы использовать встроенный объект arguments
(чтобы избежать списка параметров в двух местах):
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); }
}
}
Даже если вы не фильтровали список, вы не хотите делать что-то вроде this.i = arguments
, потому что arguments
не является настоящим массивом; у него есть свойство callee
, которое вам не нужно, и отсутствуют некоторые методы массива, которые могут вам понадобиться в i
. Как уже отмечали другие, если вы хотите быстро преобразовать объект arguments
в массив, вы можете сделать это с помощью следующего выражения:
Array.prototype.slice.call(arguments)
Вы можете использовать это вместо var args = [i1, i2 ...
строк выше.