經典面試題之賦值操作

2021-09-24 17:36:04 字數 1134 閱讀 4781

題目:

var a=;

var b=a;

a.x =a =;

console.log(a.x);

console.log(b.x);

答案

alert(a.x);// --> undefined

alert(b.x);// -->

講解

估計大部分人對a.x=undefined存在疑問。

這裡將原則總結為一句話:

**的執行順序,先從左到右掃瞄變數,再從右到左進行賦值

掃瞄階段

在a.x = a = 中,首先掃瞄到a.x,a.x不存在,所以預設指向null,即a.x=>null。然後掃瞄到a,a已經存在,所以仍然指向原來的物件,而此時a的指向仍然為,即a=>。

賦值階段

在a.x = a = 中,首先賦值最右邊。 a = ,讓a指向了,即a=>。繼續賦值a.x,(重點)此時的a.x中,a的指向沒有改變,可以理解為a.x中的a保留了原來的映象。也就是原物件變為},而此時只有b指向原物件。

因此最終輸出的時候

console.log(a.x) 此時a.x中的a已經徹底指向了新物件。輸出的是新物件中的x屬性值。而老物件中的x屬性也已經不再叫做a.x了。至於叫做什麼不得而知。

console.log(b.x) 輸出的是老物件中x屬性值。

老物件為 }

新物件為

因此a.x自然取不到值,為undefined。

如果我們再次賦值 a.x = 3;

則輸出結果為 console.log(a.x) // 。表明原來的a.x已經被刪除,在新的a物件中新建了屬性x。

其實核心的原理就是「.」優先順序高於"="

,所以先保留了指標,後進行了賦值,然後進行了gc,發現a的指向已經改變,刪除了原來的指標a.x。

最後一圖勝千言

C 面試題之賦值語句面試題

賦值語句例題1 中國台灣某著名計算機硬體公司2005年12月面試題 what does the following program print?include using namespace std int main char s abc int i for i 0 i 3 i cout 10 10...

經典面試題

1.以下三條輸出語句分別輸出什麼?char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 str2 ...

經典面試題

我的老同學現在富得流油。他開創了乙個軟體公司,開發了一系列軟體,生意越做越大。今天他來到這個城市後馬上打 給我。是我啊!聽出來了嗎?是這樣的,我到這兒的大學招畢業生,要在這兒呆上五天,咱哥們趁這個時間好好聚一聚。我做東!既然他要做東,我理所當然順水推舟。人家是老闆,不吃白不吃!我來到他下榻的賓館,看...