日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS 对象引用问题

發(fā)布時(shí)間:2023/11/30 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS 对象引用问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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);


這兩個(gè)問題主要理解兩點(diǎn)就很簡(jiǎn)單了。

對(duì)象是引用類型,改變賦值只是改變指針的引用。運(yùn)算符=相當(dāng)于改變指針的指向。
運(yùn)算符的優(yōu)先級(jí)。. > =。 即:在a.x = a = {n:2};中,先給對(duì)象a添加x屬性,再進(jìn)行a={n:2}與a.x={n:2}兩個(gè)賦值操作。
問題1:
// 變量a 指針指向?qū)ο?{n:1}
var a = {n:1};
// 變量b 指針指向?qū)ο?{n:1}
var b = a;
// 變量b指針不變,仍指向{n:1}; 變量a指針改為指向?qū)ο?{n:2}
a = {n:2};
// 注意運(yùn)算符的優(yōu)先級(jí)。先給對(duì)象a增加x屬性,再給x屬性賦值。此時(shí)x屬性的值指向a對(duì)象自身。即:a = {n:2,x:a}
a.x = a ;
console.log(a.x); // {n:2,x:a}
// 由于b指針沒變,還是指向{n:1} ,故b.x: undefined
console.log(b.x);

問題2:
var a = {n:1};
// b與a的指針均指向 {n:1}
var b = a;
// 注意運(yùn)算符優(yōu)先級(jí)`.` > `=`
// 先給a添加x屬性。故添加x屬性后,a指向的對(duì)象{n:1}變?yōu)閧n:1, x:undefined/待賦值}, 由于b是和a指向的同一個(gè)對(duì)象,所以此時(shí)b={n:1, x:undefined/待賦值}
// 賦值操作(從右往左進(jìn)行)。 a = {n:2}, a的指針由指向{n:1,x:{n:2} 變?yōu)橹赶驅(qū)ο?{n:2}
// 然后再進(jìn)行賦值操作。a.x = {n:2} ,故x屬性的值為{n:2},由于b是和a指向的同一個(gè)對(duì)象,此時(shí)a=b={n:1,x:{n:2}
a.x = a = {n:2};
// 此時(shí)a={n:2}, 故a.x為undefined
console.log(a.x);
// b指針始終沒變,b={n:1,x:{n:2}}, 故b.x為{n:2}
console.log(b.x);

轉(zhuǎn)載于:https://www.cnblogs.com/yzhihao/p/6409098.html

總結(jié)

以上是生活随笔為你收集整理的JS 对象引用问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。