JavaScript值传递与引用传递

@[JavaScript值传递与引用传递]
我们都知道关于我们一直使用的js变量会包含两种不同类型的值,他们分别是基本类型和引用类型,本文意在让大家通过以下的描述与我个人的见解对变量的这两种类型有跟家深入的理解以及在使用中去辨别它们。
提前申明一点,关于浅拷贝和深拷贝只是针对于Object和Array这样复杂的对象,千万不要说一个基本数据类型的复制会是浅拷贝和深拷贝的话题;
1、基本类型值
(1)基本类型值就是一段简单的数据段;
(2)基本数据类型有:Undefined, Null,Boolean,Number,String五种;
(3)以上的五种基本数据类型是按值访问的,但有趣的是我们强大的ECMAScript为我们还提供了三种基本包装类型,我们先来讨论基本类型,下面我会在介绍完引用类型后为大家介绍基本包装类型;
上面提到了我们的基本数据类型有五种,这五种基本数据类型是按照值访问的,因为我们可以操作保存在变量中实际的值;比如我们创建一个变量并为其赋值;var a = 2;
(4)复制一个基本类型值:会在变量对象上创建一个新的值,然后将该值复制到新变量分配的位置上去:
例如:var numberOne = 1;
var numberTow = numberOne ;
以上这段代码一开始在变量numberOne中保存了一个数字1,当我们用numberOne去初始化numberTow时,numberTow这个变量也保存了一个数字1,但是numberTow中的1与numberOne中的1是完全独立的,这个值只是numberOne中1的一个副本;这两个变量无论各自参与什么样的操作都不会互相影响;

2、引用类型值
(1)引用类型值指哪些可能构成多个值构成的对象;
(2)定义引用类型的值和定义基本类型值的方法类似,同样是定义一个变量并为这个变量赋值,但是,当这个值保存到变量中后,我们可以为这个变量添加属性和方法,也可以删除它的属性和方法,例如:
var csdn = new Object();
csdn.name = ‘知识共享的平台’;
console.log(csdn.name); // '知识共享的平台’;
我们通过new Object创建了一个对象并将它保存在了变量csdn中,然后我们为它添加了一名为name的属性,如果这个属性不删除将一直存在;
(3)复制一个引用类型的值是很危险的,因为当我们想要复制一个对象从而去调用这个对象中的方法和属性时,如果我们在新创建的对象中改变了对象中的属性和方法,那么之前的对象也会随之改变,这种现象就是浅拷贝;例如:
var ljm1 = new Object;
ljm2 = ljm1(虽然没有用到var来声明ljm2但是window中会默认添加一个全局变量ljm2,不推荐这种写法!!!!)
ljm1.name = ‘第一个对象’;
ljm2.name = ‘第二个对象’;
console.log(ljm1.name) // ‘第二个对象’;
没错,我们虽然只是想用ljm1来初始化一个对象ljm2,但是当ljm2中的name属性改变时,ljm1中的属性name也随之变化了;因为当我们用ljm1来初始化ljm2时,他们都指向了同一个对象;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值