传值与传址

来源:互联网 发布:免费网络验证 编辑:程序博客网 时间:2024/04/29 19:50
我的理解,在javaScript中,简单的说来,传值是通过建立实际值的拷贝来进行各种操作,而传址是在各种操作中,传递的是实际值的地址,实际值在操作过程中直接被改变的。在javaScript中,数字和布尔类型是由很小的
固定数目的字节组成,因此适用传值操作;而对象,包括数组和函数,他们的大小无法固定,可能会变得很大,如果用传值操作,可能会牵涉到对大量的内存低效率的复制和比较,效率低没有什么意义,因此适用传址操作,用代码实例说话:
传值:
<script>
var n = 1;
var m = n;
m = m+2;
document.write("value of m is"+m+"<br>");
document.write("value of n is"+n+"<br>")
</script>
结果显示:

value of n is 1
n的值并没有随m的值的变化而变化,说明m只是建立了n的数值拷贝,传值操作。

传址:
<script>
var today = new Date(2008,11,10);
var tomorrow = today;
tomorrow.setDate(11);
document.write("tomorrow is "+tomorrow);
document.write("<br>today is"+today);
var today = new Date(2008,11,21);
var tomorrow = new Date(2008,11,21);
if(today != tomorrow){
document.write("<br>today 不等于tomorrow");
}
</script>
结果显示:
tomorrow is Thu Dec 11 2008 00:00:00 GMT+0800
today is Thu Dec 11 2008 00:00:00 GMT+0800
today 不等于 tomorrow
结果很明显,修改tomorrow的值以后,today的值也改变了;
           同时建立了两个相同值date对象,他们却不相同;
=》传址操作
而javaScript中的字符串是一个特例,它是通过传址来复制和传递的,通过传值来进行比较的。
原因:首先,为什么说字符串是传址的呢?很明显,字符串的长度不定,它可以是任意长度,而且它不是对象,没有方法去修改字符串的内容;接下来,为什么说字符串是传值的呢?在java、C和C++中,字符串不可以用“==”进行比较,而在javaScript中可以直接通过“==”进行值比较
0 0
原创粉丝点击