2013-10-01 43 views
-1

我已經函數聲明爲:的Javascript功能評價

function test(id, name) { 
    return id + "*-----*" + name 
} 

所以,當我做到這一點test(2,"Bob")我得到這個:

"2*-----*Bob" 

但是,當我宣佈陣列如:

a = [2, "Bob"] 

並將這些參數注入到如下函數中:

test(a.join(',')) 

我得到這個:

"2,Bob*-----*undefined" 

這是不是我想要的。爲什麼會這樣解釋?我怎樣才能使它從數組我有

+0

數組連接會給你一個字符串,而不是用逗號分開的兩個參數,即''2,Bob''是數組連接結果,但''2','Bob''是你想要的。您應該使第二個參數可選,並檢查第一個參數是否爲數組。然後你可以得到數組內容而不是兩個字符串參數 – devnull69

回答

3

test.apply(null,a)將向該函數發送數組a,並使數組元素成爲函數參數。也就是說,[0]將是第一個函數參數,[1]將是第二個參數,依此類推,但函數只有兩個參數。

更多關於這一點,閱讀The Mozilla Docs for Function.apply

0

a.join(',')給你一個字符串,所以你用一個字符串("2,Bob"),第二個參數調用函數test輸出"2*-----*Bob"undefined

如果你想允許數組作爲參數,你可以做到這樣:

function test(id, name) { 
    if (id.length > 1) 
     return id[0] + "*-----*" + id[1] 
    else 
     return id + "*-----*" + name 
} 
+1

正確的答案......爲什麼會有人倒退? – devnull69

+0

我認爲是因爲這個問題被編輯過,但我現在也回答了編輯過的部分。請刪除downvote或評論。 – Raidri

3

a.join(',')將Concat的導致像"2,Bob一個字符串」你必須分別通過這兩個變量,如數組:

test(a[0], a[1]); 
0

我認爲你是隻傳遞一個參數傳遞給函數,它需要兩個參數

嘗試

test(a.join(','), "foo"); 
0
test(a.join(',')) 

這恰好經過一個參數成函數,一個字符串一個逗號。對於x的任何值,test(x)將始終只傳遞一個參數到函數中。

你期望它的工作方式就像你寫了test(2,"Bob")一樣,但是Javascript不是在編寫和遞歸評估自己!您期望:

  1. a.join()返回一個字符串並將其寫入源代碼。
  2. 生成的源代碼被讀取並執行。

它的實際工作方式:

  1. 的源代碼讀取和執行。
  2. a.join()返回一個用作test()的輸入的值。
0

要傳遞一個數組收拾參數的函數,你需要apply()

function test(id, name) { 
    return id + "*-----*" + name 
} 

var a = [2, "Bob"]; 

var result = test.apply(null, a); // See below 

alert(result); 

的第一個參數apply將成爲「這個」裏面的功能,第二個參數是實際值的數組。