2021前端面試題(不包括react)

一帖蔓、HTML

1、什么是盒模型瞳脓,盒模型包括哪些塑娇?

盒模型就是把html里面的元素看做是矩形的框,類似于一個盒子的模型劫侧。

標準盒模型:width+padding+border+margin

怪異盒模型:width+margin

怪異盒模型就是把padding和border包括在width里面埋酬,平時經常使用的box-sizing:boder-box;就是把標準盒模型變成怪異盒模型。

2烧栋、怪異盒模型和普通盒模型有哪些區(qū)別写妥?

標準盒模型: content-box

怪異盒模型: border-box

二、CSS

1审姓、css的定位有哪幾種珍特,分別什么作用

static:靜態(tài)定位 relative相對元素本身的定位 absolute相對父元素的絕對定位,脫離文本流 fixed相對可視窗的固定定位魔吐。

2扎筒、垂直居中水平居中等有哪些解決方案(側面考驗對塊級元素莱找、行內元素、行內塊級元素的了解)

3砸琅、動畫和過度的熟練度

動畫:animation  @keyframes

過度:transition

三宋距、JS(包括ES6)****(****函數遞歸****)

1、什么是基本數據類型和****引用****數據類型症脂?

基本數據類型:保存在棧中的大小確定的值

引用數據類型:就是堆中的一個對象谚赎,他的變量是保存在棧中的一個引用地址,通過引用地址可以快速找到堆中的對象诱篷。

2壶唤、賦值、淺拷貝棕所、深拷貝的區(qū)別闸盔,并且分別有哪些方法?

> **賦值:**基本類型數據直接在棧中簡單賦值琳省,兩個獨立不影響迎吵。引用類型直接拷貝內存地址。

> **淺拷貝: **遍歷引用類型中的每一個屬性针贬,并且將其基本類型的值的指針進行拷貝击费,如果遇到復雜類型的值,直接拷貝內存地址桦他。

** 深拷貝:**完全獨立的拷貝出新的一塊內存地址蔫巩,兩個變量互不干涉,互不影響快压。

深拷貝的方法:(循環(huán)遍歷圆仔,遞歸遍歷)

3、原型的理解

> **原型(原型對象):**就是一個對象蔫劣,prototype就是一個原型對象坪郭,在每一個函數里面都存在的一個對象。

>** 對象原型:**每個對象都有一個原型_ _proto_ _,是這個對象的原型拦宣,他指向的是他的構造函數的原型對象prototype

** 構造函數(coustructor):**原型對象(prototype)對象原型(_ proto _)里面都有這個屬性截粗,他指向的是構造函數的本身。

** 原型作用:**共享方法鸵隧。構造函數中所有的方法都可以定義在原型對象中绸罗,所有的實例都可以共享這個方法,實例化對象的時候就不需要單獨的開辟一塊內存空間了豆瘫,提高性能珊蟀,也節(jié)省了內存。

** 原型鏈:**當訪問一個對象屬性的時候,會先從這個對象本身屬性上去查找育灸,沒找到腻窒,則會去他的proto的原型上去查找,如果沒找到再在構造函數的Prototype的原型原型上去查找磅崭,知道查找到null為止儿子。這樣一層層上去就形成了一個鏈式結構。

> prototype是構造函數才有的屬性砸喻,_ _proto_ _每個對象都有的屬性

4柔逼、閉包

> **能獲取函數內部變量的函****數****(聲明在函數內部的函數)**

閉包優(yōu)點:1、防止外界變量污染 2割岛、讀取函數內部變量  3愉适、使變量一直保存在內存中。

閉包優(yōu)點:1癣漆、會造成內存溢出(內存泄漏)

let add = null

function a() {

    let num =1;

   add = () => { num+=1 }

   //下面這個就是閉包

    return () => {

        console.log( num )

    }

}

//執(zhí)行以下代碼輸出:

const res= a()

