zoukankan      html  css  js  c++  java
  • 对象的引用和赋值

    var a = {n: 1}; 
    var b = a;
    a.x = a = {n: 2};
    console.log(a.x); //undefined 
    console.log(b.x) ; //{n:1,x:n:2}
    

      var a = {n: 1}    // 定义变量 a 为一个新对象,且这个新对象有一个值为 1 的 n 成员

      var b = a;        // 定义变量 b ,并且让b也引用变量a的对象

                      // 经过上面这两句之后,变量 a 和 b 都引用了对象 {n:1}
    // 下面这句是问题的关键
    a.x = a = {n: 2}
    // a.x = 表示要给 a 引用的那个对象 {n:1} 的 x 成员赋值
    // 实际上,此时变量 b 也引用了这个对象 {n:1}
    // 此时,JavaScript引擎首先给 {n:1} 添加一个空的 x 成员,即:{n:1,x:undefined}
    // 接下来要给{n:1,x:undefined}.x 赋的是什么值呢?
    // 要赋的值是 a = {n: 2}
    // 也就是先让变量 a 引用一个新的对象 {n:2}
    // 然后再把 a 的新值赋给 {n:1,x:undefined}.x
    // 所以原来的那个对象变成了 {n:1,x:{n:2}}
    // 由于变量 b 始终引用那个原来的对象,所以 b 的值是 {n:1,x:{n:2}}
    // 由于变量 a 被赋予了一个新的对象,所以 a 的值是 {n:2}
     
    // 这面这两句是控制台输出
    console.log(a.x);    // 变量 a 引用的对象是 {n:2},没有 x 成员,所以输出 undefined
    console.log(b.x);    // 变量 b 引用的对象是 {n:1,x:{n:2}},所以输出 {n:2}
  • 相关阅读:
    Linxu指令--date,cal
    Linux指令--diff
    Linux指令--ln
    Linux指令--rcp,scp
    Linux指令--telnet
    Linux指令--traceroute,netstat,ss
    Linux指令--ping
    Linux指令--route
    Linux指令--ifconfig
    Linux指令--性能监控和优化命令相关指令
  • 原文地址:https://www.cnblogs.com/hefy1108/p/6419258.html
Copyright © 2011-2022 走看看