传值与传址

我的理解,在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值