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