2013-08-23 129 views
4

在那裏,就這樣發生了一件奇怪的事..JavaScript變量初始化

通常我給你我的全局變量是這樣的:

orders = []; 
pOrders = []; 

但我很懶惰,只是寫道:

orders = pOrders = []; 

它應該是相同的,不應該嗎?

顯然不是因爲數組pOrder還包含數組orders數據。我坐了15分鐘尋找我的代碼中的錯誤,但找不到任何,所以我只是試着寫變量,因爲我通常會和它的工作。爲什麼會發生?

在PHP中,邏輯將是相同的,但JavaScript看起來行爲不同。

請任何人都可以給我提供一些信息或知識..

+1

請注意,Java和JavaScript是完全不同的語言。 – Pointy

+0

謝謝,我意識到這一旦發生,我的問題是,爲什麼在PHP中它是不同的? PHP將分配每個數組作爲一個空白數組,而不是引用第一個與第二個... – Jacques

+0

@Jacques由PHP的製造商設計的決定。他們希望他們的變量初始化能夠像那樣工作。 – Renan

回答

7

在第二個例子中,你明確地分配完全相同的數組實例,以兩個獨立的變量。只涉及一個陣列,而在第一個案例中有兩個陣列。

我會有些驚訝地發現,PHP真的會把這兩段代碼看作是同一件事。

+0

謝謝,我意識到這一旦發生,我的問題是,爲什麼在PHP是不同的? PHP會將每個數組分配給一個空數組,並且不會引用第一個數組和第二個數組...... – Jacques

+0

那麼PHP真的可以這樣工作嗎?哇。 – Pointy

5

你寫有最後那個代碼是一樣的:

orders = []; 
pOrders = orders; 

所以,現在你有兩個變量,它們是同一個數組引用。這就是爲什麼你正在經歷這種行爲。

當,而不是你做的,你在你的第一個例子:

orders = []; 
pOrders = []; 

然後你有兩個完全獨立的和不同的陣列。

2

您分配了兩個變量來引用相同的數組實例。

1

要看看大家是指「同一陣列實例」,在瀏覽器中運行以下JavaScript:

orders = pOrders = []; 
orders.push("hello"); 
pOrders.push("world"); 
console.log(orders); 
console.log(pOrders); 

檢查控制檯輸出,兩個消息都會說[「你好」,「世界」。