res()   //1

add()   //變量+1了维咸,并且一直保存在內存中

res()  //2 

5、本地存儲

localStorage: 一直存儲在本地惠爽,一直存在

sessionStorage:頁面關閉癌蓖,存儲消失

6、變量提升****(****js預加載技術****)

7婚肆、變量作用域****(****全局作用域费坊、局部作用域、塊級作用域****)

8旬痹、call、apply讨越、bind的作用和用法两残,利用call(),apply()實現繼承

call、apply把跨、bind作用是改變對象的執(zhí)行上下文(改變this的指向)人弓。

call,apply是立即執(zhí)行的,bind是返回一個函數着逐,在需要使用的時候再調用崔赌。

const student = {name:'lili',age:12}

function s(a,b) {

    console.log(a+b)

}
//call直接執(zhí)行,參數用耸别,分隔健芭。并輸出結果3

s.call(student,1,2)   

//apply直接執(zhí)行,參數以數組的形式傳遞秀姐。并輸出結果3

s.apply(student,[1,2])

//bind不執(zhí)行慈迈,作用只是改變this的指向

s.bind(student)

9、繼承

(1)原型繼承省有,實例共用原型鏈痒留,屬性為引用類型谴麦,則會互相影響。

  Child.prototype= new Parsent()

(2)構造函數繼承伸头,無法繼承原型上的屬性和方法匾效。

   Parsent.call(this)

(3)組合式繼承 結合

    Parsent.call(this)    

    Child.prototype= new Parsent()

    Child.prototype.constructor = Child

10、this的指向問題

當在全局作用于中恤磷,this指向window

普通函數作用域下:非嚴格模式面哼,指向window ,嚴格模式undefined

在構造函數中碗殷,this指向此構造實例對象精绎,

在對象方法中,this指向該對象

> 箭頭函數更改了this的指向锌妻,指向詞法作用域的外層代乃。

11、異步請求:promise\async await \callback

12仿粹、數組用typeof判斷出來的類型是什么搁吓,哪些方法可以判斷是數組?

   undefined, boolean,string,number,object,function

    Array.isArray(arr)  /  arr instanceof  Array  

13、setTimeOut / Promise.resolve().then的執(zhí)行順序吭历,宏任務和微任務知識點

    /**

     * 宏任務:setTimeOut, setInterval, setImmediate, I/O

    * 微任務:Promise.resolve(), process.nextTick,promise.resolve().then()

    * */

14堕仔、Boolean類型的強制轉換,

  例:let a = [], b = {}, c = 0 ;

   寫出輸出值: console.log(a && b) ;  console.log(a && c);  console.log(a && b && c) ; console.log(!a && c) ; console.log(a && !c) 

15晌区、判斷是否為一個數組類型的方法(兩種法法)

    例: let arr = [1,2,3,4]
  1. 利用原型判斷摩骨,判斷這個變量的原型鏈是否是數組對象: arr instanceof Array //true

  2. Object.prototype.toString.call(arr) 準確判斷任何類型

3)利用es6新增的內置對象的方法:Array.isArray(arr) //true

16、什么是事件流朗若?事件流分哪幾個階段恼五?

    > 事件流指的是:事件傳播的過程.(冒泡、捕獲)

    (1)事件捕獲階段(2) 處于目標階段 (3)事件冒泡階段

**17哭懈、熟悉使用Element.addElementListener('事件'灾馒,‘函數’,true/false) **

     最后的ture/false遣总,什么意思睬罗?有什么作用?

    true 事件按照事件捕獲的方式執(zhí)行, false 事件按照事件冒泡的方式執(zhí)行

18旭斥、'use strict'嚴格模式容达,必須寫在第一行嗎?回答使用'use strict'的優(yōu)缺點垂券?

    是的董饰、但是如果上面是注釋的代碼,也算是寫在最上面,如果沒寫在最上面卒暂,

    那么'use strict'會失效啄栓。

