JavaScript对象的指向问题

JavaScript对象的指向问题

标签(空格分隔): JavaScript 对象


在接触了JavaScript之后,我们常听到一句话就是一切皆对象,意思是说除了object以外,JavaScript中的字符串,数字,true,false,undefined,null,NaN,hash等等都是对象。
对象是可变的,意思是说我们通过引用而不是一个值来操作对象,下面用一段代码来看这个问题:

var x={a:1};//这里声明一个对象X,里面包含属性a,它的值为1
var y=x;//这里声明一个变量y,他的值等于x
y.a=2;//将y中属性a的值更改为2
console.log(x.a)//打印对象x中属性a=值

通过上面的例子我们不难在控制台中得到结果为数字2,我们明明更改的是对象y的属性,为什么对象x也发生了变化呢?

  1. 声明变量x时,JavaScript解释器随机分配了一个内存地址给它,假设为(0X90901)
  2. 生成的内存地址又指向了真正存储在内存中的对象{a:1}
  3. 当声明变量y的时候这个由于语句y=x,所以将y指向了同一个内存地址0X90901
  4. 执行y.a=2语句时,查找y在内存中的属性a,我们知道y的地址指向0X90901,所以顺着地址指向修改了对象{a:1}中属性a的值
  5. console.log(x.a)由于属性a的值发生了更改,但是变量x指向的地址没有变化,所以打印x.a的值为2

原理如图:

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落雨、离秋

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值