面試題 關於運算子及優先順序的思考

2022-07-28 09:06:14 字數 625 閱讀 1174

題目如下:

var a=;

var b=a;

a.x=a=;

console.log(a.x);

console.log(b.x);

這道題考查了兩個知識點:1:記憶體空間 2:運算子的優先順序

關於運算子知識點:

題目解析:

首先變數a指向物件,變數b也指向物件,都指向同乙個物件

接下來由於a.x中的.的優先順序高於=

所以第一步執行a.x,此時a指向的物件新增了乙個x屬性,變成了,此時b依然指向這個物件

接下來繼續分析a.x=a=;

賦值的結合性是從右到左,所以以上式子等價於a.x=(a=);

先執行a=,此時堆記憶體重新開闢一塊空間存放物件,a就指向了新的記憶體空間,而b指向原來的記憶體空間

右側的=執行完以後繼續執行左邊的賦值運算

a(舊).x=a( 新)=,因為a( 新)=返回a(新)本身,所以a(舊).x=a(新)

因此:

var a=;

var b=a;

a.x=a=;

console.log(a.x); //undefined

console.log(b.x); //

面試題 運算子優先順序

include using namespace std int main 首先是運算子優先順序 和 優先順序順序是怎樣的 運算子優先順序和口訣 一共有十五個優先順序 1 2 負號 取變數位址 type 強制型別 sizeof 3 4 5 6 7 8 9 10 11 12 13 14 15 結合性 2...

運算子 及 運算子優先順序

數 算符 7個 1 為求餘運算子 例如 3 2 1 8 3 2 2 和 為自加1和自減1運算子。3 i 和 i都是加1運算。如 i 和 i 等於 i i 1 i i i i的意義和i i完全不一樣,可以這樣 理解,加 號在前面的先進行加1運算再賦值,加號在 後面 的 先進行賦 值在加1運算。如int...

運算子優先順序 C 運算子優先順序

c 運算子優先順序 優先順序運算子 描述方向1 scope resolution 範圍解析 left to right 2 suffix postfix increment and decrement 字首 字尾遞增和遞減 function call 函式呼叫 array subscripting ...