1. 程式人生 > >前端筆試題彙總

前端筆試題彙總

單選題

1.如果a===a為false,則說明a是:B
A.Infinity
B.NaN
C.Undefined
D.Null

//NaN與任何值都不相等,包括NaN本身。

2.頁面文件完全載入並解析完畢之後會觸發的事件是:C

A.ready
B.load
C.DOMContentLoaded
D.DOMContentReady

//

  1. 解析HTML結構。
  2. 載入並解析外部指令碼。
  3. DOM樹構建完成,執行指令碼。//DOMInteractive –> DOMContentLoaded
  4. 載入圖片、樣式表文件等外部檔案。
  5. 頁面載入完畢。//window.onload

3.‘string’instanceof String的結果是:B

A.true
B.false

//'string'基本資料型別 使用typeof判斷資料型別;instanceof用於判斷物件型別;

4.下面哪條語句可以獲取元素e相鄰的下一個元素:A

A.e.nextSibling()
B.e,nextElement()
C.e.nextElementSibling()
D.e.next()

多選題

5.以下會觸發reflow的操作有?(ACD)
A.改變任意元素height/width
B.改變background-color 
C.改變瀏覽器視窗大小
D.改變font-size

background的修改,經過瀏覽器廠家的優化,部分background的修改只觸發repaint

6.以下哪些可以作為media queries的條件?(ABCD)

A.裝置寬度
B.裝置高度
C.裝置型別
D.裝置畫素比

7.下列說法正確的是:(AB)

A.樣式檔案的載入會阻塞指令碼的執行
B.iframe會阻塞主頁面的load事件
C.window.location.href = ‘http://ele.me’和
D.window.location.replace(“http://ele.me”)的效果是等價的
E.<audio>、<img>中的資源下載會阻塞頁面解析

//location.replace(url):url不會寫入瀏覽器記錄。

8.以下幾組標籤中全部符合HTML5標準的是:(A)

A.<section><audio><video>
B.<address><svg><aside>
C.<nav><image><footer>
D.<fieldset><canvas><pre>

9.下面說法錯誤的是:(BCD)

A.window.alert是一個同步方法,會阻塞指令碼的執行
B.setTimeout(foo, 0)這行程式碼可以等價替換為foo()
C.在addEventListener的處理方法中使用e.preventDefault()可以阻止事件冒泡
D.String(‘abc’)和new String(‘abc’)是等價的

//DOM:stopPropagation()阻止冒泡;preventDefault()阻止預設行為。 

//IE:cancelBubble屬性為true:阻止冒泡; returnValue屬性為false:阻止預設行為。

10.以下程式碼的執行結果是:(D)

var foo = ‘string’
foo.substring(2,1)
console.log(foo)
A.‘t’
B.‘r’
C.‘’
D.‘string’

//與concat()方法一樣,slice(),substr(),substring(),也不會修改字串本身的值,他們只是返回一個基本型別的字串值,對原始字串沒有任何影響。

11.下列屬於塊級元素的是:(AC)

A.<p>
B.<span>
C.<h3>
D.<a>

12.以下關於CSS的描述,錯誤的是:(BC)

A.內聯樣式宣告擁有最高優先順序
B.預設情況下都是塊級元素
C.position:absolute的元素總是相對於position:relative的元素定位
D.cm em px pt均屬於CSS尺寸單位

填空題

13.告訴HTTP客戶端需與服務端保持長連線的header是(Connection: Keep-Alive)
14.設定一個元素浮動之後,該元素的display值自動變成了(block)。
15.HTTP協議中屬於safe method的method(是GET、HEAD)。

簡答題

16.如何實現一個實時的“訊息提醒”功能?
17.補全下面的程式碼,實現一個四分之一圓:

<div class=”quarter”></div>
.quarter{
width: 100px;
height:100px;
background-color:blue;
border-radius: 100px 0 0 0;
}
18.以下遞迴函式存在棧溢位的風險,請問如何優化?
function factorial(n){
return n*factorial(n-1)
}

//function factorial(n,total=1){//引數total有預設值1,所以呼叫時不用提供這個值
            if(n===1){
                return total;
            }else{
                return factorial(n-1,n*total);
            }
        }

尾遞迴往往需要改寫遞迴函式,確保最後一步只調用自身,做到這一點的方法,就是把所有用到內部變數的方法改寫為函式的引數,比如total
19.請實現一個計算最大公約數的函式:
function greatestCommonDivisor(a,b){
 if(b==0){
                return a;
            }else{
                return greatestCommonDivisor(b,a%b);
            }
}
greatestCommonDivisor(8, 12) //4
greatestCommonDivisor(8, 16) //8
greatestCommonDivisor(8, 17) //1