19、async/await作用

1也祠、await作為求值關鍵字(后面可以跟promise或表達式)昙楚,可以直接獲取promise的值和表達式的值

2、將異步代碼操作變?yōu)橥酱a的寫法诈嘿。

20堪旧、window.onLoad 和$(document).ready()的區(qū)別

window.onLoad是數據資源全部加載完畢才執(zhí)行,ready是dom渲染完畢就執(zhí)行奖亚。

21淳梦、作用域和上下文:

作用域:可訪問的變量的范圍、區(qū)域昔字。

上下文:同一個作用域中的變量

22爆袍、jsonp的跨域原理:

瀏覽器是有同源策略限制的,但是src屬性不被同源策略限制作郭,所以利用動態(tài)插入script標簽并且設置src屬性陨囊,就解決了跨域問題。

23夹攒、instanceof原理

instanceof 是判斷右邊的變量原型prototype是不是在左邊的變量的原型鏈上蜘醋。

結果為true :

Object instanceof Object / Function instanceof Object / Object instance Function

24、垃圾回收機制咏尝,和避免內存泄漏:

當執(zhí)行遇到函數的時候压语,會創(chuàng)建一個函數執(zhí)行上下文,并添加到調用堆棧的棧頂编检,函數的作用域中包含了函數中聲明的所有的變量无蜂,當函數執(zhí)行完畢,對應的執(zhí)行上下文從棧頂彈出蒙谓,函數的作用域隨之銷毀,函數中包含的所有聲明的變量統一釋放并自動回收训桶。

垃圾回收:就是不定期尋找不再使用的變量累驮,釋放并回收內存。

垃圾:就是不再使用的變量或者未被引用的對象舵揭。

怎么實現垃圾回收:利用標記-清除法谤专,進行垃圾回收。

1午绳、少創(chuàng)建全局變量

2置侍、手動清除定時器

3、少用閉包

4、清除dom的引用

25蜡坊、函數柯里化

定義:只傳遞給函數一部分參數來調用它杠输,讓它返回一個函數去處理剩下的參數

fun(1,2,4)===》 fun(1)(2)(4)

作用:延遲執(zhí)行、參數復用秕衙、提前確認(利用自執(zhí)行函數蠢甲,提前確認走那個方向。然后返回一個函數)据忘。

26鹦牛、new操作符的作用,并寫一個js方法實現new運算符

[圖片上傳失敗...(image-dc15e4-1631860993689)]

function ObjectNew() {    
//創(chuàng)建一個實例對象對象  
  let obj = {}   
 //取得方法的第一個參數為構造函數 
   const Constructor = [].shift.apply(arguments)  
  //將該對象的原型指向構造函數的原型對象   
 obj.__proto__ = Constructor.prototype  
  //更改構造函數的this指向實例對象,并取得返回值
   const res = Constructor.apply(obj, arguments)    
//如果有返回對象勇吊,就返回對象曼追,沒有就返回實例對象    
return typeof res === 'object' ? res : obj 
 }

27、js事件循環(huán)機制(Event Loop)

(單線程非阻塞汉规,主線程礼殊、執(zhí)行棧、事件隊列)

js是單線程非阻塞的鲫忍,js只有一個主線程來處理所有的任務膏燕,因為js是單線程的,js同一時間只能執(zhí)行一個方法悟民,這些方法依次排列在執(zhí)行棧中被依次執(zhí)行坝辫,當方法被執(zhí)行完畢的時候。js會退出執(zhí)行環(huán)境并且銷毀執(zhí)行環(huán)境射亏。當遇到異步事件時近忙,會將這個異步事件掛起,繼續(xù)執(zhí)行執(zhí)行棧中的其他任務及舍,異步事件返回結果后,會將事件添加到事件隊列中窟绷,等待執(zhí)行棧中的所有任務執(zhí)行完畢之后锯玛,主線程會去查找事件隊列中是否有任務,如果有兼蜈,主線程會將事件隊列中的回調放入執(zhí)行棧中并依次執(zhí)行攘残。這樣事件就形成了一個循環(huán),叫做事件循環(huán)为狸。

