前端面試總結(1) JS篇

2021-09-12 11:31:24 字數 3744 閱讀 3321

因為各種原因,今年過年來就提離職了,又要開始面試了,心裡還是比較慌的,面試了兩三周的樣子,總共面試了10家左右大大小小的公司,中途拿到了幾個offer,但是因為不太滿意拒絕了,拒絕之後壓力更大了啊o(╥﹏╥)o。不過在三月初拿到了hin滿意的offer!!在這裡總結下我的面試經驗,希望能幫助到正在找工作的你們~~~

下面是我的總結,如果有不對的地方,麻煩指出!φ(>ω<*) 

js六種基本型別是什麼?

首先,我們要知道js中分為七種內建型別,七種內建型別又分為兩大型別:基本型別和物件。

基本型別:null、undefined、boolean、number、string、symbol

js中的基本型別和引用型別

基本型別:儲存在棧記憶體中,因為這些型別在記憶體中分別占有固定大小的空間,通過按值來訪問。

引用型別:儲存在堆記憶體中,因為這種值的大小不固定,因此不能把它們儲存在棧記憶體中。但記憶體位址大小是固定的,因此該物件的訪問位址存在棧記憶體中。當查詢引用型別的變數時,先從棧中讀取記憶體位址,然後再通過位址找到堆中的值。對於這種,我們把它叫做按引用訪問。

閉包中的變數是儲存在堆記憶體中,這也解釋了函式之後為什麼還能引用到函式內的變數

null和undefined的區別

null:給乙個全域性變數賦值為null,相當於將這個變數的指標物件以及值清空,如果是給物件的屬性賦值為null或將區域性變數賦值為null,相當於給這個屬性分配了一塊空的記憶體,然後值為null,js會**全域性變數為null的物件

undefined:給乙個全域性變數賦值為undefined,相當於將這個物件的值清空,但是這個物件依舊存在,如果是給物件的屬性賦值為undefined,說明這個值為空值

js型別檢測

獲取乙個變數的正確型別:

object.prototype.tostring.call(xx)
例如:

var a = [1,2,3]

object.prototype.tostring.call(a) // "[object array]"

js中的falsy值

undefined、null、false、nan、『』、0、-0

== 運算規則

比較 x == y:

若type(x)與type(y)相同,則:

若type(x)為undefined,返回true

若type(x)為null,返回true

若type(x)為number,則:

若x或y為nan,返回false

若x與y為相等值,則返回true

若x為+0且y為-0,返回true;反之亦然

返回false

若type(x)為string,則當x和y為完全相同的字串行時返回true,否則返回false

若type(x)為boolean,當x和y同為true或同為false時返回true。否則,返回false

當x和y引用同一物件時返回true。否則返回false

若x為null且y為undefined,返回true;反之亦然

若type(x)為number且type(y)為string,返回 x == tonumber(y)的結果;反之亦然

若type(x)為boolean,返回比較 tonumber(x) == y 的結果;反之亦然

若type(x)為string或number,且type(y)為object,返回比較 x == toprimitive(y)的結果;反之亦然

返回false

for in 和 for of的區別

for in 遍歷的是陣列的索引(即鍵值)key

遍歷順序可能不是內部順序

會遍歷陣列內所有可列舉屬性

for of 遍歷的是陣列元素 value

只遍歷陣列內元素

不能遍歷物件,因為沒有迭代器物件

若實在想用for of來遍歷普通物件的屬性的話,可以通過和 object.keys() 搭配使用

domcontentload和onload的區別

一般情況下,domcontentload事件要在window.onload之前執行,dom樹構建完成時就會執行domcontentload事件

而window.onload是在頁面載入完成的時候才執行,這其中包括了dom、css、js、

跨域問題

jsonp:通過標籤的非同步載入來實現的

websocket本身就支援跨域

cors:需要前後端同時支援。跨域時,瀏覽器會攔截ajax請求,並在http頭部加origin

postmessage

影象ping:乙個網頁可以從任何網頁中載入影象,不用擔心跨域問題。影象ping是與伺服器進行簡單、單項的跨域通訊的一種方式。

js中的new做了什麼

新生成了乙個物件

鏈結到原型

繫結this

返回新物件

用原生js實現new:

function create ()
foreach和map都能遍歷陣列,它們的區別是什麼

foreach會改變原陣列;map不會改變原陣列,會返回乙個新陣列

原生js實現ajax

}js陣列去重

方法很多,就不一一枚舉了。 這裡列舉的挺全的,可以參考下。

js中的this

首先,我們要知道的是,this的指向在函式定義的時候是確定不了的,只有函式執行的時候才能確定this到底指向誰,實際上this最終指向的是呼叫它的那個物件。

new的優先順序最高:

var c = new foo()

c.a = 3

console.log(c.a) // 3

我們再來看看箭頭函式中的this:

function a () 

}}a()()() // undefined

箭頭函式其實是沒有this的,這個函式中的this只取決於他外面的第乙個不是箭頭函式的函式的this。在上面這個例子中,this是window。並且this一旦繫結了上下文,就不會被任何**改變。

js閉包和原型鏈差不多是必問的了,這兩個篇幅較大,就不再這裡說了。

挑了一些我覺得比較重要的記錄下來了(還有一部分原因是好多其他的題我不記得了哈哈哈),如果後續記起來的話會挑些重要的補充的~

前端面試總結篇(初級)

除了這兩個,關於es6的常用還有箭頭函式 模板字串 變數的解構賦值等 所謂的跨域問題是由於瀏覽器的同源策略限制的,當協議網域名稱埠號不同即為跨域,對於協議和埠來說,前端不能解決。解決跨域的幾種方式 1 資訊,伺服器收到請求,需要請求者繼續執行操作 101,公升級為websocket協議 2 成功,操...

前端面試 前端面試總結2018 07

2周面試了11家公司吧,具體面試題如下 面試第一周 7.23 7.27 中谷芯厚建 蘇寧vivo外包 電面 杭州通策會 第二週 7.30 8.3 南京軟體谷研究院 烽火科技 邁特望,蘇寧外包 電面 平安科技外包 華泰 外包 一輪 技術面,二輪現場技術面 三隻松鼠 電面 一.中谷芯 二.厚建 angu...

ofo前端面試篇

今天參加了ofo的校招面試,自我感覺就是有一些東西是寫過但是沒存住,或者是說網上有現成的原始碼自己用的時候可能就是copy過來修改一下就直接用了。就答得感覺稀爛。不說了直接上題吧。一 頁面元素垂直居中 對於行內元素 若該行內元素只有一行,且該行內元素父元素的高度一定,可以設定該行內元素的line h...