2022前端面試整合

1.原型對(duì)象,原型鏈,數(shù)據(jù)類型,閉包

2.vue原理 ,react基本

3.瀏覽器渲染過程,https,http緩存

4.數(shù)組的方法

5.webpack打包流程和loader,plugin的配置優(yōu)化

6.js作用域

7.瀏覽器時(shí)間循環(huán)

8.事件循環(huán)

9.keep-alive生命周期

?1.activated:頁面第一次進(jìn)入的時(shí)候,鉤子觸發(fā)的順序created-mounted-activated

?2.deactivated:頁面退出會(huì)觸發(fā)deactivated,當(dāng)再次前進(jìn)或后退時(shí)觸發(fā)activated

10.keep-alive屬性:正則/數(shù)組需要v-bind綁定

?1.include字符串或正則表達(dá)式,只有匹配的組件會(huì)被緩存

eg:

<keep-alive?include="test-keep-alive">

//將緩存name為test-keep-alive的組件

<component></component>

</keep-alive>

[if !supportLists]2.?[endif]exclude字符串或正則表達(dá)式,任何名稱或組件都不會(huì)被緩存

?eg:

<keep-alive?exclude="test-keep-alive">

<!-- 將不緩存name為test-keep-alive的組件 -->

<component></component>

</keep-alive>

[if !supportLists]3.?[endif]max數(shù)字,最多可以緩存多少組件實(shí)例


11.Vue中計(jì)算屬性、方法與偵聽屬性的區(qū)別

計(jì)量屬性computed在使用時(shí),函數(shù)里面所有的變量都會(huì)被監(jiān)聽,只要里面某一個(gè)值變動(dòng),便會(huì)將整個(gè)函數(shù)執(zhí)行一遍

?特性

1. 是計(jì)算值

2. 應(yīng)用:就是簡(jiǎn)化tempalte里面{{}}計(jì)算和處理props或$emit的傳值

3. 具有緩存性,頁面重新渲染值不變化,計(jì)算屬性會(huì)立即返回之前的計(jì)算結(jié)果,而不是再次執(zhí)行函數(shù)


而watch只是監(jiān)聽某一個(gè)值,若是監(jiān)聽的值里面也有很多變量,也會(huì)全部監(jiān)聽

?特性

1. 是觀察動(dòng)作

2. 應(yīng)用:監(jiān)聽props,$emit或本組件的值執(zhí)行異步操作

3.無緩存性,頁面重新渲染時(shí)值不變化也會(huì)執(zhí)行




12.Vue生命周期:(四個(gè)階段,八個(gè)鉤子函數(shù))

1. 創(chuàng)建階段(create):beforeCreate(){創(chuàng)建前},created(){創(chuàng)建后}

2. 掛載階段(Mount):beforeMount(){載入前},mounted(){載入后}

3. 更新階段(Update):beforeUpdate(){更新前},updated(){更新后}

4. 銷毀階段(destroy):beforeDestroy(){銷毀前},destroyed(){銷毀后}


13.偵聽object數(shù)據(jù)----定義屬性:

Let contact = ‘陳涵’

Object.defineProperty(demo,’name’,{

Enumberable:true,

Configurable:true,

Get(){

Return contact

},

Set(){}

})

14.什么是BFC

BFC:塊級(jí)格式化上下文,它是指一個(gè)獨(dú)立的塊級(jí)渲染區(qū)域,只有Block-level Box參與,該區(qū)域擁有一套渲染規(guī)則來約束塊級(jí)盒子的布局,且與區(qū)域外部無關(guān)。

現(xiàn)象:一個(gè)盒子不設(shè)置height,內(nèi)容子元素都浮動(dòng)時(shí),無法撐起自身,這個(gè)盒子就沒有形成BFC

形成BFC的辦法:(父元素設(shè)置)

1.float不是none

2.position的值不是static或者relative

3.display的值是inline-block,flex,inline-flex

4.overflow:hidden(最好的辦法)

好處:

1.解決margin塌陷,如圖


2.阻止元素被浮動(dòng)元素覆蓋,實(shí)用性為0,實(shí)際開發(fā)中浮動(dòng)就都浮動(dòng),不浮動(dòng)就都不浮動(dòng),否則會(huì)脫離文檔流。如圖:


15.深淺拷貝及symbol

數(shù)據(jù)存儲(chǔ)

1,一般數(shù)據(jù)類型:number? string? boolean? null? undefined? ?symbol (唯一性,修飾的作用,不相等,遍歷用reflect.ownKeys(object),symbol.for(), symbol.keyFor() )

symbol實(shí)際應(yīng)用:


