var obj = { a: 1};obj.b = obj = { c: 2};console.log(obj.b);//undefinedobj.b 为何输出undefined ?
1 回答
holdtom
TA贡献1805条经验 获得超10个赞
其实这个东西这么解释会清楚点:
.
的优先级是高于=
的,所以整个等式先计算.
的运算
根据上面,所以整个等式第一步是先添加一个b
的地址,等式大概变成这个样子[obj.b的地址]=obj={c:2}
=
是从右向左运算的,而且是把=
号右边的那个赋值给左边的
所以,变形后的等式运算时分为两步obj={c:2}
,然后[obj.b的地址]=obj
。
由于第一步的时候,obj
已经指向新的地址,所以和[obj.b的地址]
中的obj
已经不是同一个。
所以,第二步的时候,[obj.b的地址]=obj
是把新的obj
赋值给原本obj.b的地址。
所以才会出现obj
输出{c:2}
的情况。
更清晰一点,看看一个代码:
var obj = {
a: 1
};
var obj2 = obj;
obj.b = obj = {
c: 2
};
console.log(obj); // {c:2}
console.log(obj2); // { a:1, b:obj }
添加回答
举报
0/150
提交
取消