2016年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(), 保證其兼容性判导,最好的方法如下:
3.已知ID的Input輸入框嫉父,希望改變文本框的背景顏色,怎么做眼刃?(原生JS)
4.希望獲取到頁面中所有的checkbox怎么做绕辖?(原生JS)
5.Html事件綁定有幾種方式?
直接在DOM里綁定事件:
這種方式稱為原生事件或者屬性事件
在JS里通過onclick綁定:xxx.onclick = test
Dom標準通過事件添加進行綁定:addEventListener("click",test, false) //第三個參數為是否支持事件捕捉
IE事件:attachEvent("onclick",test)
那么問題來了擂红,Javascript的事件流模型都有什么仪际?
“事件捕捉”:事件由最不具體的節(jié)點先接收,然后逐級向下昵骤,一直到最具體的
目標事件
“事件冒泡”:事件開始由最具體的元素接受树碱,然后逐級向上傳播
“DOM事件流”:三個階段:事件捕捉,目標階段变秦,事件冒泡
IE事件流:目標事件和事件冒泡
阻止事件冒泡的方式:
阻止事件的默認行為:
6.看下列代碼成榜,將會輸出什么?(變量聲明提升)
上面的代碼經過變量提升后,等價于下面的代碼
再看下面的輸出結果:
此時打印a函數蹦玫,不會打印1赎婚,因為下面是一個函數表達式雨饺,跟變量聲明一樣,只會把var a;提升到最前面惑淳,a=function(){}保留额港,會覆蓋前面的a=1;因此打印函數。
此題目歧焦,我再百度面試的時候問到過移斩。
7.掌握樣式的優(yōu)先級。
!important > style(內聯) > Id(權重100) > class(權重10) > 標簽(權重1) 同類別的樣式绢馍,后面的會覆蓋前面的向瓷。
百度視頻部門一道面試題是這樣的:
8.怎樣添加、移除舰涌、移動猖任、復制、創(chuàng)建和查找節(jié)點
1)創(chuàng)建新節(jié)點
createDocumentFragment() //創(chuàng)建一個DOM片段
createElement() //創(chuàng)建一個具體的元素
createTextNode() //創(chuàng)建一個文本節(jié)點
2)添加瓷耙、移除朱躺、替換、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替換
insertBefore() //插入
3)查找
getElementsByTagName() //通過標簽名稱
getElementsByName() //通過元素的Name屬性的值
getElementById() //通過元素Id搁痛,唯一性
9.用js寫一個正則匹配標簽中是否包含一個class(百度面試題)
10.事件循環(huán)綁定长搀,輸出結果(考察閉包)
通過閉包封裝后的代碼:
閉包我所知道的兩個作用:
a.通過閉包可以把局部變量傳遞出來,就是通過閉包可以訪問函數內部的變量鸡典,比如下面的代碼:
通過閉包就可以訪問函數內部的局部變量源请,并且實現數量累加。
b.使用閉包可以避免空間污染彻况,閉包內部的變量都只能在內部使用谁尸,這樣有效避免和外部變量的混淆。(個人理解)
11.js數組去重纽甘。
12.兩個div標簽良蛮,如何控制標簽左邊固定,右邊自適應贷腕,左邊div標簽的寬度為100px(滴滴面試題)
滴滴面試起初問我背镇,現在有并排的三個Div框咬展,如何實現三個div都自適應泽裳,我當時就懵了,這個考察的是display:table的使用
13.實現一個函數clone破婆,可以對JavaScript中的5種主要的數據類型(包括Number涮总、String、Object祷舀、Array瀑梗、Boolean)進行值復制
考察點1:對于基本數據類型和引用數據類型在內存中存放的是值還是指針這一區(qū)別是否清楚
考察點2:是否知道如何判斷一個變量是什么類型的
考察點3:遞歸算法的設計
14.繼承的使用
15.請評價以下代碼并給出改進意見
評價:
不應該在if和else語句中聲明addListener函數烹笔,應該提前先聲明,定義全局變量抛丽;
不需要使用window.addEventListener或document.all來進行檢測瀏覽器谤职,應該使用能力檢測;
由于attachEvent在IE中有this指向問題亿鲜,所以調用它時需要處理一下
改進如下:
16.對作用域上下文和this的理解允蜈,看下列代碼:
推薦下我自己的前端群:595549645,不管你是小白還是大牛蒿柳,小編我都挺歡迎饶套,不定期分享干貨,包括我自己整理的一份2017最新的前端資料和零基礎入門教程垒探,歡迎初學和進階中的小伙伴妓蛮。
如果想看到更加系統(tǒng)的文章和學習方法經驗可以關注我的微信公眾號:‘web前端課程’關注后回復‘給我資料’可以領取一套完整的學習視頻