亚洲综合丝袜美腿_精品一区二区免费_日韩视频一区二区三区在线播放 _7878成人国产在线观看_精品一区二区三区视频在线观看_1024亚洲合集_日韩美女在线视频_欧美怡红院视频_国产一区 二区_亚洲视频 欧洲视频_99精品一区二区_亚洲va欧美va人人爽午夜_精品国产一区二区三区不卡_蜜臀av一区二区_欧美日韩精品一区二区_亚洲精品中文在线

當前位置: 首頁 > 軍事新聞 >

前端面試干貨:四月份前端面試題總指南(下篇

時間:2020-08-05 17:45來源:網絡整理 瀏覽:
接著昨天的前端面試題總結寫的哈,有在找工作的伙伴,建議仔細閱讀!10.什么是原型鏈原型:每個javascript創建的時候都會關聯另一個對象

接著昨天的前端面試題總結寫的哈,有在找工作的伙伴,建議仔細閱讀!

10.什么是原型鏈

原型:每個javascript創建的時候都會關聯另一個對象,這個對象就是原型,對象會從原型繼承屬性構造函數可以通過prototype去尋找他關聯的原型,A.prototype就是它關聯的原型對象,原型對象可以通過構造器constructor來尋找與自身關聯的構造函數

function A () {
}
A.prototype.constructor === A //true

原型鏈:原型鏈是由原型對象組成,每個對象都有proto屬性,指向該構造函數的原型,proto將對象連接起來組成了原型鏈原型鏈查找機制:當查找對象的屬性時,如果實例對象不存在該屬性,沿著原型鏈向上一級查找,直到找到object.prototype(也就是對象原型object.prototype為null),停止查找到返回undefined

function A () {
}
new A().__proto__ === A.prototype //true

原型上的屬性和方法被實例共享

function A () {
}
A.prototype.name = 'a'
var a = new A()
var b = new A()
a.name === b.name // true
a.__proto__.name === b.__proto__.name // true

instanceOf原理:instamceOf可以判斷實例對象的proto屬性與構造函數的prototype是不是同一地址(如果網頁中有多個全局環境就會不準確)

function _instanceOf(obj, type) {
var obj = obj.__proto__
var type = type.prototype
while(true) {
if (obj == null) {
return false
}
if (obj == type) {
return true
}
obj = obj.__proto__
}
}
var a = [1, 2, 3]
_instanceOf(a, Array)
11.深拷貝和淺拷貝

淺拷貝只是復制引用,新舊對象共享一塊內存,一般把第一層拷貝到一個對象上,改變其中一個另一個也會改變

var obj = {
name: 'a',
age: 18,
arr: [1, 2]
}
function shallowCopy(obj) {
var newObj = {};
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) { // 過濾掉原型上的屬性
newObj[prop] = obj[prop];
}
}
return newObj;
}
var obj1 = shallowCopy(obj)
var obj2 = obj
obj1.name = 'b'
obj2.age = 20
obj2.arr[0] = 3
obj1.arr[0] = 4
console.log(obj) // {name: "a", age: 20, arr: [4, 2]}
console.log(obj1) // {name: "b", age: 18, arr: [4, 2]}
console.log(obj2) // {name: "a", age: 20, arr: [4, 2]}

我們通過淺拷貝得到obj1,改變obj1的name,obj不會發生改變,通過賦值得到obj2,obj2改變age值obj的值也會被改變。說明賦值得到的對象只是改變了指針,淺拷貝是創建了新對象。

我們通過obj2和obj1都改變的值,發現obj,ob1,obj2都發生了改變,所以無論是淺拷貝還是賦值都會改變原始數據(淺拷貝只拷貝了一層對象的屬性)

深拷貝:復制并創建一個一摸一樣的對象(遞歸復制了所有層級),不共享內存,改變其中一個另一個不會改變

var obj = {
name: 'a',
age: 18,
arr: [1, 2]
}
function copy (obj) {
var newobj = Array.isArray(obj) ? [] : {};
if(typeof obj !== 'object'){
return;
}
for(var i in obj){
if (obj.hasOwnProperty(i)) {
newobj[i] = typeof obj[i] === 'object' ? copy(obj[i]) : obj[i];
}
}
return newobj
}
var copyObj = copy(obj)
copyObj.arr[0] = 3
console.log(copyObj) //{name: "a", age: 20, arr: [3, 2]}
console.log(obj) //{name: "a", age: 20, arr: [1, 2]}
12.實現繼承

