为了账号安全,请及时绑定邮箱和手机立即绑定

关于一道面试题的疑惑?

关于一道面试题的疑惑?

猛跑小猪 2018-10-18 18:10:18
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 }


查看完整回答
反对 回复 2018-11-18
  • 1 回答
  • 0 关注
  • 468 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信