【js】引用和操作符優先級

以下輸出什麼

題目一:

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

執行:
1.先執行 a.x
2.a = {n:2} ;//從右向左賦值
3.a.x ={n:2}; //賦值操作

解答思路:

1、優先級。.的優先級高於=,所以先執行a.x,堆內存中的{n: 1}就會變成{n: 1, x: undefined},改變之後相應的b.x也變化了,因爲指向的是同一個對象。
2、賦值操作是從右到左,所以先執行a = {n: 2},a的引用就被改變了,然後這個返回值又賦值給了a.x,需要注意的是這時候a.x是第一步中的{n: 1, x: undefined}那個對象,其實就是b.x,相當於b.x = {n: 2}


題目二:

var a = { x: 1 };
var b = a;
a = a.x = { x: 1 };
console.log(a); //{x:1}
console.log(b);//{x:{x:1}}
解題的兩個關鍵點:

1.操作符的運算優先級問題;.的優先級高於賦值語句;

var a = { x: 1 };
var b = a;

a.x = { x: 1 };
a = a.x;
當執行a.x = {x:1}

a = a.x;

發佈了40 篇原創文章 · 獲贊 28 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章