// Tests when |arguments| are used with Array.prototype.slice.
function testBasic() { // Return the number of arguments. function argslen() { return arguments.length; }
// Return the first argument. function arg0() { return arguments[0]; }
// Return the argument at the request index. function argIndex(i) { return arguments[i]; }
// Call the above functions when no formals are present. function noFormalsLen() { return argslen(...Array.prototype.slice.call(arguments)); } function noFormals0() { return arg0(...Array.prototype.slice.call(arguments)); } function noFormalsIndex() { return argIndex(...Array.prototype.slice.call(arguments)); }
// Call the above functions when some formals are present. function formalsLen(x, y, z) { return argslen(...Array.prototype.slice.call(arguments)); } function formals0(x, y, z) { return arg0(...Array.prototype.slice.call(arguments)); } function formalsIndex(x, y, z) { return argIndex(...Array.prototype.slice.call(arguments)); }
// Call the above functions when a rest argument is present. function restLen(...rest) { return argslen(...Array.prototype.slice.call(arguments)); } function rest0(...rest) { return arg0(...Array.prototype.slice.call(arguments)); } function restIndex(...rest) { return argIndex(...Array.prototype.slice.call(arguments)); }
// Call the above functions when default parameters are present. function defaultLen(x = 0) { return argslen(...Array.prototype.slice.call(arguments)); } function default0(x = 0) { return arg0(...Array.prototype.slice.call(arguments)); } function defaultIndex(x = 0) { return argIndex(...Array.prototype.slice.call(arguments)); }
for (let i = 0; i < 100; ++i) {
assertEq(noFormalsLen(), 0);
assertEq(noFormalsLen(1), 1);
assertEq(noFormalsLen(1, 2, 3), 3);
// Same as testBasic, except that the first argument is removed. function testRemoveFirst() { // Return the number of arguments. function argslen() { return arguments.length; }
// Return the first argument. function arg0() { return arguments[0]; }
// Return the argument at the request index. function argIndex(i) { return arguments[i]; }
// Call the above functions when no formals are present. function noFormalsLen() { return argslen(...Array.prototype.slice.call(arguments, 1)); } function noFormals0() { return arg0(...Array.prototype.slice.call(arguments, 1)); } function noFormalsIndex() { return argIndex(...Array.prototype.slice.call(arguments, 1)); }
// Call the above functions when some formals are present. function formalsLen(x, y, z) { return argslen(...Array.prototype.slice.call(arguments, 1)); } function formals0(x, y, z) { return arg0(...Array.prototype.slice.call(arguments, 1)); } function formalsIndex(x, y, z) { return argIndex(...Array.prototype.slice.call(arguments, 1)); }
// Call the above functions when a rest argument is present. function restLen(...rest) { return argslen(...Array.prototype.slice.call(arguments, 1)); } function rest0(...rest) { return arg0(...Array.prototype.slice.call(arguments, 1)); } function restIndex(...rest) { return argIndex(...Array.prototype.slice.call(arguments, 1)); }
// Call the above functions when default parameters are present. function defaultLen(x = 0) { return argslen(...Array.prototype.slice.call(arguments, 1)); } function default0(x = 0) { return arg0(...Array.prototype.slice.call(arguments, 1)); } function defaultIndex(x = 0) { return argIndex(...Array.prototype.slice.call(arguments, 1)); }
for (let i = 0; i < 100; ++i) {
assertEq(noFormalsLen(), 0);
assertEq(noFormalsLen(1), 0);
assertEq(noFormalsLen(1, 2, 3), 2);
// Same as testBasic, except that the last argument is removed. function testRemoveLast() { // Return the number of arguments. function argslen() { return arguments.length; }
// Return the first argument. function arg0() { return arguments[0]; }
// Return the argument at the request index. function argIndex(i) { return arguments[i]; }
// Call the above functions when no formals are present. function noFormalsLen() { return argslen(...Array.prototype.slice.call(arguments, 0, -1)); } function noFormals0() { return arg0(...Array.prototype.slice.call(arguments, 0, -1)); } function noFormalsIndex() { return argIndex(...Array.prototype.slice.call(arguments, 0, -1)); }
// Call the above functions when some formals are present. function formalsLen(x, y, z) { return argslen(...Array.prototype.slice.call(arguments, 0, -1)); } function formals0(x, y, z) { return arg0(...Array.prototype.slice.call(arguments, 0, -1)); } function formalsIndex(x, y, z) { return argIndex(...Array.prototype.slice.call(arguments, 0, -1)); }
// Call the above functions when a rest argument is present. function restLen(...rest) { return argslen(...Array.prototype.slice.call(arguments, 0, -1)); } function rest0(...rest) { return arg0(...Array.prototype.slice.call(arguments, 0, -1)); } function restIndex(...rest) { return argIndex(...Array.prototype.slice.call(arguments, 0, -1)); }
// Call the above functions when default parameters are present. function defaultLen(x = 0) { return argslen(...Array.prototype.slice.call(arguments, 0, -1)); } function default0(x = 0) { return arg0(...Array.prototype.slice.call(arguments, 0, -1)); } function defaultIndex(x = 0) { return argIndex(...Array.prototype.slice.call(arguments, 0, -1)); }
for (let i = 0; i < 100; ++i) {
assertEq(noFormalsLen(), 0);
assertEq(noFormalsLen(1), 0);
assertEq(noFormalsLen(1, 2, 3), 2);
function testOverriddenLength() { function g(x, y = 0) { return x + y;
}
function f(i) { if (i === 100) {
arguments.length = 1;
} var args = Array.prototype.slice.call(arguments); return g.apply(null, args);
}
for (let i = 0; i <= 150; ++i) {
assertEq(f(i, i), i !== 100 ? i * 2 : i);
}
}
testOverriddenLength();
function testOverriddenElement() { function g(x, y) { return x + y;
}
function f(i) { if (i === 100) {
arguments[1] = 0;
} var args = Array.prototype.slice.call(arguments); return g(args[0], args[1]);
}
for (let i = 0; i <= 150; ++i) {
assertEq(f(i, i), i !== 100 ? i * 2 : i);
}
}
testOverriddenElement();
function testDeletedElement() { function g(x, y = 0) { return x + y;
}
function f(i) { if (i === 100) { delete arguments[1];
} var args = Array.prototype.slice.call(arguments); return g.apply(null, args);
}
for (let i = 0; i <= 150; ++i) {
assertEq(f(i, i), i !== 100 ? i * 2 : i);
}
}
testDeletedElement();
function testForwardedArg() { function g(x, y) { return x + y;
}
function f(i) { function closedOver() { if (i === 100) i = 0;
}
closedOver(); var args = Array.prototype.slice.call(arguments); return g(args[0], args[1]);
}
for (let i = 0; i <= 150; ++i) {
assertEq(f(i, i), i !== 100 ? i * 2 : i);
}
}
testForwardedArg();
Messung V0.5
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.