javascript中的传值和传址

javascript和其他编程语言一样,有三种方式可以操作一个数据值:

第一种是复制,也就是说你可以把一个数据值复制给另外一个变量,例如

var a = 1;

var a = b;

在上例中,就是把a的值复制给了b。

第二种是传递,也就是说你可以把一个数据值传递给一个函数或者方法,例如

var a = 1;

function changeValue(arg){

        return a +1;

}

 

changeValue(a);

第三种方式是比较,也就是说你可以比较两个值是否相等,例如

var a = 1,

var b = 2;

alert(a > b);

在javascript中,有两种不同的方式可以实现上面三种操作,传值和传址。

但一个数据通过传值进行操作的时候,在复制的过程中,复制的只是原始值的一份拷贝,把这份拷贝赋值给一个变量,对象的属性等,修改拷贝并不会影响到原始值,例如:

var a = 10;

var b =a;

b = 20;

alert(a);//10

alert(b);20

但把一个数值通过传值传递到一个函数或者方法中的时候,也是把原始值的一份拷贝传递到函数或者方法中,在函数或者方法中修改传递进来的值,也不会影响到原始值,例如:

var a = 10;

function changeValue(arg){

    arg = arg + 10;

}

changeValue(a);

alert(a);//10

当一个数值通过传值的方式比较的时候,比较的是两个独立的值(通常按字节逐未比较),以判断他们是否相等,例如

var a = 10;

var b = a;

alert(a == b);//true

b = 20;

alert(a == b)//false

当一个数值是通过传址的方式操作的时候,数值只有一份真实的拷贝,被操作的是对象的引用(地址),所复制,传递,比较的都是对象的地址,当把一个数值的应用赋值给一个新的变量的时候,所赋值的是这个数值的引用,原始值和新值都指向同一份引用,其中任何一个修改都会修改数值,例如:

var obj = new Object();

obj.color = "red";

var newObj = obj;

newObj.color = "blue";

alert(obj.color);//blue

当通过传址的方式把一个数值传递给一个函数或者方法的时候,所传递的是这个数值的引用(地址),如果函数中修改了数值,那么原始数值也会被修改,例如:

var obj = new Object();

obj.color =  "red";

function changeObj(newObj){

       newObj.color = "blue";

}

changeObj(obj);

alert(obj.color);//blue

当通过传址方式进行比较的时候,说比较的是两个引用,判读他们是否引用同一个数值,如果是则相等,例如:

var obj = new Object();

obj.color = "red";

var newObj = obj;

newObj.color = "blue";

alert(newObj == obj)//true

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值