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無法監(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ù)作用域

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


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


4,應(yīng)用:
1.將 偽數(shù)組 轉(zhuǎn)化成 數(shù)組
偽數(shù)組和數(shù)組的區(qū)別:偽數(shù)組看著是數(shù)組,但是并沒有方法,通過call改變它的指向


答案:

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ò)



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


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è)私有的作用域


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



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出去