您所知道的arguments是一个特殊的对象,其中包含传递给函数的所有参数。
只要它不是数组,就不能使用arguments.slice(1)。
因此,问题-如何从第一个元素中切出所有元素arguments?
UPD:
似乎没有办法将其转换为数组
var args = Array.prototype.slice.call(arguments);
如果有人发布了另一个解决方案,那就更好了,如果不是这样的话-我将检查第一个解决方案,上面的行作为答案。
Answers:
实际上不需要使用数组函数进行干预。
使用rest参数语法 ...rest更简洁,更方便。
例
function argumentTest(first, ...rest) {
console.log("First arg:" + first);
// loop through the rest of the parameters
for (let arg of rest) {
console.log("- " + arg);
}
}
// call your function with any number of arguments
argumentTest("first arg", "#2", "more arguments", "this is not an argument but a contradiction");
...休息
问:如何切片除第一个元素以外的所有内容arguments?
以下将返回一个数组,其中包含除第一个参数外的所有参数:
var slicedArgs = Array.prototype.slice.call(arguments, 1);
您不必arguments首先转换为数组,只需一步即可完成所有操作。
.slice()on arguments,但是给出的唯一原因是它阻止了JS引擎对该功能的优化。因此,它并不是失败,而是可能会更慢。我不会写代码来满足当今JS引擎的优化需求,而不是明天的引擎可能已经解决了优化问题时,无论如何在大多数情况下用户都不会感觉到差异案件。最好先编写清晰且易于维护的代码,然后仅在出现可衡量的性能问题时再进行优化。
您可以通过按顺序遍历arguments对象来“切片而不切片”:
function fun() {
var args = [];
for (var i = 1; i < arguments.length; i++) {
args.push(arguments[i]);
}
return args;
}
fun(1, 2, 3, 4, 5); //=> [2, 3, 4, 5]
.slice();-)
Array.prototype.slice,但是您的问题是是否还有另一种方法。
for
从https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments:
您不应切入参数,因为它会阻止JavaScript引擎(例如V8)中的优化。而是尝试通过遍历arguments对象构造一个新数组。
因此,Paul Rosiana的答案是正确的
这可以是一种方法:
var args = Array.from(arguments).slice(1);
function foo(...args)
arguments将其转换为数组等更好的方法。请在下面查看我的答案。