2016-11-29 114 views
1

閱讀有關Javascript數組和他們的方法的互聯網上,我發現了一些東西,我不明白髮生了什麼。我是專門唸叨Array.reverse()方法:爲什麼我的變量取決於它們是數組還是整數?

var numbers = [60, 50, 20, 30]; 
var value = numbers.reverse(); 

console.log(numbers); // [30, 20, 50, 60] 
console.log(value); // [30, 20, 50, 60] 

什麼困惑我這是爲什麼變量「數字」的價值在這裏改變了嗎?

我很困惑,因爲同樣的將不是真實的位置:

var number = 3; 
var value = number * 2; 

console.log(number); // 3 
console.log(value); // 6 

我在我處理數組第一個例子中實現,並在第二隻整數。我不明白爲什麼在變量「value」上執行一個函數時變量「number」的值會被修改。但是在第二個例子中沒有修改它。這裏有什麼不同?

+1

'reverse()'改變數組 – kukkuz

+1

這裏的關鍵是每個規格的反轉操作就緒並返回對源數組的引用。雖然我覺得這是一個不幸的設計選擇,但其根源在於你有兩個引用一個數組對象的變量。 – PMV

回答

1

讓我困惑的是,爲什麼變數 「數字」的值在這裏改變了?

因爲變量numbers是對內存中的數組的引用,並且調用reverse時,它會修改此數組。

而在這裏,你在JS

+0

感謝@Maximus,這與Timo的回答相結合。現在一切都說得通了。謝謝。 – Fabian

+0

@Fabian,沒問題,如果你發現它有幫助,你可以upvote :) –

4

Array.prototype.reverse()與原語

var number = 3; 
var value = number * 2; 

和基本工作是一成不變的在當前位置倒轉數組,即它在修改過程中的原始數組。

從MDN:

reverse()方法代替反轉陣列。第一個數組元素 成爲最後一個,最後一個數組元素首先變成 。

var a = ['one', 'two', 'three']; 
a.reverse(); 

console.log(a); // ['three', 'two', 'one'] 

在第二種情況下,你正在做primitives一個簡單的計算。這不會更改計算中使用的基元。

相關問題