这对我来说总是有点混乱,我的编程术语不足以谷歌。甚至不确定标题是否有意义。 例如,如果我有一个像这样的对象数组......
var someObjects = [{type: 'apple'}, {type: 'orange'}, {type: 'banana'}];
......我说那个......
var theBestFruit = someObjects[2];
然后我们在开头添加另一个对象,移动所有元素......
someObjects.unshift({type: 'pear'});
theBestFruit
还会引用香蕉对象吗?或者它现在是橘子?一些解释将非常感激。
答案 0 :(得分:3)
嗯..试试吧?
提示:
someObject[2]
表达式 急切地评估到值(读取:对象),然后绑定< / em>(读取:分配给)变量 theBestFruit
。除非重新分配theBestFruit
(读取:绑定到其他内容),否则它将始终评估为相同的对象(读取:值)。
someObjects[2]
以后评估其他内容并不重要 - 它不会影响theBestFruit
时=
的绑定(读取:赋值)
答案 1 :(得分:2)
theBestFruit = someObjects[2]
将查找someObject
的第二个(或第三个,如果算作非程序员:p)位置(对象{type: 'banana'}
,并将此对象的直接引用分配给theBestFruit
。引用不是someObjects
的第二个对象。因此,如果someObjects
发生更改,theBestFruit
仍将是{{} 1}}。
测试它的最佳方法是......测试它。
答案 2 :(得分: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' }
>