28歼郭、前端跨頁面通信有哪些方法

同源下的頁面之間:

1、利用事件監(jiān)聽document.addElementListener(‘click’,fun,false)

2辐棒、window.postMessage()

3病曾、h5的本地存儲localStorage

非同源下的頁面之間

1牍蜂、JSONP

2、iframe

29泰涂、重排和重繪(盡量減少重排重繪)

重排(回流):重新生成布局鲫竞,重新排列元素

重繪:某些元素的外觀被改變,比如color變化负敏。

重繪不一定導致重排贡茅,重排一定導致重繪。

30其做、前端性能優(yōu)化

(1)外部引入css,script,并且將script放在body的最后顶考。

(2)減少重排重繪

(3)減少去除多余代碼,減小代碼量

31妖泄、瀏覽器渲染頁面的流程:

(1)輸入網址驹沿,DNS查詢,將域名解析為ip

(2)瀏覽器和服務器建立tcp或者udp連接

(3)瀏覽器給服務器發(fā)送http請求

(4)服務器處理響應請求

(5)服務器返回一個html響應

(6)客戶端渲染html

32蹈胡、模塊化

什么是模塊化:

(1)將復雜的程序依據一定的規(guī)范封裝成幾個模塊渊季,并組合在一起。

(2)塊的內部數據與實現是私有的罚渐,只是簡單向外部暴露一些接口與外部其他模塊通信却汉。

模塊化方式:

(1)函數模塊

(2)對象模塊

(3)IIFE(閉包)

模塊化的優(yōu)點:

(1)避免變量命名沖突

(2)更好的分離荷并,按需引入加載

(3)更高的復用性

(4)更高的維護性

33合砂、promise原理

prmise有三種狀態(tài):等待pending、成功fulfilled源织、拒絕rejected翩伪。promise一旦改變狀態(tài)就是不可逆的,當變成fulfilled狀態(tài)谈息,會立即執(zhí)行回調函數缘屹,回調函數返回的結果被當做參數闖入函數被使用。

四侠仇、VUE

1轻姿、vue全家桶,分別什么作用逻炊?

    > vue-cli腳手架:快速搭建vue開發(fā)環(huán)境互亮,繼承資源加載,打包嗅骄、熱更新等一體的vue開發(fā)工具。

    > vue -router: vue的路由插件饼疙,有兩種模式hash模式和history模式溺森。

    > vuex:狀態(tài)管理模式慕爬,集中式存儲管理所有組件的狀態(tài),并以相應的規(guī)則保證可預測的發(fā)生變化屏积。

    > axios: 基于promise的http庫医窿,實現數據的交互。

    >vue的第三方框架炊林,例如element-ui , mint-ui

2姥卢、vuex模塊

vuex是針對vue.js創(chuàng)建的狀態(tài)管理倉庫。分為state,getter,mutation,action,module五個模塊部分渣聚,

> state:存儲view視圖的公共數據

> getters: 計算變量独榴,跟vue中的computed數據相似,具有緩存功能奕枝,只有依賴的數據源發(fā)生變化棺榔,才被重新計算。

> mutations: 提交state數據源狀態(tài)的唯一方法隘道,只操作同步操作症歇。

> actions: 異步方法請求的地方,通過dispatch觸發(fā)谭梗。能通過commit觸發(fā)mutations方法忘晤。

> modules: store分割的子模塊

3、什么是MVVM模式激捏,怎么實現數據雙向綁定设塔,數據雙向綁定的原理?

    model數據交互層邏輯缩幸, view視圖層展示頁面壹置, viewModel中間傳送帶,是model和view交互的中間鍵表谊。

