1. 程式人生 > >雲天勵飛2019秋招前端涼經

雲天勵飛2019秋招前端涼經

是一位漂亮的前端小姐姐面的,哈哈哈,嗨森。面試難度總體來說屬於中等,比較偏重基礎,但即使是這樣,我還是涼了。

1.js有哪些基礎型別資料?ES6中新增了哪一個資料型別?

ES6新增了Symbol,我特麼記混了,說成了Global,不知道哪來的勇氣....

它表示獨一無二的值,一定要記得它是一個數據型別而不是物件!

var a = Symbol();
var b = Symbol();
console.log(a);    // Symbol()
console.log(b);    // Symbol()
console.log(a == b)   // false

需要注意的地方:

① symbol 資料型別不能夠轉換為數值型別,否則會報錯 
② symbol 資料型別不能用new 操作符去宣告,因為它本身是一個原始值,而不是物件 
③ symbol 資料型別不能夠和字串進行拼接,否則會報錯 
④ symbol 資料型別可以轉化為布林型別 

2.在控制檯輸出console.log(null == undefined)多少?為什麼?

3.說說你對複雜型別資料和基礎型別資料的理解和區別?

我在這裡只回答了一個區別,就是基礎資料型別儲存在棧中,而複雜型別資料儲存在堆中。詳細的解釋就是基礎資料型別的資料名和資料值儲存在棧中,複雜型別資料的資料名儲存在棧中,並存儲一個堆地址,屬性和值儲存在堆中。在獲取複雜資料型別的值的時候,先在棧中獲取地址,然後再在堆中獲取值。

補充:第二個區別就是,基礎資料作為函式引數時,函式對引數的修改不會改變外部變數的值;而複雜資料會。

4.ajax請求資料的步驟?

5.給你兩個物件,怎麼判斷它們的屬性一樣?

當時的思路是通過Object.keys()或者for...in...遍歷出健名,但是忽略了值。後來想通過toString()的方法去比較,但是好像是錯誤的,因為Object.toString()的值為[object Object]。

後來小姐姐要跳過這個問題,我說能不能給點提示,她說用JSON的方法就可以了。頓時恍然大悟,用JSON.stringigy()就可以解決了,我真蠢,居然沒想到,謝特!

6.給你一個數組arr=[1,2,[3,4,5]],你怎麼解析成一個扁平的陣列,即arr=[1,2,3,4,5]?

我當時想到的是將其先轉化成一個字串,然後用字串的方法split()解決,但是數組裡的每個元素的資料型別變成了字串型別,而不是數字型別,所以並不是一個理想的方法。

後來小姐姐,說了可以使用filter和map方法實現

var arr = [1,2,[3,4,5]];
var res1 = [];
// filter和map方法接受的是一個函式為引數,且返回一個函式處理之後的陣列
// function(currentValue, index,arr)	必須。函式,陣列中的每個元素都會執行這個函式
// 函式引數
// currentValue	必須。當前元素的值
// index			可選。當前元素的索引值
// arr			可選。當前元素屬於的陣列物件
arr.filter(analysis1);
function analysis1(item){
	if(typeof item !== 'object'){
		res1.push(item);
	}else{
		item.filter(analysis1);
	}
}
console.log(res1)//[ 1, 2, 3, 4, 5 ]

var res2 = [];
arr.map(analysis2);
function analysis2(item){
	if(typeof item !== 'object'){
		res2.push(item);
	}else{
		item.filter(analysis2);
	}
}
console.log(res2)//[ 1, 2, 3, 4, 5 ]

var arr = [1,2,[3,4,5]];
var res3 = arr.toString();
res3 = res3.split(',')
console.log(res3)//[ '1', '2', '3', '4', '5' ]

7.http快取原理?

8.先有三個請求a,b,c,你怎麼實現在a,b請求成功後再請求c?

我的回答是先宣告一個請求是否成功的標識,即var suc = false;然後判斷在a,b請求之後的資料是否為空,不為空,則令suc=true,最後利用識別符號suc判斷是否決定發出請求c;後來又補充了,說也可以用promise實現吧...

9.原型和原型鏈你是怎麼理解的?object的原型是什麼?

10.call,apply,bind的區別?主要說下bind。

11.new操作符都幹了些什麼?

12.說說你對this使用的理解?

13.陣列和連結串列的區別?

14.看你的實習好像用vue用的比較多,你能說說vue的資料雙向繫結原理嗎?