[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');

이게 도움이 되길 바란다