[英]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對象之間有三個主要區別:
補充閱讀: 傳播
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
不是數組,因此它沒有join
或push
等方法。 它只是一個類似數組的對象(具有數字屬性和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.