2012-11-21 58 views
1

這對我來說一直有點困惑,而我的編程術語不足以讓它適用於Google。甚至不知道標題是否合理。 舉例來說,如果我有像這樣的對象數組...引用javascript對象

var someObjects = [{type: 'apple'}, {type: 'orange'}, {type: 'banana'}];

......我說......

var theBestFruit = someObjects[2];

但後來我們增加另一個對象在開始時,換擋的所有元素...

someObjects.unshift({type: 'pear'});

w ^生病theBestFruit仍參考香蕉物體?或者現在是橙色的?一些解釋將不勝感激。

+0

我認爲當你添加新的對象添加到列表,以前的對象的地址並沒有改變。所以它應該仍然指香蕉物體。 –

+0

你可以用比起草問題花費的時間少的時間來測試它。 – canon

回答

2

theBestFruit = someObjects[2]將查找的結果是什麼第二個(或第三個,如果算上作爲一個非程序員:P)的someObject位置,(這是對象{type: 'banana'},並分配到theBestFruit直接引用這個對象。參考不是的someObjects第二個對象。因此,如果someObjects變化,theBestFruit仍將{type: 'banana'}

最好的方式來測試這將是...測試。

+0

感謝您解決這個問題。 pst的回答是同樣的信息,剛剛看到這一個。 – Austen

3

嗯..嘗試它?

提示:

someObject[2]表達熱切評價(讀:對象),然後將其結合(讀:分配給)的可變theBestFruit。除非theBestFruit被重新分配(讀取:綁定到別的東西),它將始終評估爲相同的對象(read:value)。

如果someObjects[2]以後評估其他東西 - 它不會影響在=(閱讀:作業)時確定的theBestFruit的綁定。

1
> var someObjects = [{type: 'apple'}, {type: 'orange'}, {type: 'banana'}]; 
undefined 
> var theBestFruit = someObjects[2]; 
undefined 
> someObjects.unshift({type: 'pear'}); 
4 
> someObjects 
[ { type: 'pear' }, 
    { type: 'apple' }, 
    { type: 'orange' }, 
    { type: 'banana' } ] 
> theBestFruit 
{ type: 'banana' } 
>