百度js面試題
該題的難度係數: ★★★★(3~5顆星之間)
問:console.log(a.n, b.n)和console.log(a.x, b.x)的值分別為多少?
涉及的相關技術點: 1). 記憶體分析 2). 原型鏈 3). 運算子的優先順序
題目如下:
var a = {n: 1}
var b = a
a.x = a = {n: 2}
問:console.log(a.n, b.n)和console.log(a.x, b.x)的值分別為多少?
執行結果如下:
接下來,我們分析下解題思路:
var a = {n: 1} 就是宣告一個物件a,並把屬性名為n,屬性值為1的物件賦給它,
var b = a,然後再把物件a賦值給b,也就是現在a和b都指向了同個地方,值均為{n:1}
接下來的a.x = a = {n: 2}就是一個連等的賦值語句,這裡要主要的是,賦值的時候,是從右向左賦值的,還有就是涉及到優先順序問題,就是‘a.x’的優先順序比賦值‘=’的優先順序來得高,即現在先在記憶體裡面宣告瞭個屬性x,暫時還沒有值,如圖所示:
現在開始右側的賦值,也就是a={n:2},那麼現在a物件的值已經變了,也就是說跟原來斷掉關係了,如圖所示:
接下來,再把a賦值給a.x,也就是現在的x也指向了{n:2}這個物件,如圖所示:
最後,我們回過頭來看下剛才的問題,答案就一目瞭然了。
a.n的值就是2了,
b.n的值就是1了,
a.x值為undefined,因為我們現在遵循的是屬性查詢,就是在整個原型鏈上查詢,如果原型鏈上找不到,就返回undefined了,
b.x的值就是物件{n:2}了。
相關文章
- 面試題:JS面試題JS
- 百度面試題面試題
- 前端js面試題前端JS面試題
- Js 經典面試題JS面試題
- VUE.JS 面試題Vue.js面試題
- Android 面試題,百度,小米,阿里面試題Android面試題阿里
- 手寫js面試題集JS面試題
- JS面試考題記錄JS面試
- Vue.js 面試題整理Vue.js面試題
- js面試題(基礎)梳理JS面試題
- js面試題(進階)梳理JS面試題
- 前端Node.js面試題前端Node.js面試題
- 2019前端面試系列——JS面試題前端JS面試題
- 二分查詢(JS解法)——高頻面試演算法題(百度真題)JS面試演算法
- [面試專題]JS設計模式面試JS設計模式
- 【理解】一道 JS 面試題JS面試題
- 前端基礎面試題@JS篇前端面試題JS
- 前端高階面試題@JS篇前端面試題JS
- 前端JS面試題簡約版前端JS面試題
- 前端常見面試題(js部分)前端面試題JS
- 經典 JS 閉包面試題JS面試題
- 百度搜尋 “Java面試題” 前200頁(面試必看)Java面試題
- 前端面試指南之JS面試題總結前端JS面試題
- 10 個常問的 JS 面試題JS面試題
- 百度/數字馬力面試題分享面試題
- JS基礎知識(覆蓋JS基礎面試題)JS面試題
- [js]一道快取類面試題JS快取面試題
- 最全技術面試180題:阿里11面試+網易+百度+美團!面試阿里
- 百度 Linux 運維工程師面試真題Linux運維工程師面試
- 180道Java技術面試題:阿里11面試+網易+百度+美團!Java面試題阿里
- 百度iOS面試iOS面試
- HTML最新面試題(筆試面試題)HTML面試題筆試
- [面試專題]JS非同步之Promise,Generator,Async面試JS非同步Promise
- [面試專題]JS中模組AMD,CMD,import面試JSImport
- 記錄一些js面試題以及解法JS面試題
- 2019年幾道常見js面試題整理JS面試題
- 2019 JS經典面試題(基礎+高階)JS面試題
- 面試必問題:JS防抖與節流面試JS
- 面試題:面試經面試題