之前对javascript数组赋值的错误理解。
var tArray=new Array(1,2,3,4,5,6)
var copy=tArray;
writeLine('tArray.length='+tArray.length)
writeLine('tArray='+tArray.join(','))
writeLine('')
writeLine('copy.length='+copy.length)
writeLine('copy='+copy.join(','))
writeLine('---------------------------------')
copy.length=0;
//原以为copy.length=0;只是改变了copy的值,没想到tArray也变了。
//tArray.length=0
writeLine('tArray.length='+tArray.length)
writeLine('tArray='+tArray.join(','))
writeLine('')
writeLine('copy.length='+copy.length)
writeLine('copy='+copy.join(','))
function writeLine(str){
document.write(str+'<br>');
}
===============================================
结果输出
tArray.length=6
tArray=1,2,3,4,5,6
copy.length=6
copy=1,2,3,4,5,6
---------------------------------
tArray.length=0
tArray=
copy.length=0
copy=
============================================
从上面的输入结果来看,
在copy.length=0; 的时候,不仅改变了copy的值,tArray的值也改变了,
如果此处换成 tArray.length=0 ,输出结果是一样的。
由此得出 var copy=tArray;tArray赋值给新的变量后,copy与tArray指向是同一个内存地址。
改变length的话,copy和tArray,2个变量的值都会改变。
谢谢各位路过的不吝赐教
[解决办法]
英雄 你不是已经分析完了吗?
[解决办法]
copy数组用 arr.slice()
[解决办法]
你这样给数组赋值 其实就相当于创建了一个指针 指向同一个内存
想copy一份的话 就用循环依次给数组的每一个元素赋值
[解决办法]
var copy=tArray;
这是对象赋值,按地址引用,传递的是地址。相当于对原对象起个别名。所以改变新名就等于改变原对象。
如果是var copy=tArray.length;
是对象下面的数据,则为值引用,传递的是实际的数据,相当于一个备份。改变时互不影响。
[解决办法]