传值与传址
来源:互联网 发布:免费网络验证 编辑:程序博客网 时间: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中可以直接通过“==”进行值比较
固定数目的字节组成,因此适用传值操作;而对象,包括数组和函数,他们的大小无法固定,可能会变得很大,如果用传值操作,可能会牵涉到对大量的内存低效率的复制和比较,效率低没有什么意义,因此适用传址操作,用代码实例说话:
传值:
<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的值也改变了;
=》传址操作
而javaScript中的字符串是一个特例,它是通过传址来复制和传递的,通过传值来进行比较的。
原因:首先,为什么说字符串是传址的呢?很明显,字符串的长度不定,它可以是任意长度,而且它不是对象,没有方法去修改字符串的内容;接下来,为什么说字符串是传值的呢?在java、C和C++中,字符串不可以用“==”进行比较,而在javaScript中可以直接通过“==”进行值比较
0 0
- 传值与传址
- 传值与传址
- 传值与传址
- 传值与传址
- 传值与传址
- 传值与传址
- 传值与传址的区别与优缺点
- 函数的传值与传址
- 函数的传值与传址
- 传值调用与传址调用
- javascript传值与传址
- javascript中的传值与传址
- 传值与传址(续)
- 函数传值与传址
- 函数的传值与传址
- C# 传值与传址
- java传值与传址
- 传值与传址调用
- javaScript笔记(1)
- javaScript笔记(2)
- javascript笔记(3)
- (续一)javaScript笔记(3)
- valueOf()的用法
- 传值与传址
- javaScript变量的作用域
- javaScript中in运算符详解
- Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案
- #ifndef#define#endif的用法【转载…
- C语言中是没有字符串数组的,用C语…
- c语言宏定义
- 往右键里添加编辑软件快捷方式
- msn无法查看历史聊天记录解决方法