原型鏈繼承(在實例化一個類時,新創建的對象復制了父類構造函數的屬性和方法,并將proto指向父類的原型對象,當在子類上找不到對應的屬性和方法時,將會在父類實例上去找。)

function Big () {
this.age = [1, 2, 3]
}
Big.prototype.getAge = function () {
return this.age
}
function Small() {}
Small.prototype = new Big()
var small = new Small()
console.log(small.age) // [1, 2, 3]
console.log(small.getAge()) // [1, 2, 3]

缺點1:引用缺陷(修改其中一個Small實例的父類變量會影響所有繼承Big的實例)

small.age[0] = 12
var small1 = new Small()
console.log(small1.age) // [12, 2, 3]
console.log(small.age) // [12, 2, 3]

缺點2:無法為不同的實例初始化繼承來的屬性

function Big (name) {
this.age = [1, 2, 3]
this.name = name
}
Big.prototype.getAge = function () {
return this.age
}
function Small() {}
Small.prototype = new Big('small')
var small = new Small()
var small1 = new Small()
console.log(small1.name) // small
console.log(small.name) // small

構造函數繼承(在子類的構造函數中執行父類的構造函數,并為其綁定子類的this,讓父類的構造函數把成員屬性和方法都掛到子類的this上)

function Big (name) {
this.age = [1, 2, 3]
this.name = name
}
Big.prototype.getAge = function () {
return this.age
}
function Small(name) {
Big.apply(this, arguments)
}
var small = new Small('small')
var small1 = new Small('small1')
console.log(small.name) // small
console.log(small1.name) // small1
small.age[0] = 12
console.log(small.age) // [12, 2, 3]
console.log(small1.age) // [1, 2, 3]

缺點:無法訪問原型上的方法

small.getAge() //small.getAge is not a function組合式繼承(將原型鏈繼承和構造函數繼承組合到一起, 綜合了原型鏈繼承和構造函數繼承的優點)

function Big (name) {
this.age = [1, 2, 3]
this.name = name
}
Big.prototype.getAge = function () {
return this.age
}
function Small(name) {
Big.apply(this, arguments)
}
Small.prototype = new Big()
var small = new Small('small')
var small1 = new Small('small1')
console.log(small.name) // small
console.log(small1.name) // small1
small.age[0] = 12
console.log(small.age) // [12, 2, 3]
console.log(small1.age) // [1, 2, 3]
console.log(small.getAge()) // [12, 2, 3]
console.log(small1.getAge()) // [1, 2, 3]

小缺點:調用了兩次父類構造函數

寄生組合式繼承(在組合繼承的基礎上減少一次多余的調用父類構造函數)

function Big (name) {
this.age = [1, 2, 3]
this.name = name
}
Big.prototype.getAge = function () {
return this.age
}
function Small(name) {
Big.apply(this, arguments)
}
// 對父類原型進行拷貝,否則子類原型和父類原型指向同一個對象,修改子類原型會影響父類
Small.prototype = Object.create(Big.prototype)
var small = new Small('small')
var small1 = new Small('small1')
console.log(small.name) // small
console.log(small1.name) // small1
small.age[0] = 12
console.log(small.age) // [12, 2, 3]
console.log(small1.age) // [1, 2, 3]
console.log(small.getAge()) // [12, 2, 3]
console.log(small1.getAge()) // [1, 2, 3]

注意:對父類原型進行拷貝后賦值給子類原型,因此Small上的constructor屬性被重寫,需要修復Small.prototype.constructor = Dog;

extends繼承(class和extends是es6新增的,class創建一個類,extends實現繼承)

class Big {
constructor(age) {
this.age = age;
}
getAge () {
return this.age
}
}
class Small extends Big {
constructor(age) {
super(age)
}
}
var small = new Small([1, 2, 3])
var small1 = new Small([12, 2, 3])
small.age[0] = 13
console.log(small.age) // [13, 2, 3]
console.log(small.getAge()) // [13, 2, 3]
console.log(small1.age) // [12, 2, 3]
console.log(small1.getAge()) // [12, 2, 3]
瀏覽器網絡1.常用http狀態碼

200 成功狀態碼301 永久重定向,302 臨時重定向400 請求語法錯誤, 401 請求需要http認證,403 不允許訪問資源,404 資源未找到500 服務器內部錯誤,502 訪問時出錯,503 服務器忙,無法響應

2.https原理