2,? 引用數(shù)據(jù)類型:object? ? 數(shù)組? ?set? map?

第一個(gè)打印的是:基本數(shù)據(jù)類型,第二個(gè)打印的是:symbol數(shù)據(jù)類型,第三個(gè)都打印,如下圖

賦值和淺拷貝的區(qū)別:

1.賦值

淺拷貝需要?jiǎng)?chuàng)建一個(gè)新的對(duì)象,而賦值不是

這是賦值

結(jié)果都是:科比

2.淺拷貝-一般數(shù)據(jù)類型

這是淺拷貝

沒有改變?cè)瓟?shù)據(jù):所以結(jié)果是:?jiǎn)痰?,科?/p>

3.淺拷貝-引用數(shù)據(jù)類型

因?yàn)閔obby是引用類的數(shù)據(jù)類型,拷貝的是內(nèi)存的地址 ,也就指向同一個(gè)房間??截惽昂涂截惡笫窍嗷ビ绊懙?,所以結(jié)果都是冰球

4.深拷貝(入過屬性是引用數(shù)據(jù)類型,那么就會(huì)開辟一個(gè)新房間)

應(yīng)用場(chǎng)景:組件

16.xss攻擊:比如一個(gè)神秘的URL沒有做轉(zhuǎn)義,加了一個(gè)script代碼,然后渲染到頁面中被執(zhí)行

1.什么情況下會(huì)產(chǎn)生xss攻擊:

1,渲染到頁面中,以script標(biāo)簽注入,不做轉(zhuǎn)義就會(huì)產(chǎn)生xss攻擊

2,a鏈接跳轉(zhuǎn)的時(shí)候,即使做了轉(zhuǎn)義也會(huì)產(chǎn)生xss攻擊,用白名單的方法解決

3,URL以?“javascript:”?開頭也會(huì)產(chǎn)生xss攻擊,用白名單的方法解決,禁止調(diào) “javascript:” 鏈接、非法scheme等

2.xss分類:

1,存儲(chǔ)型xss:(后端數(shù)據(jù)庫)用戶在提交數(shù)據(jù)時(shí),后端沒有做過濾,直接存儲(chǔ)到后端數(shù)據(jù)庫,最后前端從后端取用數(shù)據(jù)就會(huì)產(chǎn)生xss攻擊

2,反射性xss:(URL)

3,DOM型xss:(后端數(shù)據(jù)庫/前端存儲(chǔ)/URL)較前兩種,DOM型取出和執(zhí)行惡意代碼由瀏覽器端完成,屬于前端JavaScript自身的安全漏洞,而前兩種屬于服務(wù)器的安全漏洞。

17.crsf攻擊:


18.proxy:代理

1.proxy與Object.defineProperty對(duì)比:(vue3廢棄Object.defineProperty)

1.監(jiān)聽對(duì)象不需要遍歷,而Object.defineProperty需要遍歷

2.可以監(jiān)聽到新增加的屬性,而Object.defineProperty不可以

Object.defineProperty無法增加hobby屬性


proxy可以新增屬性

問題:Object.defineProperty無法監(jiān)聽數(shù)組的變化,除了proxy之外還有什么辦法可以監(jiān)聽?

答案:默認(rèn)將數(shù)組長(zhǎng)度設(shè)置為1000,監(jiān)聽0-999的屬性變化,如圖

2.監(jiān)聽push、shift、pop、unshift等方法:

18.閉包:能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)

實(shí)際運(yùn)用:回調(diào)函數(shù)

1,作用域:(執(zhí)行上下文)

1,全局作用域??

2,函數(shù)作用域


bind實(shí)例

2,call-bind-apply的理解與區(qū)別:改變this的指向

3,call,apply區(qū)別:傳入的參數(shù)不一樣,call需要穿入逐個(gè)的,apply可以傳一個(gè)數(shù)組,如下圖:

可以改為Math.max.call(null,...[arr1])? ?-------? ?展開預(yù)算符的拆包

4,應(yīng)用

1.將 偽數(shù)組 轉(zhuǎn)化成 數(shù)組

偽數(shù)組和數(shù)組的區(qū)別:偽數(shù)組看著是數(shù)組,但是并沒有方法,通過call改變它的指向

通過call改變它的指向,變成array的slice,轉(zhuǎn)成真正的數(shù)組,但是slice? ie8以下識(shí)別不了報(bào)錯(cuò),所以用for循環(huán),如下圖

答案:

前者是偽數(shù)組,后者是數(shù)組


arguments:

答案如下:

數(shù)組的拼接:

判斷數(shù)據(jù)類型:

封裝一個(gè)準(zhǔn)確判斷數(shù)據(jù)類型的函數(shù):

