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