http協議:客戶端瀏覽器與web服務器之間的應用層通訊協議https協議:HTTP+SSL/TLS,http下加入SSL層,https安全基礎時SSL,用于安全的HTTP數據傳輸https優勢:內容經過對稱加密,每個連接會生成唯一的加密密鑰,內容經過完整性校驗,第三方無法偽造身份使用對稱加密(加密和解密使用的是同一個密鑰)被中間人攔截,中間人可以獲取密鑰,就可以對傳輸的信息進行窺視和篡改使用非對稱密鑰(雙方必須協商一對密鑰,一個私鑰和一個公鑰)用私鑰加密的數據,只有對應的公鑰才能解密,用公鑰加密的數據,只有對應的私鑰才能解密,弊端:RSA算法很慢非對稱密鑰+對稱密鑰(結合兩者優點)客戶端獲取公鑰確認服務器身份通過SSL證書,客戶端接受到服務端發來的SSL證書給客戶端。

3.前端安全

XSS攻擊:注入惡意代碼來攻擊。攻擊者在目標網站上注入惡意代碼,被攻擊者登陸網站執行這些惡意代碼,這些腳本可以讀取 cookie,session tokens,或者其它敏感的網站信息,對用戶進行釣魚欺詐(打開新標簽跳轉,新標簽存在惡意代碼,跳轉到偽造的頁面),網頁植入廣告等。XSS攻擊防御手段:禁止JavaScript讀取某些敏感cookie,限制輸入內容和長度控制,檢測是否有惡意代碼注入CSRF攻擊:誘導用戶進入第三方,獲取到登錄憑證,冒充用戶對被攻擊的站點執行操作,導致賬號被劫持防御CSRF攻擊:驗證token(請求服務器時,返回token,每個請求需要加上token),

5.瀏覽器緩存

瀏覽器每次發起請求,都會在瀏覽器緩存中查找請求結果和緩存標識,瀏覽器每次拿到的數據會將結果和標識存入瀏覽器中強制緩存:當瀏覽器向服務器發起請求時,服務器會將緩存規則放入HTTP響應報文的HTTP頭中和請求結果一起返回給瀏覽器,控制強制緩存的字段分別是Expires和Cache-Control,其中Cache-Control優先級比Expires高。協商緩存:強制緩存失效后,瀏覽器攜帶緩存標識向服務器發起請求,由服務器根據緩存標識決定是否使用緩存的過程。(協商緩存生效,服務器返回304,資源未更新,協商緩存失效,服務器返回200,資源更新重新緩存)詳情可以看這篇文章徹底理解瀏覽器的緩存機制

框架1.什么是vue生命周期

每個vue實例在被創建之前都要經過一系列初始化過程,這個過程就是vue生命周期。(開始創建、初始化數據、編譯模板、掛載Dom→渲染、更新→渲染、卸載等一系列過程)beforeCreate: 完成實例初始化,this指向被創建的實例,data,computed,watch,mothods方法和數據都不可以訪問created: 實例創建完成,data,computed,watch,methods可被訪問,未掛載dom,可對data進行操作,操作dom需放到nextTick中beforeMount: 有了el,找到對應的template編譯成render函數mounted: 完成掛載dom和渲染,可以對dom進行操作,并獲取到dom節點,可以發起后端請求拿到數據beforeUpdate: 數據更新之前訪問現有dom,可以手動移除已添加事件的監聽updated: 組件dom已完成更新,可執行依賴的dom 操作,不要操作數據會陷入死循環activated: keep-alive緩存組件激活時調用deactivated keep-alive移除時調用beforeDestroy: 實例銷毀之前調用,可以銷毀定時器destroyed: 組件已經被銷毀

2.第一次頁面加載會觸發哪幾個鉤子

會觸發beforeCreate, created, beforeMount, mounted

3.created和mounted的區別

created:在模板渲染成html前調用,即通常初始化某些屬性值,然后再渲染成視圖。mounted:在模板渲染成html后調用,通常是初始化頁面完成后,再對html的dom節點進行一些需要的操作。

4.hash模式和history模式

在vue的路由配置中有mode選項 最直觀的區別就是在url中 hash 帶了一個很丑的 # 而history是沒有#的。hash 雖然出現在 URL 中,但不會被包括在 HTTP 請求中,對后端完全沒有影響,因此改變 hash 不會重新加載頁面。history利用了HTML5中新增的 pushState() 和 replaceState() 方法。這兩個方法應用于瀏覽器的歷史記錄棧,在當前已有的 back、forward、go 的基礎之上,它們提供了對歷史記錄進行修改的功能。只是當它們執行修改時,雖然改變了當前的 URL,但瀏覽器不會立即向后端發送請求。history模式需要后臺配置支持

