arguments
함수에 전달 된 모든 인수를 보유하는 특수 객체 라는 것을 알고 있습니다.
그리고 그것이 배열이 아닌 한-당신은 같은 것을 사용할 수 없습니다 arguments.slice(1)
.
그래서 질문-첫 번째 요소를 제외한 모든 것을 슬라이스하는 방법은 arguments
무엇입니까?
UPD :
배열로 변환하지 않고는 방법이없는 것 같습니다.
var args = Array.prototype.slice.call(arguments);
누군가 다른 솔루션을 게시하면 좋을 것입니다.
답변
배열 함수와의 간섭은 실제로 필요하지 않습니다.
나머지 매개 변수 구문을 사용하면 ...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");
…쉬다
- Fiddle 예제 보기
- 참조 MDN 문서 페이지를
답변
Q. 첫 번째 요소를 제외한 모든 것을 슬라이스하는 방법은 arguments
무엇입니까?
다음은 첫 번째 인수를 제외한 모든 인수를 포함하는 배열을 반환합니다.
var slicedArgs = Array.prototype.slice.call(arguments, 1);
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]
답변
에서 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments :
JavaScript 엔진 (예 : V8)에서 최적화를 방지하기 때문에 인수를 분할해서는 안됩니다. 대신 arguments 객체를 반복하여 새 배열을 생성 해보십시오.
따라서 위의 Paul Rosiana의 대답은 정확합니다.
답변
이것은 방법이 될 수 있습니다.
var args = Array.from(arguments).slice(1);
답변
방법을 사용할 수 있습니다 [].slice.call(arguments, 1)
[] .slice 당신에게 슬라이스 함수 객체를 반환하고 당신이 그것을 호출 할 수 arguments
및 1
매개 변수는
답변
함수 내에서 … rest를 사용하여 첫 번째 인수와 나머지 인수를 구분할 수 있습니다.
function foo(arr) {
const [first, ...rest] = arguments;
console.log(`first = ${first}`);
console.log(`rest = ${rest}`);
}
//Then calling the function with 3 arguments:
foo(1,2,3)