C#'params'是否有等效的JavaScript?

时间:2011-11-29 11:35:50

标签: javascript

我需要一个可以有任意数量参数的方法。在C#中,我们有params语句。我们在JavaScript中有类似的东西吗?

6 个答案:

答案 0 :(得分:29)

arguments集合,其中包含传递给函数的所有参数。

有a)不需要在函数签名中指定“可选”参数,b)任何函数都接受任意数量的参数。

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

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

同样,不需要在函数调用中提供“required”参数:

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

所谓的rest parameter ...是该语言的新增功能(ES6 +),可以更方便地使用可变参数函数。 @ArunCM's answer解释了它。

答案 1 :(得分:10)

我知道这个帖子太旧了,但我相信这里缺少了一些东西。 Rest parameter 在ECMAScript 6 中引入),这将允许我们将无限期数量的参数表示为阵列即可。

它总是返回一个数组。这意味着即使在防御性的JavaScript领域,也可以在没有防护装置的情况下检查 .length 的休息。

语法:

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

rest参数和arguments对象之间有三个主要区别:

  1. rest参数只是那些没有给出单独名称的参数,而arguments对象包含传递给函数的所有参数
  2. arguments对象不是真正的数组,而rest参数是Array实例,这意味着可以直接在其上应用sort,map,forEach或pop等方法;
  3. arguments对象具有特定于其自身的附加功能(如callee属性)。
  4. 补充阅读: Spread

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

答案 2 :(得分:3)

是。 arguments

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

请注意,arguments不是数组,因此它没有joinpush等方法。它只是一个类似数组的对象(具有数字属性和length属性),因此可以迭代。

答案 3 :(得分:2)

JavaScript在函数内部有arguments个对象。它包含传递给函数的所有参数。

More info

答案 4 :(得分:1)

它是特殊变量“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

答案 5 :(得分:0)

默认情况下,Javascript函数可以接受任意数量的参数。您可以使用arguments变量查看它们。

请参阅here