vue前端面試題知識點整理

1. 說一下Vue的雙向綁定數(shù)據(jù)的原理

vue 實現(xiàn)數(shù)據(jù)雙向綁定主要是:采用數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式,通過 Object.defineProperty() 來劫持各個屬性的 setter,getter,在數(shù)據(jù)變動時發(fā)布消息給訂閱者,觸發(fā)相應(yīng)監(jiān)聽回調(diào)

var obj  = {};
Object.defineProperty(obj, 'name', {
        get: function() {
            console.log('我被獲取了')
            return val;
        },
        set: function (newVal) {
            console.log('我被設(shè)置了')
        }
})
obj.name = 'fei';//在給obj設(shè)置name屬性的時候,觸發(fā)了set這個方法
var val = obj.name;//在得到obj的name屬性,會觸發(fā)get方法

已經(jīng)了解到vue是通過數(shù)據(jù)劫持的方式來做數(shù)據(jù)綁定的,其中最核心的方法便是通過Object.defineProperty()來實現(xiàn)對屬性的劫持,那么在設(shè)置或者獲取的時候我們就可以在get或者set方法里假如其他的觸發(fā)函數(shù),達(dá)到監(jiān)聽數(shù)據(jù)變動的目的,無疑這個方法是本文中最重要、最基礎(chǔ)的內(nèi)容之一。

2. 解釋單向數(shù)據(jù)流和雙向數(shù)據(jù)綁定

單向數(shù)據(jù)流: 顧名思義,數(shù)據(jù)流是單向的。數(shù)據(jù)流動方向可以跟蹤,流動單一,追查問題的時候可以更快捷。缺點就是寫起來不太方便。要使UI發(fā)生變更就必須創(chuàng)建各種 action 來維護(hù)對應(yīng)的 state
雙向數(shù)據(jù)綁定:數(shù)據(jù)之間是相通的,將數(shù)據(jù)變更的操作隱藏在框架內(nèi)部。優(yōu)點是在表單交互較多的場景下,會簡化大量與業(yè)務(wù)無關(guān)的代碼。缺點就是無法追蹤局部狀態(tài)的變化,增加了出錯時 debug 的難度

3. Vue 如何去除url中的 '#'

vue-router 默認(rèn)使用 hash 模式,所以在路由加載的時候,項目中的 url 會自帶 #。如果不想使用 #, 可以使用 vue-router 的另一種模式 history

new Router({
  mode: 'history',
  routes: [ ]
})

需要注意的是,當(dāng)我們啟用 history 模式的時候,由于我們的項目是一個單頁面應(yīng)用,所以在路由跳轉(zhuǎn)的時候,就會出現(xiàn)訪問不到靜態(tài)資源而出現(xiàn) 404 的情況,這時候就需要服務(wù)端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態(tài)資源,則應(yīng)該返回同一個 index.html 頁面

4. 對 MVC、MVVM的理解

MVC


特點:

1.View 傳送指令到 Controller
2.Controller 完成業(yè)務(wù)邏輯后,要求 Model 改變狀態(tài)
3.Model 將新的數(shù)據(jù)發(fā)送到 View,用戶得到反饋

MVVM


所有通信都是單向的
特點:

1.各部分之間的通信,都是雙向的
2.采用雙向綁定:View 的變動,自動反映在 ViewModel,反之亦然
具體請移步 這里

5. 介紹虛擬DOM

參考這里

6. vue生命周期的理解

vue實例有一個完整的生命周期,生命周期也就是指一個實例從開始創(chuàng)建到銷毀的這個過程
1.beforeCreated() 在實例創(chuàng)建之間執(zhí)行,數(shù)據(jù)未加載狀態(tài)
2.created() 在實例創(chuàng)建、數(shù)據(jù)加載后,能初始化數(shù)據(jù),dom渲染之前執(zhí)行
3.beforeMount() 虛擬dom已創(chuàng)建完成,在數(shù)據(jù)渲染前最后一次更改數(shù)據(jù)
4.mounted() 頁面、數(shù)據(jù)渲染完成,真實dom掛載完成
5.beforeUpadate() 重新渲染之前觸發(fā)
6.updated() 數(shù)據(jù)已經(jīng)更改完成,dom 也重新 render 完成,更改數(shù)據(jù)會陷入死循環(huán)
7.beforeDestory() 和 destoryed() 前者是銷毀前執(zhí)行(實例仍然完全可用),后者則是銷毀后執(zhí)行

7. 組件通信

父組件向子組件通信
子組件通過 props 屬性,綁定父組件數(shù)據(jù),實現(xiàn)雙方通信

子組件向父組件通信
將父組件的事件在子組件中通過 $emit 觸發(fā)

非父子組件、兄弟組件之間的數(shù)據(jù)傳遞

8. vue-router 路由實現(xiàn)

路由就是用來跟后端服務(wù)器進(jìn)行交互的一種方式,通過不同的路徑,來請求不同的資源,請求不同的頁面是路由的其中一種功能

9. v-if 和 v-show 區(qū)別

使用了 v-if 的時候,如果值為 false ,那么頁面將不會有這個 html 標(biāo)簽生成。
v-show 則是不管值為 true 還是 false ,html 元素都會存在,只是 CSS 中的 display 顯示或隱藏

10. route和router的區(qū)別

router 為 VueRouter 實例,想要導(dǎo)航到不同 URL,則使用router.push 方法
$route 為當(dāng)前 router 跳轉(zhuǎn)對象里面可以獲取 name 、 path 、 query 、 params 等

11. NextTick 是做什么的

nextTick 是在下次 DOM 更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào),在修改數(shù)據(jù)之后使用nextTick,則可以在回調(diào)中獲取更新后的 DOM
具體可參考官方文檔 深入響應(yīng)式原理

12. Vue 組件 data 為什么必須是函數(shù)

因為js本身的特性帶來的,如果 data 是一個對象,那么由于對象本身屬于引用類型,當(dāng)我們修改其中的一個屬性時,會影響到所有Vue實例的數(shù)據(jù)。如果將 data 作為一個函數(shù)返回一個對象,那么每一個實例的 data 屬性都是獨(dú)立的,不會相互影響了

13. 計算屬性computed 和事件 methods 有什么區(qū)別

我們可以將同一函數(shù)定義為一個 method 或者一個計算屬性。對于最終的結(jié)果,兩種方式是相同的

不同點:

computed: 計算屬性是基于它們的依賴進(jìn)行緩存的,只有在它的相關(guān)依賴發(fā)生改變時才會重新求值
對于 method ,只要發(fā)生重新渲染,method 調(diào)用總會執(zhí)行該函數(shù)

17. 對 keep-alive 的了解

keep-aliveVue 內(nèi)置的一個組件,可以使被包含的組件保留狀態(tài),或避免重新渲染

<keep-alive>
  <component>
    <!-- 該組件將被緩存! -->
  </component>
</keep-alive>

可以使用API提供的props,實現(xiàn)組件的動態(tài)緩存

具體參考 官方API

18. Vue 中 key 的作用

key 的特殊屬性主要用在 Vue 的虛擬 DOM 算法,在新舊 nodes 對比時辨識 VNodes。如果不使用 keyVue 會使用一種最大限度減少動態(tài)元素并且盡可能的嘗試修復(fù)/再利用相同類型元素的算法。使用 key,它會基于 key 的變化重新排列元素順序,并且會移除 key 不存在的元素。

有相同父元素的子元素必須有獨(dú)特的 key。重復(fù)的 key 會造成渲染錯誤

具體參考 官方API

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內(nèi)容