函數.concat()
,我可以傳遞任意數量的參數給它。String.concat()如何在JavaScript中實現?
我明白C++中的函數重載,但我不知道如何在JavaScript中實現具有未知數量參數的函數。
如何爲函數實現任意數量的參數?
函數.concat()
,我可以傳遞任意數量的參數給它。String.concat()如何在JavaScript中實現?
我明白C++中的函數重載,但我不知道如何在JavaScript中實現具有未知數量參數的函數。
如何爲函數實現任意數量的參數?
在JavaScript中,您可以使用名爲「arguments」的內置參數,它是傳遞給函數的所有參數的數組。您可以使用arguments.length和數組參數[0],參數[1]等中的每個值來獲取它的長度......每個函數都有這個可以使用的內置變量。
例如,連接所有傳遞給它的字符串的函數。
function concatAll() {
var str;
for (var i = 0 ; i < arguments.length; i++) {
str += arguments[i];
}
return(str);
}
var f = concatAll("abc", "def", "ghi"); // "abcdefghi"
您可以使用arguments
對象來完成此操作。見實例和文檔在這裏:https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments
這樣的 -
function f()
{
var i;
for(i=0; i<arguments.length; i++)
{
alert((i+1) + "th argument: " + arguments[i]);
}
}
所有的JavaScript函數有一個名爲arguments
一個內置的參數,它是一個包含所有傳遞給函數的函數參數數組。只需遍歷這個數組,你就可以訪問函數的所有參數。
作爲一個例子,一旦我寫了一個函數,如果某些特定的字段不是空的,它就會啓用/禁用某個按鈕。我寫這個函數這樣 -
function toggleButton() // I used jquery inside this function
{
var i;
var last = arguments.length-1;
for(i=0; i<last; i++)
{
if($.trim($(arguments[i]).val()) === "")
return false;
}
$(arguments[last]).toggle();
return true;
}
,並調用此函數這樣的 -
toggleButton("#idOfFirstField", "#idOfSecondField", "#idOfButtonToToggle");
或這樣的 -
toggleButton("#idOfFirstField", "#idOfSecondField", "#idOfThirdField", "#idOfButtonToToggle");
因此,在這兩種情況下,我經過可變數量字段id到該函數,並檢查這些字段是否爲空。如果它們都包含一些值,那麼它會切換按鈕的可見性。
這樣的 - 使用arguments object,所有功能都可用:
function someFunction() {
for (var i=0,n=arguments.length;i<n;i++) {
// do something with arguments[i];
}
}
可以使用arguments
數組訪問沒有正式的函數內聲明的參數:
function printArguments() {
for (i = 0; i < printArguments.arguments.length; i++)
document.writeln(printArguments.arguments[i] + '<br />');
}
printArguments(1, 2, 3, 'etc');
哈哈 - 你太晚了,但至少它是來自我曾經是JS編輯器的網站的帖子。很高興看到1997年的代碼仍然有效 – mplungjan
任何javascript函數都可以有任意數量的參數。如果函數的執行取決於它的數量或特定質量,則需要檢查arguments
對象,像其他人所示的那樣,該對象可以像「Arraylike」對象一樣迭代。
在某些情況下,可以很方便的參數轉換爲真正的數組,使用類似
var args = Array.prototoype.slice(arguments)
。
這是來自John Resigs的關於方法重載的一個blog entry,您可能會感興趣。
你能詳細說明你的問題嗎? –
@mahesh,看我的編輯。 – Blender
嘆了口氣,我只是浪費了第一篇文章糾正拼寫錯誤的帖子,現在Blender甚至擺脫了編輯。星期六早上不是一個好開始...... – mplungjan