function getType(obj){

? let type? =typeof obj;

? if(type != "object"){

? ? return type;

? }

? returnObject.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1');

}



區(qū)分obj和array:

1.typeof(最低級(jí),最常用,只能判斷基本數(shù)據(jù)類型)

2.instanceof(一般用來判斷A是否是B的實(shí)例,表達(dá)式:A instanceof B? ? 是返回true,不是返回false)

3.constructor

4.Object.prototype.toString.call()
























19.構(gòu)造函數(shù):用來初始化對(duì)象的(——construct)


20.原型(prototype)與原型鏈(_proto_? ;? =>[[prototype]])

原型:函數(shù)特有

原型鏈:任何數(shù)據(jù)都有原型鏈,如數(shù)組,對(duì)象,number都是有的

從當(dāng)前實(shí)例屬性去查找,如果找到了就返回,否則順著原型鏈一層一層往上找,直到找到null為止,如果找到null都沒找到,就會(huì)報(bào)錯(cuò)

輸入:age , demo
原型鏈關(guān)系圖


21.數(shù)組的方法:

join():把數(shù)組轉(zhuǎn)換成字符串,eg:

push()和pop():添加到末尾 / 移除末尾,都是返回修改后的長(zhǎng)度,eg:

shift() 和 unshift():移除開頭項(xiàng),返回移除的項(xiàng) / 添加到開頭,返回長(zhǎng)度,eg:

sort():按字符串排序,按數(shù)值排序arr.sort(sortNumber),eg:

reverse():倒敘排序,eg:

concat():將參數(shù)添加到原數(shù)組,不改變?cè)瓟?shù)組,eg:

slice():根據(jù)下標(biāo)截取數(shù)組,組成新的數(shù)組,eg:

splice():刪除,插入,替換,eg:

indexOf()和 lastIndexOf() (ES5新增):從前往后查找 / 從后往前查找,eg:

forEach() (ES5新增):循環(huán)遍歷,eg:

map() (ES5新增):返回新數(shù)組,不改變?cè)瓟?shù)組,eg:

filter() (ES5新增):過濾,eg:

every() (ES5新增):判斷數(shù)組中每一項(xiàng)是否滿足條件,全部滿足返回true,只要有一個(gè)不滿足即返回false,eg:

some() (ES5新增):判斷數(shù)組中是否有一項(xiàng)滿足條件,有一項(xiàng)滿足返回true,全部不滿足即返回false,eg:

2.類數(shù)組轉(zhuǎn)化為數(shù)組:

args = Array.prototype.slice.call(arguments)


22.支付安全問題:非對(duì)稱,rsa ,一般數(shù)字簽名,然后sha或md5進(jìn)行加密


23.箭頭函數(shù):沒有{},不需要return


結(jié)果:3
結(jié)果是一個(gè)對(duì)象:{a:2}

1,函數(shù)體內(nèi)的this:

面試題:

2,不可以當(dāng)做構(gòu)造函數(shù)

3,arguments 是不可以的

4,不可以當(dāng)做 generator(迭代器)函數(shù)


24.ES6快速去重:

let arr = [11,23,45,55,11,23]

let item = [...new Set(arr)]

console.log(item)

25.Promise:

1.構(gòu)造函數(shù)同步執(zhí)行 -> .then()方法異步執(zhí)行



26.閉包:

