簡體   English   中英

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

[英]Is there a JavaScript equivalent for C# 'params'?

我需要一個可以有任意數量參數的方法。 在C#中我們有params語句。 我們在JavaScript中有類似的東西嗎?

有一個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參數 ...是語言的新增功能(ES6 +),使得可變功能的使用更加舒適。 @ ArunCM的答案解釋了它。

我知道這個帖子太舊了但我相信這里缺少一些東西。

Rest參數在ECMAScript 6中引入 )允許我們將無限數量的參數表示為數組

它總是返回一個數組 這意味着,即使在防守JavaScript的土地,它的確定做這樣的事情的休息檢查。長度無人看守。

句法 :

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

rest參數和arguments對象之間有三個主要區別:

  1. rest參數只是那些沒有給出單獨名稱的參數,而arguments對象包含傳遞給函數的所有參數
  2. arguments對象不是真正的數組,而rest參數是Array實例,這意味着sort,map,forEach或pop等方法可以直接應用於它;
  3. arguments對象具有特定於其自身的附加功能(如callee屬性)。

補充閱讀: 傳播

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

是。 arguments

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

請注意, arguments不是數組,因此它沒有joinpush等方法。 它只是一個類似數組的對象(具有數字屬性和length屬性),因此可以迭代。

JavaScript在函數內部有arguments對象。 它包含傳遞給函數的所有參數。

更多信息

它在特殊變量“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

默認情況下,Javascript函數可以接受任意數量的參數。 您可以使用arguments變量查看它們。

看到這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM