Javascript变量声明问题

Javascript变量声明问题,javascript,Javascript,我不明白的是javascript为什么要这么做。在我看来,如果在全局声明期间将它们设置为相等一次,它们以后将不会重新相等(并且向后执行。我从未将StarsX设置为等于StarsmX) 我很确定这意味着我不了解Javascript的一些基本功能,这让我很担心 有人能帮忙吗?它没有向变量添加任何内容。它正在添加到数组中,并且两个变量都引用同一个数组对象 这是因为在JavaScript中,您只能持有对对象的引用,而不是对象本身。因此,对数组的引用是要复制的值,而不是数组 如果需要阵列的浅克隆,请使用s

我不明白的是javascript为什么要这么做。在我看来,如果在全局声明期间将它们设置为相等一次,它们以后将不会重新相等(并且向后执行。我从未将StarsX设置为等于StarsmX)

我很确定这意味着我不了解Javascript的一些基本功能,这让我很担心


有人能帮忙吗?

它没有向变量添加任何内容。它正在添加到数组中,并且两个变量都引用同一个数组对象

这是因为在JavaScript中,您只能持有对对象的引用,而不是对象本身。因此,对数组的引用是要复制的值,而不是数组

如果需要阵列的浅克隆,请使用
slice()


或者按照您所说的操作,创建空数组。

它没有向变量添加任何内容。它正在添加到数组中,并且两个变量都引用同一个数组对象

这是因为在JavaScript中,您只能持有对对象的引用,而不是对象本身。因此,对数组的引用是要复制的值,而不是数组

如果需要阵列的浅克隆,请使用
slice()


或者按照你说的做,创建空数组。

你的意思是,基本上,我说的是“starsm”现在是一个包含数组“stars”的变量?我的意图是创建一个名为“Starsm”(etc)的新数组,该数组克隆了原始数组。@user1120353:是
var Starsm=Stars
复制由
Stars
持有的对象引用,因此它们最终都指向同一数组对象。要(浅)克隆原始阵列对象,可以使用
.slice()
。谢谢。出于某种原因,我甚至没有想到我能做到这一点。感谢您的及时帮助。您的意思是,基本上,我所做的是说“starsm”现在是一个包含数组“stars”的变量?我的意图是创建一个名为“Starsm”(etc)的新数组,该数组克隆了原始数组。@user1120353:是
var Starsm=Stars
复制由
Stars
持有的对象引用,因此它们最终都指向同一数组对象。要(浅)克隆原始阵列对象,可以使用
.slice()
。谢谢。出于某种原因,我甚至没有想到我能做到这一点。感谢您的及时帮助。顺便说一句:创建数组时,首选语法是
[]
而不是
new array()
(更短,更易于阅读,避免了调用
new array(5)
创建包含五个元素的数组而不是一个值为5的元素时出现的问题)。因此
var Stars=[1,2,3,4,5,6,7,8,9,10]
var Starsm=[]确定。我回头再换。我基本上是在谷歌上学习Javascript。。。最佳实践并不总是清晰的。您可能想看看MDN:。还有一个谷歌提示:如果你想了解一些JavaScript关键字或函数,在谷歌搜索词的末尾添加“mdn”或“mdc”,例如,“array mdn”-这将使关于该关键字/函数的mdn页面位于搜索结果的顶部-你通常甚至不需要“JavaScript”这个词。顺便提一下:在创建数组时,首选语法是
[]
而不是
新数组()
(更短,更易于阅读,避免了调用
新数组(5)
创建一个包含五个元素的数组而不是一个值为5的元素的问题)。因此
var Stars=[1,2,3,4,5,6,7,8,9,10]
var Starsm=[]确定。我回头再换。我基本上是在谷歌上学习Javascript。。。最佳实践并不总是清晰的。您可能想看看MDN:。此外,谷歌提示:如果你想了解一些JavaScript关键字或函数,在谷歌搜索词的末尾添加“mdn”或“mdc”,例如,“array mdn”-这将使关于该关键字/函数的mdn页面位于搜索结果的顶部-你通常甚至不需要“JavaScript”这个词。
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);
var Starsm = new Array()
var StarsmX = new Array()
var StarsmY = new Array()
var Starsm = Stars.slice()
var StarsmX = StarsX.slice()
var StarsmY = StarsY.slice()