var yideng = {
n:1
};
yideng.x=yideng={
n:2
};
console.log(yideng.x)
//undefined
//注意运算符的优先级
//yideng.x=yideng={n:2}这里非常特殊,因为“.“的优先级要高于”=“
//所以这里的顺序就是
//1.先创建了一个x属性,值为undefined,挂在yideng下面
//2.yideng的指向被改变,指向了{n:2}
//3.刚才创建的x属性被赋值为{n:2}
//4.此时yideng的指向已经被改变了,不再指向原有的对象,所以这里的yideng.x指向后来的对象,
//5.后来的对象里面只有{n:2}
//6.所以x属性是undefined
//下面就来验证一下我们的想法(object是引用类型,是利用指针来指向堆里面的数据的)
var yideng = {
n:1
};
var yideng1 = yideng;//yideng1和yideng都指向n:1这里
yideng.x = yideng = {
n:2
};
console.log(yideng.x)//undefined
console.log(yideng1.x)//2
对于引用类型的复制,只是指针的复制,我们看看红宝书里面是怎么说的