javascript - 关于一道面试题的疑惑?

查看:64
本文介绍了javascript - 关于一道面试题的疑惑?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var obj = {
    a: 1
};
obj.b = obj = {
    c: 2
};
console.log(obj.b);//undefined

obj.b 为何输出undefined ?

解决方案

其实这个东西这么解释会清楚点:

.的优先级是高于=的,所以整个等式先计算.的运算

根据上面,所以整个等式第一步是先添加一个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 }

这篇关于javascript - 关于一道面试题的疑惑?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