알 수없는 수의 인수를 자바 스크립트 함수에 전달
다음과 같이 알 수없는 수의 인수를 전달하는 방법이 있습니까?
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');
이게 도움이 되길 바란다
ES6의 나머지 매개 변수
const example = (...args) => {
for (arg in args) {
console.log(arg);
}
}
참고 : 나머지 매개 변수 앞에 일반 매개 변수를 전달할 수 있습니다.
const example = (arg1, ...args) => {
console.log(arg1);
for (arg in args) {
console.log(arg);
}
}
확산 / 나머지 연산자를 사용하여 매개 변수를 배열로 수집 length하면 배열의가 전달 된 매개 변수의 수가됩니다.
function foo(...names) {
console.log(names);
return names;
}
console.log(foo(1, 2, 3, 4).length);
BabelJS를 사용 하여 함수를 oldschool JS로 변환했습니다.
"use strict";
function foo() {
for (var _len = arguments.length, names = new Array(_len), _key = 0; _key < _len; _key++) {
names[_key] = arguments[_key];
}
console.log(names);
return names;
}
스프레드 / 레스트 연산자를 사용하여 함수를 생성 할 수 있으며 그 이후로 목표를 달성했습니다. 아래의 덩어리를보세요.
const print_names = (...args) => args.forEach(x => console.log(x));
나는 이것을 좋아한다 :
This will not help if you don't know the number of arguments, but it helps if you don't want to remember the order of them.
/**
* @param params.one A test parameter
* @param params.two Another one
**/
function test(params) {
var one = params.one;
if(typeof(one) == 'undefined') {
throw new Error('params.one is undefined');
}
var two = params.two;
if(typeof(two) == 'undefined') {
throw new Error('params.two is undefined');
}
}
'developer tip' 카테고리의 다른 글
| Java의 enum에서 문자열 값 가져 오기 (0) | 2020.11.07 |
|---|---|
| 헤드리스 인터넷 브라우저? (0) | 2020.11.07 |
| 와일드 카드를 사용하여 PostgreSQL에서 여러 테이블을 삭제하는 방법 (0) | 2020.11.07 |
| 'data : font / woff…'글꼴로드를 거부하면 다음 콘텐츠 보안 정책 지침을 위반합니다.“default-src 'self'”. (0) | 2020.11.06 |
| 모든 달 이름을 나열하는 방법 (예 : 콤보)? (0) | 2020.11.06 |