Подтвердить что ты не робот

Есть ли эквивалент JavaScript для С# 'params'?

Мне нужен метод, который может иметь произвольное количество параметров. В С# мы имеем оператор params. У нас есть что-то подобное в JavaScript?

4b9b3361

Ответ 1

Существует коллекция arguments, которая содержит все аргументы, переданные функции.

Существует a) нет необходимости указывать "необязательные" аргументы в сигнатуре функции и b) любая функция принимает любое количество параметров.

function foo() {
  console.log(arguments);
}

foo(1,2,3,4);  // logs [1, 2, 3, 4]

Аналогично, нет необходимости предоставлять "необходимые" аргументы в вызове функции:

function foo(a, b, c, d) {
  console.log(arguments);
}

foo(1,2);  // logs [1, 2]

Любой аргумент, указанный в сигнатуре, но не указанный в вызове функции, не будет undefined.

Обратите внимание, что arguments ведут себя как массив, но технически это не одно. Например, вы можете вызывать arguments[0], но вы не можете вызвать arguments.slice(). Что вы можете сделать, чтобы обойти это, используйте прототип Array:

Array.prototype.slice.call(arguments, 1, 2);

Так называемый параметр отдыха ... является новым (ES6+) дополнением к языку и делает работу с вариационными функциями более удобной. Ответ @ArunCM объясняет это.

Ответ 2

Я знаю, что эта ветка слишком старая, но я считаю, что здесь что-то не хватает.

Существует Rest параметр (введен в ECMAScript 6), который позволит нам представить неопределенное количество аргументов как массив .

Он всегда возвращает массив. Это означает, что даже в защитной среде JavaScript можно использовать такие вещи, как проверка .length отдыха без охраны.

Синтаксис:

function(a, b, ...theArgs) {
// ...
}

Существуют три основных различия между параметрами отдыха и объектами arguments:

  • параметры останова - это те, которым не присвоено отдельное имя, а объект arguments содержит все аргументы, переданные функции
  • объект arguments не является реальным массивом, в то время как параметры останова являются экземплярами Array, поэтому на него могут быть применены такие методы, как sort, map, forEach или pop;
  • объект аргументов имеет дополнительную функциональность, специфичную для себя (например, свойство вызываемого абонента).

Дополнительное чтение: Спред

function f(x, ...y) {
  // y is an Array
  return x * y.length;
}

console.log("Expected result : 3*2 = 6 & Actual result : " + f(3, "hello", true));
console.log("Expected result : 3*4 = 12 & Actual result : " + f(3, "a", true, "b", 1));

//here we are not passing anything to "y" but its still safe to check .length of "y" because it always return an array.
console.log("Expected result : 3*0 = 0 & Actual result : " + f(3));

Ответ 4

Да. arguments.

function concatStrings () {
    var str = '';
    for (var i = 0; i < arguments.length; i++) {
        str += arguments[i];
    }
    return str;
}

Помните, что arguments не является массивом, поэтому он не имеет методов, таких как join или push. Это просто массивный объект (с численными свойствами и свойством length), поэтому его можно повторить через.

Ответ 5

Это нечто вроде неявного в специальной переменной "arguments". Используйте следующее:

function something(arg1, arg2) {
    for (var i = 0; i < arguments.length; i++) {
        var x = arguments[i];
    }
}

Затем вы можете называть его как something(1, 2, 3, 'a', 'b', 'c')

Другие примеры здесь: http://www.jtricks.com/javascript_tutorials/varargs.html

Ответ 6

Функции Javascript могут принимать любое количество параметров по умолчанию. Вы можете увидеть их с помощью переменной arguments.

Смотрите здесь.