js中關於連續的賦值運算子的執行順序問題

2021-10-08 08:25:16 字數 836 閱讀 9377

這個問題就得牽扯到一道比較經典的面試題了

請問下面,a,b輸出什麼

var a=

;var b=a;

a.x=a=

;

其實最後也可以再新增兩個問題 就是 a.x和b.x 分別輸出什麼

下面吧答案公布一下吧

a=;b=

};

通過a,b的輸出結果看

a.x就是undefined b.x則是

這個是怎麼回事呢

其實 關鍵的地方就是

a.x=a=;

它究竟是怎麼執行的呢

如果按照從右到左的執行順序的話

是 a先被 賦值成 a=; 然後 再是 a.x=;

這樣的結果就變成了

a=

} b=

;

問題答案 和我們想的結果 確實大相徑庭

其實這裡 我們想的就是 預設吧 a.x 和 a看成了乙個東西了

這個好像是潛意識 的就會這樣認為的

撇開 a.x=a= 這個表示式

我們知道 在js中 引用型別的變數 就存放在堆記憶體中

而棧記憶體則是存放一些 基本變數 同時 也會將引用型別的 位址存放到 棧記憶體中

就像我們看到的 var d=; 這裡的 d只是儲存了 物件 的 在堆記憶體的位址

暫且把d看做乙個基礎變數吧

我們也可以吧 d重新賦值乙個物件

總結來說吧 和執行順序其實沒關係

a.x 和a 是不同的 a.x和b.x 是同乙個物件 b.x和a 又是同乙個物件 這個明白就懂了

a 改變會影響到 b.x

js的賦值與比較運算子

var a 4 var b 5 var c 3 console.log a 5 值 9 a a 5 9 console.log c 5 值 8 c c 5 8 console.log b c 值 40 c 8 b c 40 console.log b c 值 0.625 c 8 b 5 b c 0....

js的in運算子與instanceof運算子

in運算子 希望他的左運算元是乙個字串或可以轉換為字串,希望他的右運算元是乙個物件。如果右運算元的物件擁有乙個名為左運算元值的屬性名,那麼表示式返回true.var point 定義乙個物件 x in point 返回為true 物件有乙個名為x的屬性 z in point 返回為false 物件沒...

Js中的 運算子

jscript 具有全範圍的運算子,包括算術 邏輯 位 賦值以及其他某些運算子。計算邏輯 位運算賦值 雜項描述 符號描述 符號描述 符號描述 符號描述 符號負值 邏輯非 按位取反 賦值 刪除delete 遞增 小於 按位左移 運算賦值 op typeof 運算子 typeof 遞減 大於 按位右移 ...