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
    ---
    原理如图:

猜你喜欢

转载自www.cnblogs.com/hanqingtao/p/9083891.html
今日推荐