2017-06-06 39 views
1

在JavaScript中,有些方法會創建調用它的對象的副本,而其他方法則不會。爲什麼JavaScript中的某些方法會調用該對象的副本?

例如:

var numbers = [1, 2, 3, 4, 5]; 
numbers.map(function(x) { return x + 1 }); 
console.log(numbers); // [1, 2, 3, 4, 5]; 

它使你必須設置另一個變量「數字」的副本。

鑑於:

var numbers = [1, 2, 3, 4, 5]; 
numbers.reverse(); 
console.log(numbers); // [5, 4, 3, 2, 1]; 

它改變了 「數字」 直接。任何人都可以解釋爲什麼?

+0

閱讀每種方法的文檔 – charlietfl

+0

有些方法會創建一個新的數組,其他方法會更改數組。它主要是爲了方便而完成的,通常當你繪製一些東西時,你會得到一個新的數組等等。 – adeneo

+0

我不知道爲什麼這個問題會吸引downvotes? –

回答

1

這是由於將方法合併到JavaScript中的時間不同造成的。

方法反向是從ECMAScript的第一個版本。

地圖最近在第5版中加入。

現在語言中有更多功能的趨勢。功能語言的主要原則之一是數據不可變性。因此,這些數組的新方法(即映射,過濾器等)是功能性的,而不是更改源數組。

1

在JavaScript的陣列的方法大致分爲3種 - mutator方法 - 存取方法 - 迭代方法

mutator方法 - 實例:反向(),推()等等:修改數組。顧名思義,這些方法會改變它們被調用的數組。 (),concat()等: - 不要修改數組並返回數組的表示形式.i.e返回一個新數組,它是修改數組。

迭代方法 -Ex:filter(),map() - 作爲參數在處理數組時被回調的函數。在這些方法中,數組的長度已經被採樣/複製,並且回調在本文中被執行。

通用方法(非標準) - EX:join()這些方法本質上是通用的,適用於「看起來像」數組的對象。

關於這方面的詳細說明可以在下面的鏈接中找到: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype

希望這有助於!

+0

實際上*所有*數組方法是通用的。按標準。 – Bergi

相關問題