var Stars = new Array(1,2,3,4,5,6,7,8,9,10);
var StarsX = new Array(451,455,460,470,490,100,160,220,280,300);
var StarsY = new Array(451,455,460,470,490,480,390,330,200,120);
var Starsm = Stars
var StarsmX = StarsX
var StarsmY = StarsY
//just shows the output of the variables in a text field
function contpost(){Tfield.innerHTML=Stars + "<br/>" + StarsX + "<br/>" + StarsY + "<br/>" + Starsm + "<br/>" + StarsmX + "<br/>" + StarsmY;}
//cycles through the "for" loop and posts the variables
function newpost(){
for (var i=0;i<Stars.length;i++){
StarsmX[i] = StarsX[i] + 10;
StarsmY[i] = StarsY[i] + 10;
}
contpost()
}
var Tfield= (This is the text field)
var canv_one= (This is a canvas in my document)
canv_one.addEventListener('click', newpost);
如果我运行此代码(Firefox 9),if / then循环将“mX”变量和“X”变量都加10。
我现在知道它是如何做到的。这只是因为我在早期将它们设置为平等。当我在声明中替换它时,它可以正常工作:
var Starsm = new Array()
var StarsmX = new Array()
var StarsmY = new Array()
我不明白为什么javascript正在这样做。对我来说,如果你将它们设置为相等一次,在全局声明期间,它们将不会在以后重新等同(并向后执行它。我从未将StarsX设置为StarsmX。)
我很确定这意味着我不理解Javascript的某些基本功能,这让我很担心。
有人可以帮忙吗?
答案 0 :(得分:4)
它没有向变量添加任何内容。它将添加到Array中,并且两个变量都引用相同的Array对象。
这是因为在JavaScript中,您只能将引用保存到对象,而不是对象本身。因此,对Array的引用是要复制的值,而不是Array。
如果您想要数组的浅层克隆,请使用slice()
。
var Starsm = Stars.slice()
var StarsmX = StarsX.slice()
var StarsmY = StarsY.slice()
或者就像你说的那样做,并创建空数组。