5.computed和watch區別

computed: 依賴的屬性值發生改變才會重新計算,得出最后的值watch: 當依賴的data的數據變化,執行回調(可以觀察數據的某些變化,來做一些事情)

6.vue中key的作用

key是給每一個vnode的唯一id,可以依靠key,更準確, 更快的拿到oldVnode中對應的vnode節點。

7.vue的兩個核心點

數據驅動:ViewModel,保證視圖的一致性組件系統:組件化,封裝可復用的組件,頁面上每個獨立的區域都可以看成一個組件,組件可以自由組合成頁面

8.SPA首屏加載慢如何解決

使用路由懶加載使用SSR渲染優化webpack打包體積圖片使用CDN加速

9.vue禁止彈窗后的屏幕滾動

主要是是寫一個點擊出現彈窗禁止屏幕滾動的方法,關閉彈窗屏幕可以正常滾動

methods : {
//禁止滾動
stop(){
var mo=function(e){e.preventDefault();};
document.body.style.overflow='hidden';
document.addEventListener("touchmove",mo,false);//禁止頁面滑動
},
/取消滑動限制/
move(){
var mo=function(e){e.preventDefault();};
document.body.style.overflow='';//出現滾動條
document.removeEventListener("touchmove",mo,false);
}
}
10.Vuex中actions和mutations的區別

action主要處理的是異步的操作,mutation必須同步執行,而action就不受這樣的限制,也就是說action中我們既可以處理同步,也可以處理異步的操作action改變狀態,最后是通過提交mutation

如果有錯誤或者不嚴謹的地方,請務必給予指正,十分感謝。


前端面試干貨:四月份前端面試題總指南(下篇)