采用數據劫持結合發(fā)布訂閱者模式來改變view層數據王暗。通過Object.defineProperty()中的get,set劫持數據的變化字柠,發(fā)布消息給訂閱者watcher,觸發(fā)響應的監(jiān)聽回調更新視圖。

通過監(jiān)聽input型宙、change事件賦值改變model層數據

    > model變化view視圖更新:在vue創(chuàng)建實例的時候,會遍歷data中的屬性芜果,并通過Object.defineProperty()方法蔽氨,設置屬性的setter/getter,聽屬性值的變化,當監(jiān)聽到屬性值的變化跨算,觸發(fā)dep.notify()通知訂通過observe監(jiān)閱者爆土,執(zhí)行watcher.update()方法,執(zhí)行compile中的回調诸蚕,改變DOM中的值步势。

    > view視圖更新model數據變化:通過文本輸入框的change/input事件氧猬,獲取dom中value值,改變model層數據坏瘩。

vue2.x:利用object.defineproperty()劫持數據盅抚,但是object.defineproperty()不能監(jiān)聽數組的變化,數組中的push倔矾,shift等方法無法觸發(fā)set妄均,vue是通過重寫數組這些方法實現數據的劫持。并且要手動遞歸遍歷深層次的對象屬性

vue3.0:利用proxy劫持數據哪自,proxy針對的是整個對象丰包,所以對象里面的屬性變化,都可以劫持到提陶。能監(jiān)聽到數組的變化烫沙,不需要重寫數組的方法。嵌套對象需要遞歸調用proxy隙笆。

4锌蓄、vue中數組和對象是怎么渲染的?

    >  vue實例初始化之前就在data對象里面定義好的的屬性撑柔,類型可以是Object瘸爽、Array、String铅忿、Number等各種類型的數據剪决,這樣能監(jiān)聽到data里面屬性的變化,而重新渲染頁面數據檀训,沒在data中定義的屬性柑潦,無法堅監(jiān)聽到數據的變化,可以使用this.$set()方法為屬性添加監(jiān)聽事件峻凫。

其中Array類型直接改變數組長度 或 利用下標改變數組無法監(jiān)聽到變化渗鬼,所以頁面無法重新渲染。

Object類型:利用delete刪除對象某一屬性 或 為對象添加某一屬性荧琼,則無法監(jiān)聽到數據變化譬胎。

5、vue-router的兩種模式

> hash模式:vue默認使用hash模式命锄,并且如果瀏覽器不支持history模式的情況堰乔,會重新定向為使用hash模式。從#之后的一串數據都屬于hash值脐恩。改變hash值會觸發(fā)hashChange事件镐侯,然后通過hash值去查找相應的路由,改變視圖驶冒。使用以下兩種方法改變頁面內容和瀏覽器瀏覽記錄:

    hashHistory.push()  / hashHistory.replace()

history模式:是HTML5中的新增的兩個API history.pushState() / history.replaceSate(),能夠改變url地址且不會發(fā)送請求苟翻,可以改變?yōu)g覽器歷史記錄棧搭伤。需要后端配合使用。

history 致命的缺點就是當改變頁面地址后袜瞬,強制刷新瀏覽器時,(如果后端沒有做準備的話)會報錯身堡,因為刷新是拿當前地址去請求服務器的邓尤,如果服務器中沒有相應的響應,會出現 404 頁面贴谎。

6汞扎、vue2.0和vue3.0的不同,vue3.0有哪些優(yōu)化擅这?

   vue2.x:頁面載入時澈魄,不管是不是可區(qū)域渲染的數據,都會創(chuàng)建監(jiān)聽觀察者仲翎,所以在頁面載入時的性能較低痹扇,較慢。

    vue3.0:頁面是需要用到什么引入什么溯香,不會有冗余的和多余的數據鲫构,只有在可見區(qū)域中才會為數據創(chuàng)建觀察者,初始載入時性能好玫坛。

