2011-11-22 47 views
0

我想知道這段代碼:JavaScript數組拼接無指數

var numbers, _ref; 
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 

[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref; 
alert(numbers); 

here,結果是[0, 1, 2, -3, -4, -5, -6, 7, 8, 9] ,任何人都可以解釋我這個?

回答

1

功能。適用(上下文,argsArray)調用在給定上下文功能,通過argsArray爲參數爲功能

在這種情況下,功能[].splice,它採用下列參數,在該順序如下:

  1. 指數 - 要開始改變陣列
  2. 的howmany - 元素刪除,從索引
  3. element1,...,elementN - 元素插入到所述陣列在索引

[3,4].concat(_ref = [-3, -4, -5, -6])由兩個陣列串聯起來,給予[3, 4, -3, -4, -5, -6]計算結果爲陣列。這在argsArray傳遞給.apply(),使得:

  1. 指數 == 3(開始於索引3)
  2. 的howmany == 4(除去4種元素)
  3. 元素1 ,. ..,elementN == -3,-4,-5,-6(元素在索引3插入,取出後)

因此.apply()引起該.splice()函數在numbers數組的上下文中運行,刪除索引3,4,5和6處的元素,然後在「2」和「7」之間插入元素-3,-4,-5和-6原始數組。

編輯:請參閱RobG的答案,瞭解原始代碼的等效內容(而不是其部分的解釋)。

+0

誰給了-1,照顧解釋爲什麼? –

+0

感謝您的回答 – ifree

+1

如果你正在尋找的是一個易於使用的功能,檢查'insertArrayAt()'在這個答案http://stackoverflow.com/a/12189963/984780 –

0

[3, 4].concat(_ref = [-3, -4, -5, -6]) evals到[3, 4, -3, -4, -5, -6][].splice.apply(numbers, [3, 4, -3, -4, -5, -6]))numbers.splice(3, 4, -3, -4, -5, -6)使4個元素從索引3說明以被移除和元素「-3,-4,-5,-6」要在索引3見splice在插入。

+0

的感謝!我知道了 ! – ifree

1

您的代碼解析爲以下變量聲明:

var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
var _ref = [-3, -4, -5, -6]; 

而這些表情:

numbers.splice(3, 4, -3, -4, -5, -6); 
_ref; 
alert(numbers); 
+0

謝謝你的明確答案! – ifree