javascript中什么是传值赋值,什么是传址赋值

在Javascript中,赋值语句会用传值和传址两种不同的方式进行赋值。

如果是数值型,布尔型,字符型等基本数据类型,在进行赋值时会将数据复制一份,将复制的数据进行赋值,也就是通常所说的传值;

如果是数组,hash对象等复杂数据类型,在进行赋值时会直接用内存地址赋值,而不是将数据简单的复制一份,用内存地址进行赋值,就是传址。

var a=b=10;
var d=c=[1,2,3];
b
++;
d.push(
4);
alert(a);
//10
alert(b);//11 变量b保存的数据更改不会影响到变量a
alert(c);//1,2,3,4 变量c和d指向同一份数据,数据更改会互相影响
alert(d);//1,2,3,4

如何阻止传址的发生?最简单的做法是遍历数组或hash对象,将数组或hash对象这种复杂的数据类型拆分成基本的数据类型,然后分别进行赋值。

如:

var d=[1,2,3];
//把数组中的所有元素都复制到b中
//
把数组中的所有元素都复制到c中
var b=d.slice(),c=d.concat();
//移除数组中的最后一个元素并返回该元素
b.pop();
alert(b);
//1,2
c.push(4);
alert(c);
//1,2,3,4
alert(d);//1,2,3

posted @ 2011-05-07 11:43  郭培  阅读(654)  评论(0编辑  收藏  举报