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

一道关于对象赋值的js面试题

一道关于对象赋值的js面试题

婷婷同学_ 2019-02-09 23:23:30
  var a = { n : 1};    var b = a;    a.x = a = {n:  2};    alert(a.x);    alert(b.x);           输出:undefined [object Object]请问:a.x = a = {n: 2}; 该句是如何赋值的?
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

其实这类问题很容易理解,只需要记得变量只是对象的引用,变量并不是对象本身。

  1. 取值的时候顺着变量找到对象;

  2. 赋值的时候则改变变量的指向。

所以

  1. 对于 var a = {n: 1},想象一个对象 {n: 1} 放地上,用 a 指着它;

  2. var b = a 就是 b 顺着 a 找到 {n: 1},两者同时指着它;

  3. a.x = a = {n:2} 左往右看,

    1. a.x 是对 a 取值,顺着 a 找到 {n: 1},再找到其 x 属性等待赋值,

    2. 第二个 a 本应是取值,但右边有 = 所以继续变成了赋值操作,a 指向 {n:2}

    3. a = {n:2} 返回 {n:2},给了等待赋值的 {n: 1}.x

  4. alert(a.x),顺着 a 找到 {n:2},因为在 3.2 中 a 改变了指向,而 {n: 2} 没有 x 属性;

  5. alert(b.x),顺着 b 找到 {n: 1}{n: 1}在 3.1 得到了 x,顺着 x 找到了 {n: 2}


查看完整回答
反对 回复 2019-02-12
  • 1 回答
  • 0 关注
  • 382 浏览
慕课专栏
更多

添加回答

举报

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