閱讀650 返回首頁    go 阿裏雲 go 技術社區[雲棲]


2017年前端麵試題大全集,隻發一次!

2017年BAT公司常見的Web前端麵試題整理

1.JavaScript是一門什麼樣的語言,它有哪些特點?

沒有標準答案。

2.JavaScript的數據類型都有什麼?

基本數據類型:String,boolean,Number,Undefined

引用數據類型:Object(Array,Date,RegExp,Function,Null)

那麼問題來了,如何判斷某變量是否為數組數據類型?

方法一.判斷其是否具有“數組性質”,如slice()方法。可自己給該變量定義slice方法,故有時會失效

方法二.obj instanceof Array 在某些IE版本中不正確

方法三.方法一二皆有漏洞,在ECMA Script5中定義了新方法Array.isArray(), 保證其兼容性,最好的方法如下:

dBrdo1HkSAS9gjOTyfDydVGxMd4A3ZeZsWdicc9J

dBrdo1HkSAS9gjOTyfDydRAZRoGXXMtiafFaIOvY

如果你想學習web前端可以來這個群,首先是二九一,中間是八五一,最後是一八九,裏麵可以免費的學習交流,也有資料可以下載。

3.已知ID的Input輸入框,希望改變文本框的背景顏色,怎麼做?(原生JS)

1240

4.希望獲取到頁麵中所有的checkbox怎麼做?(原生JS)

dBrdo1HkSAS9gjOTyfDydbV07aibUEeBQGRNiayv

dBrdo1HkSAS9gjOTyfDydZjaLwEXSa2bIQzaRQGk

5.Html事件綁定有幾種方式?

直接在DOM裏綁定事件:

這種方式稱為原生事件或者屬性事件

在JS裏通過onclick綁定:xxx.onclick = test

Dom標準通過事件添加進行綁定:addEventListener("click",test, false) //第三個參數為是否支持事件捕捉

IE事件:attachEvent("onclick",test)

那麼問題來了,Javascript的事件流模型都有什麼?

“事件捕捉”:事件由最不具體的節點先接收,然後逐級向下,一直到最具體的

目標事件

“事件冒泡”:事件開始由最具體的元素接受,然後逐級向上傳播

“DOM事件流”:三個階段:事件捕捉,目標階段,事件冒泡

IE事件流:目標事件和事件冒泡

阻止事件冒泡的方式:

dBrdo1HkSAS9gjOTyfDyddDJG7KpwnGLzP0cLEZn

阻止事件的默認行為:

dBrdo1HkSAS9gjOTyfDydW6zwPczeAFcwBG4icvR

6.看下列代碼,將會輸出什麼?(變量聲明提升)

dBrdo1HkSAS9gjOTyfDydaEOgib2ibXnNicj8N5t

上麵的代碼經過變量提升後,等價於下麵的代碼

dBrdo1HkSAS9gjOTyfDydTicc2TlS6dDJDKib0DZ

再看下麵的輸出結果:

dBrdo1HkSAS9gjOTyfDydYdW8Pfcurcngv8yibYh

此時打印a函數,不會打印1,因為下麵是一個函數表達式,跟變量聲明一樣,隻會把var a;提升到最前麵,a=function(){}保留,會覆蓋前麵的a=1;因此打印函數。

此題目,我再百度麵試的時候問到過。

7.掌握樣式的優先級。

!important > style(內聯) > Id(權重100) > class(權重10) > 標簽(權重1) 同類別的樣式,後麵的會覆蓋前麵的。

百度視頻部門一道麵試題是這樣的:

dBrdo1HkSAS9gjOTyfDydeTZZ6pEYHC1c4fe3hRO

8.怎樣添加、移除、移動、複製、創建和查找節點

1)創建新節點

createDocumentFragment() //創建一個DOM片段

createElement() //創建一個具體的元素

createTextNode() //創建一個文本節點

2)添加、移除、替換、插入

appendChild() //添加

removeChild() //移除

replaceChild() //替換

insertBefore() //插入

3)查找

getElementsByTagName() //通過標簽名稱

getElementsByName() //通過元素的Name屬性的值

getElementById() //通過元素Id,唯一性

9.用js寫一個正則匹配標簽中是否包含一個class(百度麵試題)

dBrdo1HkSAS9gjOTyfDydZJYxlAcquMbjbw9atqQ

10.事件循環綁定,輸出結果(考察閉包)

dBrdo1HkSAS9gjOTyfDydcmDT2sN6VfCL38RK4vN

通過閉包封裝後的代碼:

dBrdo1HkSAS9gjOTyfDydVLTNicARgfCibLowXl7

閉包我所知道的兩個作用:

a.通過閉包可以把局部變量傳遞出來,就是通過閉包可以訪問函數內部的變量,比如下麵的代碼:

dBrdo1HkSAS9gjOTyfDydRicpLic0YogXwb89yca

通過閉包就可以訪問函數內部的局部變量,並且實現數量累加。

b.使用閉包可以避免空間汙染,閉包內部的變量都隻能在內部使用,這樣有效避免和外部變量的混淆。(個人理解)

11.js數組去重。

dBrdo1HkSAS9gjOTyfDydfWDAlg3hNF2F5iaWhMi

12.兩個div標簽,如何控製標簽左邊固定,右邊自適應,左邊div標簽的寬度為100px(滴滴麵試題)

dBrdo1HkSAS9gjOTyfDydeuNgt1icr4sLsicfCW1

滴滴麵試起初問我,現在有並排的三個Div框,如何實現三個div都自適應,我當時就懵了,這個考察的是display:table的使用

dBrdo1HkSAS9gjOTyfDydfib6iadIg1uEhdmicRF

dBrdo1HkSAS9gjOTyfDydZIoegp1axbs58RbJh9b

13.實現一個函數clone,可以對JavaScript中的5種主要的數據類型(包括Number、String、Object、Array、Boolean)進行值複製

考察點1:對於基本數據類型和引用數據類型在內存中存放的是值還是指針這一區別是否清楚

考察點2:是否知道如何判斷一個變量是什麼類型的

考察點3:遞歸算法的設計

dBrdo1HkSAS9gjOTyfDydaLBD5wrvZcpgvJGMroL


14.繼承的使用

dBrdo1HkSAS9gjOTyfDydeaAs69DGXlscH1YaOwn

15.請評價以下代碼並給出改進意見

dBrdo1HkSAS9gjOTyfDydWibUesthujOoKic6M3K

評價:

不應該在if和else語句中聲明addListener函數,應該提前先聲明,定義全局變量;

不需要使用window.addEventListener或document.all來進行檢測瀏覽器,應該使用能力檢測;

由於attachEvent在IE中有this指向問題,所以調用它時需要處理一下

改進如下:

dBrdo1HkSAS9gjOTyfDydS8QXEiaLg1Eq9B7uhcS

16.對作用域上下文和this的理解,看下列代碼:

dBrdo1HkSAS9gjOTyfDydQYvKg16fyOUsEqdqeGX

最後更新:2017-07-24 10:33:03

  上一篇:go  《中國智慧城市規劃與建設》第二版
  下一篇:go  微信小程序與 iMessage 的 App Store,暗示了新的 App 形式嗎?