JavaScript中的传值与传引用
来源:互联网 发布:js电话号码正则表达式 编辑:程序博客网 时间:2024/04/28 13:03
熟悉C++的程序员如果入手JavaScript的话,会遇到传值与传引用的问题,这篇文章较为简练的讲述了在编程方面JavaScript的传值与传引用的区别。
引自:http://www.blogjava.net/magicdoom/archive/2006/02/27/32555.html
1.传值(by value)
变量的值被复制出一份,与原来的值将不相干,也就是说即使新的值被修改,原来的值也不会改变,在JavaScript中基本类型都是传值的.
function testPassValue()
{
var m=1;
var n=2;
//将m,n的值复制一份,传递到passValue
passValue(m,n);
alert(m); //将是原有的值
}
function passValue(a,b)
{
a = a+b; //改变a的值,这里a只是原有值的一份copy
alert(a);
}
输出结果:
3
1
2.传引用(by reference).
引用本身复制一份传给function,引用指向的对象并没有被复制传递(java中也是如此),在function中,如果改变了对象的属性的值,由于和原来的引用指向的是同一个对象,因此在通过原来的引用访问到的将是修改过的值;
但是如果只是在function中将引用指向一个新的对象,将不会改变原对象的值,改变的只是复制的这一份引用.
function testPassValue()
{
var date = new Date(2006,02,27);
alert(date.getDate()); //输出为 27
//将date引用本身复制一份,传递到passReference,注意date所指向的对象并没有被复制
passReference(date);
alert(date.getDate()); //输出为12
//同上
changeReference(date);
alert(date.getDate()); //输出还为12
}
function passReference(da)
{
//由于da和原引用指向的是同一个对象,在function外,通过原有的引用访问到的将是对象的日期属性值,将是修改之后的值.
da.setDate(12);
}
function changeReference(da)
{
//此时da引用实际上是原引用的一份copy,将引用本身重新赋值,将不会影响原引用
da= new Date(2007,05,11);
//将da引用指向一个新的对象,此时原引用指向的还是原来的对象
alert(da.getDate()); // 输出为11
}
3 特殊的String
在JavaScript中,String也传引用的. js中只有charAt方法,而没有对应的修改方法,和java中的String相同,都具有不变性.
var s1 = "hello";
var s2 = "hell" + "o";
if (s1 == s2)
alert("s1 = s2"); //这句会不会执行? java用的熟的人可能会认为不会执行,因为java中的==比较的是同一性. 事实上在js中对String==比较的是值是否相等,所以这句话会执行. 但是对其他的Object == 比较和java中一样是同一性.
- JavaScript中的传值与传引用
- JavaScript中的传值与传引用
- JavaScript中的传值与传引用
- JavaScript中的传值与传引用
- JavaScript中的原始值与引用
- JavaScript中的值类型与引用类型
- JavaScript中的值类型与引用类型
- JAVA中的传值与传引用
- 关于c#中的传值与引用
- javascript 中的引用类型和值类型,复制与拷贝
- Javascript中的按值传递与引用传递
- JavaScript中的基本类型与引用类型
- Java中的传值与传引用(转摘)
- Java中的传值与传引用之我见
- java中的经典问题:传值与传引用
- Javascript值拷贝与引用
- javascript中的传值与传址
- 传值与引用
- 图片幻灯片效果
- 蜗居台词,蜗居经典台词
- Ubuntu9.10 成功安装 ns-2.34
- QT版本的一些介绍
- 图片幻切换效果
- JavaScript中的传值与传引用
- 《面向对象的艺术》之.NET 4.0中数组的新增功能
- XBRL Formula功能将更强大,也将更复杂!
- day4
- 字符排序
- 新华网-”法国《观点》杂志年终号推出中国特刊“的读后感
- pku2367 Genealogical tree
- QQ在线实现代码
- 利用CommandArgument 属性获取 datalist的中 控件数据绑定