2012-11-21 61 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' } 
>