| vue2.x | vuee3.0 |
| 采用Object.defineProperty()進行數據劫持|采用proxy進行數據劫持|
|頁面載入時结笨,為data里面的所有數據創(chuàng)建觀察者,性能低|頁面載入時湿镀,只有可見區(qū)域的變量創(chuàng)建觀察者|
|利用vue.set()為對象添加屬性時炕吸,這個對象的所有watcher會重新運行|
利用vue.set()為對象添加屬性時,只有依賴那個屬性的watcher才會重新運行
|
|this指向當前組件|取消了this關鍵之勉痴,直接使用setup攜帶的參數|

7赫模、vue的生命周期鉤子

> beforeCreate   實例初始化之后,數據觀測(data observer)和event/watcher 事件配置可以調用

> created  實例創(chuàng)建完成后被立即調用蚀腿,但是實例還沒掛載嘴瓤,不可獲取dom

> beforeMount  實例掛載之前調用 ,相關的render函數首次被調用莉钙。 (服務器渲染期間不被調用)

> mounted  實例掛載后調用廓脆,但是不能保證能獲取子組件的dom。使用$nextTick()則能獲取整個視圖dom

> beforeUpdate  數據更新時調用磁玉,dom更新之前

> updated 發(fā)生在dom更新之后調用。

> activated 被keep-alive緩存組件激活時調用

> deactivated 被keep-alive緩存組件停用時調用

> beforeDestroy 實例銷毀之前調用蚊伞,仍然可以獲取到實例dom

> destroyed 實例銷毀之后調用

> errorCaptured  捕獲一個來自子孫組件的錯誤時被調用

8席赂、父子組件的生命周期的順序

> 父beforeCreate -> 父created -> 父beforeMount -> 子beforeCreate -> 子created -> 子beforeMount -> 子mounted ->父mounted

->父beforeUpdate -> 子beforeUpdate ->子updated -> 父updated

-> 父beforeDestroy -> 子beforeDestroy -> 子destroyed -> 父destroyed

9吮铭、解釋vue的單頁面應用

單頁面應用指,在vue初始化頁面的時候只請求一次資源颅停,之后的頁面交互谓晌,數據交互都是通過router和ajax來完成,頁面并沒有刷新癞揉。

10纸肉、數據的響應式

> 數據分為普通數據類型和引用數據類型(數組、對象)喊熟,在實例data定義過的property 柏肪,都會將其轉化為 getter/setter,讓其響應數據變化。

(1)普通數據類型

改變數據芥牌,直接響應變化

(2)數組

    響應式的:push(),split(),slice()等方法烦味、this.$set()方法

    非響應式:利用數組下標(arr[0].name)、修改數組長度( arr.length=2)

(3)對象

    響應式的:直接賦值(this.obj = {})壁拉、this.$set()方法谬俄、直接屬性賦值存在的屬(this.obj.name = '11')

    非響應式:對象不存在的屬性名賦值(obj.name ='a')、刪除某一屬性(delete obj.name)

11弃理、vue-router有哪幾種導航鉤子

(1)全局導航鉤子

router.beforeEach(to,form,next)//路由跳轉前判斷

router.afterEach((to,from)=>{ });// 跳轉后判斷

(2)組件內的鉤子

beforeRouteEnter(to, from, next) {

// 在渲染該組件的對應路由被 confirm 前調用

},

beforeRouteUpdate(to, from, next) {

// 在當前路由改變凤瘦,但是依然渲染該組件是調用

},

beforeRouteLeave(to, from ,next) {

// 導航離開該組件的對應路由時被調用

}

(3)單獨路由獨享組件:是在路由配置上直接定義

const router = newVueRouter({

    routes:[{

    path:'/file',

        component:File,

        beforeEnter:(to,from,next)=>{/*路由鉤子*/}

    }]

});

12、描述下虛擬DOM

