前端面試題

2021-09-29 17:44:38 字數 3789 閱讀 8308

1,講講淺拷貝、深拷貝之間的區別

核心:引用型別和非引用型別的拷貝結果是不同的
淺拷貝只是拷貝基本型別的資料,如果父物件的屬性等於陣列或另乙個物件,那麼實際上,子物件獲得的只是乙個記憶體位址,因此存在父物件被篡改的可能,淺拷貝只複製指向某個物件的指標,而不複製物件本身,新舊物件還是共享同一塊記憶體

//簡單的淺拷貝

var a = 1;

var b = a;//賦值

console.log(b) //1

a = 2;//改變a的值

console.log(b) //1

json.parse() + json.stringify()(缺點:只能處理可以被列舉的屬性);

for in 迴圈遞迴遍歷;

深拷貝就是能夠實現真正意義上的陣列和物件的拷貝。遞迴呼叫"淺拷貝"。(深拷貝會另外創造乙個一模一樣的物件,新物件跟原物件不共享記憶體,修改新物件不會改到原物件)

object.defineproperties (定義屬性)、object.getownpropertydescriptors(es2017,獲取物件的多個屬性)、object.getownpropertydescriptor(老一點,獲取物件的單個屬性的屬性),但babel可以解決。

2、原型鏈的prototype和__proto__的區別;

所有東西的原型鏈向上延伸到原型鏈的頂端,是什麼;

function本身就是函式,

function.__proto__

是標準的內建物件function.prototype,

function.prototype.__proto__

是標準的內建物件object.prototype

3、如果想實現繼承,說幾種你知道的方法?

原型鏈繼承

3、var、let、const的區別;

高階一:說到變數提公升,class 宣告乙個類時,存在變數提公升麼?為什麼?

高階二:const 宣告乙個物件,如何讓物件內部的屬性的值也無法改變?

高階三:全域性作用域?函式作用域?塊級作用域?作用域鏈?

js有哪些基本資料型別?

高階:es6新增的原型資料型別symbol,特點是什麼;

高階2:如何宣告兩個相等的symbol變數?

let a = symbol.for('a');

let b = symbol.for('a');

a === b; // true

#### promise是什麼?

* 是非同步程式設計的一種解決方案;

* 所謂promise,簡單說就是乙個容器,裡面儲存著某個未來才會結束的事件(通常是乙個非同步操作)的結果。從語法上說,promise 是乙個物件,從它可以獲取非同步操作的訊息。

一般什麼時候使用?

* 處理非同步請求時使用,比如ajax請求;

有哪些狀態?

* 狀態有pending、resolved、rejected;

怎麼捕獲他的錯誤?

* 最後寫catch;

* then裡面第二個引數可以捕獲;

如果內部拋錯,但是沒有**獲,這個沒**獲的錯誤接下來會發生什麼事情?

* 冒泡;

能不能被try catch捕獲?為什麼?

* 不能,因為是非同步程式設計。

能不能被window.onerror捕獲?

* 不能

new promise((resolve,reject)=>throw new error('a')).then(fn1).then(fn2,fn3).catch(fn4) 這個函式,會執行哪些函式

* fn3,沒了

4,從輸入url到瀏覽器顯示頁面發生了什麼。(特別注意)

這題可以了解一下,儘管面試時候造飛船,真的幹活可能還是擰螺絲。
在瀏覽器還沒接收到完整的html檔案時,它就開始渲染頁面了,在遇到外部鏈入的指令碼標籤或樣式標籤或時,會再次傳送http請求重複上述的步驟。在收到css檔案後會對已經渲染的頁面重新渲染,加入它們應有的樣式,檔案載入完立刻顯示在相應位置。在這一過程中可能會觸發頁面的重繪或重排。
5、async、await 的使用場景是什麼?

連續的非同步請求,下一步的非同步請求依賴於前一步的非同步請求結果;

高階一:假如有a、b、c三個非同步請求,非同步請求c依賴於非同步請求a和b的結果(即a和b完成後再發起c),那麼你會如何實現它?

promise.all();

設定狀態分別標記a和b,a、b完成後會去修改自己的完成標記,然後檢查所有的狀態標記,假如都是完成狀態,然後去執行非同步請求c。

6、promise是什麼?

是非同步程式設計的一種解決方案;

所謂promise,簡單說就是乙個容器,裡面儲存著某個未來才會結束的事件(通常是乙個非同步操作)的結果。從語法上說,promise 是乙個物件,從它可以獲取非同步操作的訊息。

一般什麼時候使用?

處理非同步請求時使用,比如ajax請求;

有哪些狀態?

狀態有pending、resolved、rejected;

怎麼捕獲他的錯誤?

最後寫catch;

then裡面第二個引數可以捕獲;

如果內部拋錯,但是沒有**獲,這個沒**獲的錯誤接下來會發生什麼事情?

冒泡;能不能被try catch捕獲?為什麼?

不能,因為是非同步程式設計。

能不能被window.onerror捕獲?

不能new promise((resolve,reject)=>throw new error('a')).then(fn1).then(fn2,fn3).catch(fn4) 這個函式,會執行哪些函式 * fn3,沒了

7、數字計算:請問在js中,輸入表示式0.1 + 0.2的結果是什麼?

高階一:為什麼?

高階二:浮點數是怎麼儲存的(本問題比較難)(可以跳到高階三,比本題簡單)

而double型別就是雙精度浮點數,這種指使用64位(8位元組)來儲存乙個浮點數。

根據規定,這64位bit裡,分為三部分:

第一部分(1bit):

符號位,表示正負,正數為0,負數為1。

第二部分(11bit):

階碼位,也可以稱為指數字。

第三部分(52bit)

尾數字,即表示實際數字的。

假如正負符號的值為s,正數s為1,負數s為-1;

假如指數字表示的值為e(計算後),指數字表示的值為2的e次方;

假如尾數字表示的值為m,尾數字表示的值為m;

根據科學表示法,任何乙個範圍內的浮點數可以通過以下方法來表示:(別問我為啥,我沒去谷歌……)

浮點數 = s * math.pow(2,e) * m;

高階三:我們在實際開發中,如果遇見了這種浮點數計算的情況,怎麼處理比較合適?

8、移動端開發的時候,一般怎麼實現自適應?

高階一:他們的特點分別是什麼?或者說實現原理是什麼?

高階二:彈出輸入框會發生定位錯誤,fixed布局,怎麼解決?

9、在我們將開發好的頁面,進入線上環境的時候,肯定要最大化效能優化,那麼我們常見的做法有哪些?

10、使用 雪碧圖 和 base64字串 你覺得哪個好?為什麼?

高階一:如果你決定使用雪碧圖/base64字串,你會怎麼做?

1、2、

前端面試題

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 該題考查的是乙個以前沒接觸過的東西,叫做柯里化...