前端面試題

2021-09-13 03:47:10 字數 3288 閱讀 8696

於今年3月份辭職之後找工作,整理一下我的面試中遇到的各種面試題。

關於盒子模型?html中的每乙個元素都可以看作是乙個盒模型,在網頁中乙個元素由content , padding , border,margin組成,這四部分整體組成乙個盒子模型;當元素使用了padding的時候我習慣性加上box-sizing:border-box;

比如乙個寬高都是100px,padding:10px;border:10px;margin:10px的div,在ie瀏覽器中固定寬高的元素不會被padding撐開,所以ie中這個div的盒子模型是width:100px+border:10px+margin:10px;

一般情況下使用padding的時候會連用box-sizing:border-box;這個屬性的意義是表示這個元素去遵循padding 在內部不會撐大寬高的盒模型;

如何實現乙個未知寬高的元素的居中?假設div的寬高都是100px;

1、div

div父級標籤定義height

可以解決父級標籤獲取不到高度的問題;

overflow:hidden

父級標籤加overflow:hidden;

vue的生命週期?vue的完整的生命週期從建立,到初始化資料,再到編譯,掛載dom,渲染,更新,銷毀等一系列的乙個過程叫做vue的生命週期

建立前後

beforecreate

基本不用的,el和data還沒有初始化,只是乙個空殼,無法訪問到資料和dom

created

data初始化完成,el沒有,一般在這裡做初始化資料的獲取也可以更改資料,不會觸發updated函式;

掛載前後

beforemount

data和el完成初始化;相關的render函式第一次被呼叫

mounted

基本上的資料載入請求都在這一階段,完成掛載

更新前後

beforeupdate

資料更新前

updated

資料更新

銷毀前後

beforedestory

刪除前destoryed

刪除vue資料雙向繫結的原理?利用了object.defineproperty()這個方法重新定義了物件獲取屬性值(get)和設定屬性值(set)的操作來實現的。

vue的路由實現?1、利用url中的「#」;

2、利用history在html5中新增的方法;

(平常按步驟搭建的vue專案在執行的時候url中會有#,在ruoter的index.js檔案的router下寫mode:'history',執行則無#)

vue中的key?1、給每個節點做唯一標識;

2、高新更新dom;

3、用v-for更新已經渲染的元素的時候採用就地復用的策略,如果資料項的順序被改變,vue將不會移動dom元素來匹配資料項的順序,而是簡單的復用此處的每個元素,確保他在特定的索引值下顯示已被渲染過的每個元素。

vue中的指令及用法?v-if

條件判斷,條件為false的時候,元素不會渲染;

v-else

與v-if連用,兩者只會顯示乙個

v-show

條件判斷,條件為false的時候也會渲染html

v-for

基於乙個陣列渲染出乙個列表,相當於js裡面的遍歷,v-for= '( item ,key,index) in list',裡面的in也可以寫成 of

v-bind

動態的繫結乙個或者多個屬性,簡寫為『:』,例如『:class=''』 , ':style', ':src='

v-on

監聽事件,簡寫為『@』,例如『@click=show』, '@submit=submit', 

v-model

一般用於表單上面,可以很輕鬆的實現資料的雙向繫結;例如:

} data() 

document.getelementsbytagname("html")[0].style.fontsize = 100 * ( cw / 720) + 'px'

em會繼承父級字型大小,改變某個節點的字型大小很可能會影響整個頁面;

px絕對單位,按照螢幕畫素精確計算;

js的深轉殖和淺轉殖?淺轉殖

假設b複製來自a,當a改變的時候,b也會發生變化,就叫淺轉殖;

例如:var a=;

var bs=a;

bs.name='ef';

console.log(a,bs,'ab')==》ef,ef,ab

解決方式:

1、用運算子...

var a=;

var bs=;

bs.name='ef';

console.log(a,bs,'ab')==》ddd,ef,ab

2、object.assgin()

var a=;

var bs=object.assgin({},a);

bs.name='ef';

console.log(a,bs,'ab');==>ddd,ef,ab

1、2只解決了第一層的拷貝問題;

深轉殖假設b沒有變化,就是深轉殖;

1、json.parse(json.stringify)

var a=};

var bs=json.parse(json.stringify(a));

bs.name.first='ef';

console.log(a,bs,'ab')==》a沒變,b變了

該方法的缺點:

意思是:假設a中物件是undefined,symbol,函式等,console.log(bs),物件為這些的bs的陣列裡面不顯示;

2、使用 lodash 的深拷貝函式,可以解決上面的缺點;

function deepclone(obj)

reflect.ownkeys(newobj).foreach(key => {

newobj[key] = isobject(obj[key]) ? deepclone(obj[key]) : obj[key]

return newobj

//例子

let obj = {

a: [1, 2, 3],

b: {

c: 2,

d: undefined

let newobj = deepclone(obj)

newobj.b.c = 1

console.log(obj,newobj) 

前端面試題

sprites是什麼和為什麼要使用他們?css 精靈 把一堆小的整合到一張大的上,減輕伺服器對的請求數量 有可能替代sprites的方法是什麼?svg圖示,字型圖示,字元編碼等等。1 在div排版的時候,假設現在是100px的寬,我在盒子左側用padding left留個10px的白,div就撐開了...

前端面試題

行內元素有哪些?塊級元素有哪些?空 void 元素有哪些?link和 import的區別是?常見相容性問題?含移動端 html5的離線儲存?描寫一段語義化的html 吧 html5的form如何關閉自動完成功能?什麼是閉包 closure 為什麼要用?localstorage和sessionstor...

前端面試題

朋友碰到的筆試題,在此記錄一下,並且記下碰到的有難點但是自己沒注意的到的面試題!function isnumber x else sum 2,3 5 sum 2 3 5 請寫出sum函式的具體實現。function sum a,c return a c 該題考查的是乙個以前沒接觸過的東西,叫做柯里化...