虛擬dom就是一個js對象案铺,用來描述希望在屏幕上看到的內容蔬芥,能都實現高效更新真實dom。

13控汉、描述數據變化笔诵,dom怎么更新

在第一次渲染頁面時就創(chuàng)建一份虛擬dom,當數據變化姑子,利用diff算法對比兩個虛擬dom的不同乎婿,更新不同處。

14街佑、router和route的區(qū)別

route:是當前路由的信息谢翎,能獲取路由和參數

router:是全局路由(VueRouter)實例對象,可以進行路由跳轉

15沐旨、vue.use()原理

vue.use()是注冊使用全局組件森逮,首先回去判斷組件有無被注冊過,不會重復注冊組件磁携。并且可接受的參數類型為對象或者函數褒侧。如果是對象,則包含install方法,去調用install方法闷供,install方法的第一個參數為Vue.如果是函數烟央,則直接執(zhí)行函數,函數接收的第一個參數也是Vue歪脏。

16疑俭、vue-loader是什么,什么作用婿失?

處理特定語言塊怠硼。

vue-loader是一個webpack的loader能夠處理.vue結尾的單文件頁面。

17移怯、非父子組件之間的數據傳遞:

1、使用vuex數據管理倉庫

2这难、new一個新的vue實例舟误,作為中央事件總線,然后使用emit和on進行數據的傳遞和接收姻乓。

18嵌溢、v-for為什么要添加key

vue 在更新渲染dom的時候是根據新舊dom進行對比,用key標識每一個節(jié)點蹋岩,使diff算法比較虛擬dom的時候更準確赖草。

19、computed原理:

內部通過dirty屬性判斷是否從新計算賦值剪个,初始化時dirty設置成true,會讀取data中的依賴變量值進行賦值操作秧骑。賦值完畢將dirty設置成false,只有當依賴的data變量發(fā)生變化時,才會將dirty賦值為true,重新計算值扣囊。

20乎折、vue.nextTick()原理

因為DOM更新是異步執(zhí)行的,DOM更新會加入到任務隊列中.先執(zhí)行完同步代碼侵歇,再進行DOM的異步更新骂澄,所以需要nextTick()的回調是在dom更新之后的任務隊列中執(zhí)行。nextTick的原理是使用promise惕虑、mutationObserver坟冲、setImmediate、setTimeout順序來使用溃蔫。

21健提、數組哪些方法能被監(jiān)聽到,怎么實現改變dom的伟叛?

vue 內部對數組的push矩桂、unshift、pop、shift侄榴、reverse雹锣、sort、splice等七個方法進行攔截癞蚕,如果數組變化蕊爵,就通知訂閱者更新視圖。

22桦山、keep-alive原理和使用

獲取keep-alive包裹的組件和組件名攒射,判斷組件名是否包含在include中,通過key值查找該組件是否被緩存過恒水,被緩存過会放,直接獲取cache中緩存的vnode,并且更新key值順序钉凌。沒被緩存過咧最,則直接返回組件實例,并添加緩存的key值御雕。之后檢查被緩存的組件實例是否超出max,超出了矢沿,直接刪除最原始的緩存數據。

23酸纲、為什么組件里面的data必須是函數捣鲸?

因為每一個vue組件就是一個vue實例,通過new Vue()來實例化闽坡,如果data定義為一個對象,就相當于原型中定義一個對象栽惶,實例化對象的時候,那么此對象指向同一地址疾嗅。那么組件復用的時候data都是指向同一個內存地址媒役,改變其一,牽動其二宪迟,組件相互影響酣衷。如果使用函數,復用組件的時候次泽,每個組件都有各自的data作用域穿仪,互相獨立。

24意荤、** vm.$set(target,key,val)方法的原理 **

使用這個方法可以給響應式數據添加和更改響應式數據啊片。

