JavaScript中的传值与传引用

简介: JavaScript中的传值与传引用

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中一样是同一性.

目录
相关文章
|
6月前
|
JavaScript 索引
用原生js的postMessage实现iframe传值,也可以用于跨域嵌套iframe传值
用原生js的postMessage实现iframe传值,也可以用于跨域嵌套iframe传值
用原生js的postMessage实现iframe传值,也可以用于跨域嵌套iframe传值
|
6月前
|
JavaScript 前端开发
js中父子元素如何传值
js中父子元素如何传值
69 0
|
移动开发 小程序 JavaScript
微信小程序学习实录7(H5嵌入小程序、获取微信收货地址、数组对象url传值、js获取url参数)
微信小程序学习实录7(H5嵌入小程序、获取微信收货地址、数组对象url传值、js获取url参数)
328 0
|
JavaScript Java
JS实现页面跳转并传值
JS实现页面跳转并传值
|
JavaScript
[JS ES6]传值和传址
[JS ES6]传值和传址
64 0
[JS ES6]传值和传址
|
JavaScript
vue.js 兄弟组件传值
vue.js 兄弟组件传值
|
JavaScript 前端开发
【Vue.js 入门与实战】--组件传值-父组件向子组件传值和data与props的区别
vm 实例也可以看成一个大的组件 ,因为也有自己的控制区域与 date。同时实例也可以看到是一个组件。
【Vue.js 入门与实战】--组件传值-父组件向子组件传值和data与props的区别
|
Web App开发 JavaScript 前端开发
Android中WebView加载本地Html,与JavaScript与Android方法相互传值(续)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51809558 ...
1043 0