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 ...
上面的行。