做网站的用处,上海好的网站制作公司,电子商务网站建设员,下载 asp 网站源码var a {n:1}; var b a; a {n:2}; a.x a ;console.log(a.x);console.log(b.x); var a {n:1}; var b a; a.x a {n:2}; console.log(a.x);console.log(b.x); 这两个问题主要理解两点就很简单了。 对象是引用类型#xff0c;改变赋值只是改变指针的引用。运算符相当于改变…var a {n:1}; var b a; a {n:2}; a.x a ;console.log(a.x);console.log(b.x); var a {n:1}; var b a; a.x a {n:2}; console.log(a.x);console.log(b.x); 这两个问题主要理解两点就很简单了。 对象是引用类型改变赋值只是改变指针的引用。运算符相当于改变指针的指向。运算符的优先级。. 。 即在a.x a {n:2};中先给对象a添加x属性再进行a{n:2}与a.x{n:2}两个赋值操作。问题1// 变量a 指针指向对象 {n:1}var a {n:1}; // 变量b 指针指向对象 {n:1}var b a; // 变量b指针不变仍指向{n:1}; 变量a指针改为指向对象 {n:2}a {n:2}; // 注意运算符的优先级。先给对象a增加x属性再给x属性赋值。此时x属性的值指向a对象自身。即a {n:2,x:a} a.x a ; console.log(a.x); // {n:2,x:a} // 由于b指针没变还是指向{n:1} 故b.x: undefinedconsole.log(b.x); 问题2var a {n:1};// b与a的指针均指向 {n:1} var b a; // 注意运算符优先级. // 先给a添加x属性。故添加x属性后a指向的对象{n:1}变为{n:1, x:undefined/待赋值}, 由于b是和a指向的同一个对象所以此时b{n:1, x:undefined/待赋值}// 赋值操作从右往左进行。 a {n:2}, a的指针由指向{n:1,x:{n:2} 变为指向对象 {n:2}// 然后再进行赋值操作。a.x {n:2} 故x属性的值为{n:2}由于b是和a指向的同一个对象此时ab{n:1,x:{n:2}a.x a {n:2}; // 此时a{n:2}, 故a.x为undefinedconsole.log(a.x); // b指针始终没变b{n:1,x:{n:2}}, 故b.x为{n:2}console.log(b.x);转载于:https://www.cnblogs.com/yzhihao/p/6409098.html