javascript变量重新赋值的问题?

JavaScript011

javascript变量重新赋值的问题?,第1张

重新赋值前后的字符串长度不一定相等,比如"abc"是三个字节的空间,而"defg"是四个字节的空间,如果直接修改原空间的内容肯定是不可能的(因为"abc"之后很可能存放的是其他变量的内容,你拿四个字节的内容去覆盖它,就可能会影响到其他变量了,这个问题是很严重的!),因此肯定是新开辟空间来存放重新赋值的变量内容(即使长度没变)。

这点也同样适用于数字类的数据内容,JavaScript是弱类型语言,变量在赋值前是没有类型的,赋值后才会根据内容来自动确定类型。比如 var x = 500 会自动按两个字节的整型来分配空间,而 x = 80000 这时候两个字节就不够用了,必须重新分配4个字节来存放,变量x也会自动变为长整型变量。

这是因为把一个数组直接赋值给一个变量,所赋值的只是数组的指针(或者说内存地址),两者实际上仍然是同一个数组(或者说同一个对象),改变其中一个的顺序,另一个的顺序也会跟着改变。就好比同一个人有两个不同号码的身份证一样,用不同的身份证不等于这个人就变成另一个人!

如果你希望赋值后的数组(比如t)是原数组(比如arr)的复制品(或者说克隆体)而不是同一个,就应该新建一个空数组,然后把原数组的每个元素逐个复制到新数组中,而不能够想当然地用等于号直接赋值!