我不确定搜索答案的术语。给出:
this.snake = [{x: 0, y: 0}];
var curhead = this.snake[0];
curhead
是否包含snake[0]
字典(?)的副本或直接引用它?
答案 0 :(得分:4)
JavaScript始终按值复制。
JavaScript中的对象(包括数组)只能通过引用访问。 (即foo = []
生成一个数组并将其引用分配给foo
)。
因此,您将获得数组中第一个值的副本,该副本是对象的引用。
这与对数组中第一个值的引用不同。
假设:
var array = [ { value: 1 } ];
var reference = array[0];
array.unshift( { value: 2 } );
如果reference
是对数组中第一个值的引用,那么通过更改第一个值,它将指向具有value : 2
的对象。
由于它是值的副本,因此它继续是value : 1
对象的引用(现在是数组中的第二个值)。
答案 1 :(得分:0)
在您提供的示例中,curhead
将包含引用到数组snake
中的第一项
答案 2 :(得分:0)
它是一个只有一个元素的对象数组。所以
this.snake[0]
将包含对{x:0,y:0}的引用。
伞兵
答案 3 :(得分:-1)
现在curHead
和snake[0]
指的是完全相同的内存位置。尝试更改curHead
中的值,它也将更改snake[0]
curhead.x = 1
console.log(curhead)
//Object {x: 1, y: 0}
console.log(this.snake)
//[{x: 1, y: 0}]
当您尝试将全新对象分配给curhead
时会发生有趣的事情,比方说curhead = 'hi'
。然后javaScript将为curhead
创建一个新的堆空间,this.snake
将保持其值{x: 1, y: 0}
不变