優(yōu):1.使用閉包可以通過外部函數(shù)訪問內(nèi)部的函數(shù)值,提升作用域;2.便于鏈?zhǔn)秸{(diào)用可重復(fù)使用,不會(huì)造成全局污染;3.私有性,封裝性強(qiáng),有效防止了命名沖突

缺:1會(huì)常駐內(nèi)存,不會(huì)被回收,IE中容易造成內(nèi)存泄漏,慎用;

1.閉包是什么?? -----? 方法里返回一個(gè)方法

2.閉包的意義是什么?-----? ?1.延長(zhǎng)變量的生命周期? 2.創(chuàng)建私有環(huán)境----------項(xiàng)目運(yùn)行會(huì)生成一個(gè)臨時(shí)的變量對(duì)象AO(active object),會(huì)存儲(chǔ)所有的方法以及局部變量,全局變量不會(huì)在AO里面

3.作用域鏈:-----?層層查找,就近原則

打印出:小紅

4.vue 中 data() 為什么是一個(gè)函數(shù)???------? ?保證了每一個(gè)組件都有一個(gè)私有的作用域

就是一個(gè)閉包

27.防抖與節(jié)流

1.防抖:=》,在固定的時(shí)間內(nèi),時(shí)間只允許發(fā)生一次;

應(yīng)用場(chǎng)景:1.input框輸入自動(dòng)補(bǔ)全事件;2.頻繁的操作點(diǎn)贊或取消點(diǎn)贊之類;3.瀏覽器窗口大小改變后,只需窗口調(diào)整完成后,再執(zhí)行resize事件中的代碼,防止重復(fù)渲染;

實(shí)現(xiàn)原理:如果在500ms內(nèi)頻繁操作,則每次都會(huì)清除一次定時(shí)器然后重新創(chuàng)建一個(gè)。直到最后一次操作,然后等待500ms后發(fā)送ajax

2s之后才會(huì)發(fā)送請(qǐng)求

2.節(jié)流:=》保證一定時(shí)間內(nèi)只調(diào)用一次函數(shù)

應(yīng)用場(chǎng)景:1.提交表單;2.高頻的監(jiān)聽事件;

2.還有一種方法就是用時(shí)間戳節(jié)流

28.Vue2響應(yīng)式:

短路表達(dá)式:

29.MVC與MVVM

1.雙向數(shù)據(jù)綁定:

2.v-if和v-show的區(qū)別:

v-if:不滿足條件,不會(huì)渲染dom? =》 單次判斷

v-show:隱藏dom? ?=》 多次切換? ?-------? ?不能用于權(quán)限操作


30.數(shù)據(jù)類型:

原始數(shù)據(jù)類型:String,number,boolean,undefined,null

引用數(shù)據(jù)類型:數(shù)組,對(duì)象,函數(shù)

存儲(chǔ):

31.棧和堆:

棧:先進(jìn)后出,自動(dòng)分配釋放

堆:隊(duì)列優(yōu)先,先進(jìn)先出,動(dòng)態(tài)分配空間,一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時(shí)可能右OS回收,容易產(chǎn)生內(nèi)存泄漏

32.js內(nèi)置對(duì)象:

1.值屬性,這些全局屬性返回一個(gè)簡(jiǎn)單值,這些值沒有自己的屬性和方法。如:NaN,null,undefined,Infinity

2.函數(shù)屬性,全局函數(shù)可以直接調(diào)用,不需要再調(diào)用時(shí)指定所屬對(duì)象,結(jié)束后會(huì)將結(jié)果直接返回給調(diào)用者。如:eval(),isNaN()

3.基本對(duì)象,包括一般對(duì)象,函數(shù)對(duì)象和錯(cuò)誤對(duì)象。如:Object,F(xiàn)unction,Boolean,Symbol,Error

4.數(shù)字和日期對(duì)象。如:Number,Math,Date

5.字符串。如:String,RegExp

6.可索引的集合對(duì)象。如:Array

7.使用鍵的集合。如:Map,Set,WeakMap,WeakSet

8.矢量集合。如:SIMD

9.結(jié)構(gòu)化數(shù)據(jù)。如:Json

10.控制抽象對(duì)象。如:Promise,Generator

11.反射。如:Proxy,Reflect

12.國(guó)際化,為了支持多語言處理而加入 ECMAScript 的對(duì)象。如:Intl、Intl.Collator

13.WebAssembly

14.其他。如:arguments

33.diff算法中patch方法:




34.uni-app:

模擬器:夜神模擬器,在電腦模擬真機(jī)測(cè)試

uni的生命周期:onLaunch(只觸發(fā)一次),onshow(啟動(dòng)),onHide(前臺(tái)進(jìn)入后臺(tái)),onError(報(bào)錯(cuò))

頁面的生命周期:? onLoad(加載),onShow(顯示),onReady(初次渲染),onHide(隱藏),onUnload(監(jiān)聽頁面卸載) ,onResize(窗口尺寸),onPullDownRefresh(下拉刷新),onReachBottm(頁面滾動(dòng)),onTablemTap(點(diǎn)擊tab時(shí)觸發(fā)),onShareAPPMessage(分享)

組件的生命周期:beforeCreat(創(chuàng)建前),created(創(chuàng)建后),beforeMount(掛載前),Mounted(掛載后),beforeUpdate(更新前),undated(更新后),beforeDestroy(銷毀前),destroyed(銷毀后)

條件注釋:#ifdef H5/WP-WEIXIN? 開始? ? ?#endif結(jié)束

組件之間傳值:

1.父?jìng)髯樱?/b>props

2.子傳父:$emit

3.兄弟傳值:

獲取后臺(tái)數(shù)據(jù):

格式化年月日:

全局










35.


36.

37.

38.

39.








40.vue2---->vue3的變化

新特性:

1.以前data? 現(xiàn)在setup 然后return出去

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容