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)用:就是簡化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é)果是:喬丹慰于,科比
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ù)組長度設(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():添加到末尾 / 移除末尾,都是返回修改后的長度轻黑,eg:
shift() 和 unshift():移除開頭項(xiàng)糊肤,返回移除的項(xià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.延長變量的生命周期? 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è)簡單值旅掂,這些值沒有自己的屬性和方法赏胚。如: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.國際化慕淡,為了支持多語言處理而加入 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.父傳子:props
2.子傳父:$emit
3.兄弟傳值:
獲取后臺(tái)數(shù)據(jù):
格式化年月日:
35.
36.
37.
38.
39.
40.vue2---->vue3的變化
新特性:
1.以前data? 現(xiàn)在setup 然后return出去