首先會判斷目標對象時數組還是對象,如果是數組使用splice()方法玖像,替換更改數組紫谷。如果是對象,并且添加的屬性已存在,則直接賦值笤昨,如果對象不存在此屬性祖驱,先判斷此對象是否是響應式變量,如果不是瞒窒,直接添加鍵值對捺僻,如果是響應式,通過defineReactive()方法進行響應式處理崇裁。

五匕坯、網絡請求

1、http和https的區(qū)別

http:安全性低

https:通過加密協議處理過拔稳,更安全

2葛峻、get和post請求

get:數據通過url傳遞,直接可見巴比,數據長度受限术奖。

post:數據通過params傳遞,安全性能更高匿辩,能接受的數據容量也更大。

3榛丢、http的狀態(tài)碼有哪些铲球,分別代表什么意思

200成功,401需要驗證身份晰赞,403服務器拒絕請求稼病,404找不到資源,500服務器出錯掖鱼,503服務器不可用然走。

六、vue3

** 1戏挡、vue3有哪些新特性 **
(1)framents(支持多個根節(jié)點)


image.png

(2)teleport(通過<teleport>標簽包裹的元素可插入到任意的元素中芍瑞,to中可以是id,也可以是class)


image.png

(3)composition Api (組合式api)更容易維護代碼褐墅。
** 2拆檬、vue3有哪些方面的提升**
(1)diff算法方面的提升,增加了靜態(tài)標記

一些非靜態(tài)的節(jié)點會增加一個flag標記妥凳,在發(fā)生變化的時候竟贯,有flag標記的地方才會進行diff算法進行比較。
(2)靜態(tài)提升
對不參與更新的DOM元素逝钥,做今天提升屑那,元素節(jié)點只會被創(chuàng)建一次,在渲染時直接復用,節(jié)省了在運行時的內存占用持际。也不會進行diff算法沃琅。
(3)體積減小了,采用組合式api选酗,按需引入阵难。
(4)使用proxy進行響應式數據xie

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芒填,隨后出現的幾起案子呜叫,更是在濱河造成了極大的恐慌,老刑警劉巖殿衰,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朱庆,死亡現場離奇詭異,居然都是意外死亡闷祥,警方通過查閱死者的電腦和手機娱颊,發(fā)現死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凯砍,“玉大人箱硕,你說我怎么就攤上這事∥蝰茫” “怎么了剧罩?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長座泳。 經常有香客問我惠昔,道長,這世上最難降的妖魔是什么挑势? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任镇防,我火速辦了婚禮,結果婚禮上潮饱,老公的妹妹穿的比我還像新娘来氧。我一直安慰自己,他們只是感情好香拉,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布饲漾。 她就那樣靜靜地躺著,像睡著了一般缕溉。 火紅的嫁衣襯著肌膚如雪考传。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天证鸥,我揣著相機與錄音僚楞,去河邊找鬼勤晚。 笑死,一個胖子當著我的面吹牛泉褐,可吹牛的內容都是我干的赐写。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼膜赃,長吁一口氣:“原來是場噩夢啊……” “哼挺邀!你這毒婦竟也來了?” 一聲冷哼從身側響起跳座,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤端铛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疲眷,有當地人在樹林里發(fā)現了一具尸體禾蚕,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年狂丝,在試婚紗的時候發(fā)現自己被綠了换淆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡几颜,死狀恐怖倍试,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蛋哭,我是刑警寧澤县习,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站具壮,受9級特大地震影響准颓,放射性物質發(fā)生泄漏哈蝇。R本人自食惡果不足惜棺妓,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炮赦。 院中可真熱鬧怜跑,春花似錦、人聲如沸吠勘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剧防。三九已至植锉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峭拘,已是汗流浹背俊庇。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工狮暑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辉饱。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓搬男,卻偏偏與公主長得像,于是被迫代替她去往敵國和親彭沼。 傳聞我的和親對象是個殘疾皇子缔逛,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容