推薦內容
亚洲综合丝袜美腿_精品一区二区免费_日韩视频一区二区三区在线播放 _7878成人国产在线观看_精品一区二区三区视频在线观看_1024亚洲合集_日韩美女在线视频_欧美怡红院视频_国产一区 二区_亚洲视频 欧洲视频_99精品一区二区_亚洲va欧美va人人爽午夜_精品国产一区二区三区不卡_蜜臀av一区二区_欧美日韩精品一区二区_亚洲精品中文在线
日本欧美肥老太交大片| 亚洲精品国产第一综合99久久| 亚洲天堂久久久久久久| 日韩情涩欧美日韩视频| 中文字幕在线一区| 免费成人在线网站| 色婷婷国产精品| 久久久激情视频| 日韩经典中文字幕一区| 色999日韩国产欧美一区二区| 久久精品亚洲国产奇米99| 日韩国产欧美在线视频| 一本色道久久综合亚洲aⅴ蜜桃| 久久久久久久久久久久久女国产乱 | 欧美性xxxxxx少妇| 欧美—级在线免费片| 精品一区二区三区免费| 7777精品伊人久久久大香线蕉完整版 | 日韩免费一区二区| 亚洲成人自拍一区| 色婷婷激情一区二区三区| 欧美极品xxx| 国产剧情一区在线| 欧美大片拔萝卜| 日韩精彩视频在线观看| 欧美日本精品一区二区三区| 亚洲精品高清在线| 91丨九色丨尤物| 国产精品国产精品国产专区不片| 国产一区二区视频在线播放| 欧美不卡一区二区三区| 免费看黄色91| 欧美一区永久视频免费观看| 日韩影视精彩在线| 在线成人午夜影院| 午夜精品久久久久久久99水蜜桃| 在线一区二区三区四区| 日韩理论片网站| 国产一区二区精品在线观看| 日韩精品一区二区三区蜜臀| 免费成人在线观看视频| 日韩三级视频中文字幕| 日本视频在线一区| 欧美一区二区视频观看视频| 一区二区三区**美女毛片| 日本久久一区二区三区| 亚洲综合免费观看高清完整版在线| 色88888久久久久久影院按摩| 亚洲欧美激情视频在线观看一区二区三区 | 国产主播一区二区| 欧美r级在线观看| 精品一区二区国语对白| 久久夜色精品国产噜噜av| 国产福利一区在线| 国产精品色哟哟| 99久久亚洲一区二区三区青草| 国产精品亲子伦对白| 99久久精品免费看国产免费软件| 日韩久久一区二区| 欧美日韩亚洲综合| 亚洲精品国产视频| 欧美精品亚洲一区二区在线播放| 日本色综合中文字幕| 精品国产乱码久久久久久久| 国内精品写真在线观看| 国产人伦精品一区二区| 99精品欧美一区二区蜜桃免费| 亚洲欧美综合在线精品| 欧美四级电影网| 青青草91视频| 国产欧美一区二区三区鸳鸯浴 | 99久久久无码国产精品| 一个色在线综合| 3d成人动漫网站| 韩国视频一区二区| 最好看的中文字幕久久| 欧美日韩精品系列| 韩国午夜理伦三级不卡影院| 最新高清无码专区| 7777精品伊人久久久大香线蕉完整版 | 一区二区三区中文字幕| 国产中文字幕精品| 欧美激情一区三区| 另类小说视频一区二区| 中文字幕乱码亚洲精品一区| 91在线免费视频观看| 亚洲综合色成人| 91精彩视频在线| 久久91精品久久久久久秒播| 久久久久综合网| 国产91精品一区二区| 中文字幕一区二区三区四区| 在线欧美日韩国产| 日本不卡视频在线| 久久久久久久电影| 91九色最新地址| 天堂精品中文字幕在线| 亚洲精品一区二区三区影院| 日本不卡一区二区三区高清视频| 精品动漫一区二区三区在线观看| 国产91精品在线观看| 亚洲美女区一区| 亚洲精品一区二区三区在线观看| 99视频在线精品| 天天综合色天天综合色h| 精品免费视频一区二区| 99免费精品视频| 天堂蜜桃91精品| 欧美激情一区不卡| 日韩一区二区电影在线| 不卡的av在线| 天堂久久久久va久久久久| 国产欧美视频一区二区| 欧美日韩中文字幕一区二区| 国产综合色在线视频区| 亚洲视频中文字幕| 久久久美女毛片| 精品污污网站免费看| 精品一区二区三区的国产在线播放| 综合电影一区二区三区 | 中文字幕在线播放不卡一区| 欧洲一区二区av| 久草在线在线精品观看| 一区二区三区精品在线观看| 精品国产91久久久久久久妲己| 色综合久久综合网| 麻豆freexxxx性91精品| 1区2区3区精品视频| 久久久一区二区| 欧美亚洲自拍偷拍| 国产成人免费在线观看| 五月婷婷激情综合网| 国产精品久久久久久户外露出| 91麻豆精品国产自产在线观看一区| 风间由美一区二区三区在线观看 | 日韩av中文字幕一区二区三区| 久久精品日产第一区二区三区高清版 | 成人av电影在线播放| 五月综合激情婷婷六月色窝| 国产精品麻豆一区二区| 欧美xingq一区二区| 欧美性受极品xxxx喷水| 国产成人精品一区二| 日韩不卡手机在线v区| 视频一区视频二区中文| 精品国产伦一区二区三区观看体验| 91麻豆国产精品久久| 国产一区二区视频在线| 日韩电影免费一区| 亚洲免费观看高清完整版在线观看 | 成人av在线一区二区| 欧美a级理论片| 亚洲综合一区二区| 国产精品久久久久久久久动漫 | 91国内精品野花午夜精品| 国产成+人+日韩+欧美+亚洲| 男男视频亚洲欧美| 亚洲在线视频一区| 亚洲欧洲另类国产综合| 久久精品视频在线看| 日韩欧美国产一区在线观看| 欧洲一区在线观看| 99久久综合狠狠综合久久| 国产九九视频一区二区三区| 日本不卡的三区四区五区| 亚洲综合一区二区三区| 成人看片黄a免费看在线| 日本成人在线一区| 日韩精品每日更新| 无码av免费一区二区三区试看 | 久久国产精品第一页| 欧美夫妻性生活| 日本福利一区二区| 99精品黄色片免费大全| 成人国产精品免费网站| 国产成人一区在线| 国产一区二区三区观看| 国产自产2019最新不卡| 激情综合色综合久久| 日韩av中文字幕一区二区三区| 午夜精品国产更新| 亚洲第四色夜色| 亚洲香蕉伊在人在线观| 亚洲成人777| 亚洲成人资源在线| 久久久青草青青国产亚洲免观| 日韩视频在线一区二区| 日韩一区国产二区欧美三区| 69av一区二区三区| 欧美日韩国产另类不卡| 日韩视频免费观看高清完整版 | 日韩电影在线观看网站| 欧美亚洲综合久久| 99久久国产免费看| 成人涩涩免费视频| 色综合久久精品| 91福利资源站| 欧美三日本三级三级在线播放| 欧美亚洲综合色| 欧美日韩国产首页在线观看|