這個問題就得牽扯到一道比較經典的面試題了
請問下面,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 遞減 大於 按位右移 ...