javascript 引用值-了解 JavaScript 中的按值传递和按引用传递

了解 JavaScript 中的按值传递和按引用传递

1. 传值(按值)

变量的值被复制出来,会和原来的值无关,也就是说,虽然新的值改变了,但原来的值不会改变。 在 JavaScript 中,基本类型是按值传递的。

复制代码代码如下:

函数 testPassValue()

变量m=1;

变量n=2;

// 复制m和n的值并将它们传递给passValue

passValue(m,n);

警报(米); //将是原始值

函数 passValue(a,b)

a=a+b; //改变a的值,其中a只是原始值的副本

警报(一);

输出结果:

2. 参考。

引用本身的副本被传递给函数javascript 引用值,而引用所指向的对象并没有被复制传递(java中也是如此)。 在函数中,如果对象的属性值发生改变,由于原来的引用指向同一个对象,因此会通过原来的引用来访问改变后的值;

但如果在函数上只将引用指向一个新对象,则原对象的值不会改变,只会改变复制的引用。

复制代码代码如下:

函数 testPassValue()

var date = new Date(2006,02,27);

警报(日期.getDate()); //输出为27

// 复制日期引用本身并将其传递给 passReference。 注意date指向的对象还没有被复制

通过参考(日期);

警报(日期.getDate()); //输出为12

//同上

更改参考(日期);

警报(日期.getDate()); //输出仍然是12

函数 passReference(da)

//因为da和原引用指向同一个对象,在函数外javascript 引用值,通过原引用访问到的将是该对象的'date属性的值,也就是改变后的值。

达。 设置日期(12);

函数changeReference(da)

//此时da引用实际上是原始引用的副本,并且引用本身会被重新参数化,不会影响原始引用

da= 新日期(2007,05,11);

// 将da引用指向一个新的对象,此时原来的引用仍然指向原来的对象

警报(da.getDate()); //输出为11

3 特殊字符串

在 JavaScript 中,String 也是通过引用传递的。 js中只有charAt方法,但没有对应的change方法,这和java中的String一样,都具有不变性。

复制代码代码如下:

var s1 = "你好";

var s2 = "地狱" + "o";

如果(s1==s2)

警报(“s1 = s2”); //这句话会被执行吗? 熟悉java的人可能会认为不会被执行(我对这句话相当挑剔,在java中会执行!),因为在java中==比较的是同一性。 其实在js中,String==是比较值是否相等,所以才会执行这句话。 但对于其他 Object == 比较与 java 中相同。

【JavaScript中传值和传引用的理解】相关文章:

1.

2.

3.

4、Java模式(函数)传值和传引用的问题

5.

6.

7.

8.