[javascript] 알 수없는 수의 인수를 자바 스크립트 함수에 전달
다음과 같은 알 수없는 수의 인수를 전달하는 방법이 있습니까?
var print_names = function(names) {
foreach(name in names) console.log(name); // something like this
}
print_names('foo', 'bar', 'baz');
또한 전달 된 인수 수를 어떻게 얻습니까?
답변
ES3 (또는 ES5 또는 구식 자바 스크립트)
arguments
배열과 유사하게 작동 하는 매직 객체 를 통해 자바 스크립트 함수에 전달 된 인수에 액세스 할 수 있습니다 . arguments
기능을 사용하면 다음과 같이 보일 것입니다.
var print_names = function() {
for (var i=0; i<arguments.length; i++) console.log(arguments[i]);
}
배열 arguments
이 아니라는 점에 유의하는 것이 중요합니다 . MDC에는 좋은 문서가 있습니다 : https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#Using_the_arguments_object
당신은 설정하려는 경우 arguments
당신은 같은 것들을 할 수 있도록 배열로 .slice()
, .push()
등, 같은 사용 무언가를 :
var args = Array.prototype.slice.call(arguments);
ES6 / 타이프 스크립트
더 좋은 방법이 있습니다! 새로운 휴식 매개 변수 기능은 다음과 같은 기능을 제공합니다.
var print_names = function(...names) {
for (let i=0; i<names.length; i++) console.log(names[i]);
}
답변
ES6 / ES2015
나머지 매개 변수 구문을 활용하십시오 .
function printNames(...names) {
console.log(`number of arguments: ${names.length}`);
for (var name of names) {
console.log(name);
}
}
printNames('foo', 'bar', 'baz');
나머지 매개 변수와 인수 객체 사이에는 세 가지 주요 차이점이 있습니다.
- 나머지 매개 변수는 별도의 이름이 지정되지 않은 유일한 매개 변수이며 arguments 객체는 함수에 전달 된 모든 인수를 포함합니다.
- arguments 객체는 실제 배열이 아닌 반면 나머지 매개 변수는 Array 인스턴스입니다. 즉, sort, map, forEach 또는 pop과 같은 메서드를 직접 적용 할 수 있습니다.
- arguments 객체에는 자신에게 고유 한 추가 기능이 있습니다 (예 : callee 속성).
답변
var
print_names = function() {
console.log.apply( this, arguments );
};
print_names( 1, 2, 3, 4 );
답변
function print_args() {
for(var i=0; i<arguments.length; i++)
console.log(arguments[i])
}
답변
라는 JavaScript의 모든 함수에 전달되는 숨겨진 개체가 있습니다 arguments
.
arguments.length
함수에 전달 된 인수의 양을 가져 오는 데 사용 합니다.
인수를 반복하려면 루프를 사용합니다.
for(var i = arguments.length; i--) {
var arg = arguments[i];
}
주 arguments
당신이 배열로 필요한 경우는 다음과 같이 변환 할 수 있도록 실제 배열되지 않습니다 :
var args = Array.prototype.slice.call(arguments);
답변
arguments.length
. for 루프를 사용할 수 있습니다.
(function () {
for (var a = [], i = arguments.length; i--;) {
a.push(arguments[i]);
};
return a;
})(1, 2, 3, 4, 5, 6, 7, 8)
답변
이제 ES6에서 훨씬 나아졌습니다.
function Example() {
return {
arguments: (...args) =>{
args.map(a => console.log());
}
}
}
var exmpl = new Example();
exmpl.arguments(1, 2, 3, 'a', 'b', 'c');
이게 도움이 되길 바란다