前端面試寶典


 

面試寶典

一、HTML和CSS.............................................................................................................. 21

1. 你做的頁面在哪些流覽器測試過?這些瀏覽器的內核分別是什么?........................ 21

2. 每個HTML文件里開頭都有個很重要的東西,Doctype,知道這是干什么的嗎?... 21

3. Quirks模式是什么?它和Standards模式有什么區別.............................................. 21

4. div+css的布局較table布局有什么優點?.............................................................. 22

5. img的alt與title有何異同? strong與em的異同?............................................. 22

6. 你能描述一下漸進增強和優雅降級之間的不同嗎?................................................ 23

7. 為什么利用多個域名來存儲網站資源會更有效?.................................................. 23

8. 請談一下你對網頁標准和標准制定機構重要性的理解。....................................... 24

9. 請描述一下cookies,sessionStorage和localStorage的區別?................................ 24

10. 簡述一下src與href的區別。............................................................................ 24

11. 知道的網頁制作會用到的圖片格式有哪些?....................................................... 25

12. 知道什么是微格式嗎?談談理解。在前端構建中應該考慮微格式嗎?................ 25

13. 在css/js代碼上線之后開發人員經常會優化性能,從用戶刷新網頁開始,一次js請求一般情況下有哪些地方會有緩存處理?....................................................................................................... 25

14. 一個頁面上有大量的圖片(大型電商網站),加載很慢,你有哪些方法優化這些圖片的加載,給用戶更好的體驗。........................................................................................................................ 25

15. 你如何理解HTML結構的語義化?..................................................................... 26

16. 談談以前端角度出發做好SEO需要考慮什么?................................................... 27

17. 有哪項方式可以對一個DOM設置它的CSS樣式?.............................................. 28

18. CSS都有哪些選擇器?........................................................................................ 28

19. CSS中可以通過哪些屬性定義,使得一個DOM元素不顯示在瀏覽器可視范圍內? 29

20. 超鏈接訪問過后hover樣式就不出現的問題是什么?如何解決?........................ 29

21. 什么是Css Hack?ie6,7,8的hack分別是什么?................................................... 30

22. 行內元素和塊級元素的具體區別是什么?行內元素的padding和margin可設置嗎? 30

23. 什么是外邊距重疊?重疊的結果是什么?.......................................................... 31

24. rgba()和opacity的透明效果有什么不同?............................................................ 31

25. css中可以讓文字在垂直和水平方向上重疊的兩個屬性是什么?.......................... 31

26. 如何垂直居中一個浮動元素?............................................................................ 31

27. px和em的區別。.............................................................................................. 32

28. 描述一個”reset”的CSS文件並如何使用它。知道normalize.css嗎?你了解他們的不同之處?       33

29. Sass、LESS是什么?大家為什么要使用他們?..................................................... 33

30. display:none與visibility:hidden的區別是什么?................................................... 33

31. CSS中link和@import的區別是:....................................................................... 34

32. 簡介盒子模型:................................................................................................. 34

33. 為什么要初始化樣式?...................................................................................... 34

34. BFC是什么?........................................................................................................ 35

35. html語義化是什么?.......................................................................................... 35

36. Doctype的作用?嚴格模式與混雜模式的區別?.................................................. 35

37. IE的雙邊距BUG:塊級元素float后設置橫向margin,ie6顯示的margin比設置的較大。  35

38. HTML與XHTML——二者有什么區別?............................................................... 35

39. html常見兼容性問題?....................................................................................... 36

40. 對WEB標准以及W3C的理解與認識.................................................................. 36

41. 行內元素有哪些?塊級元素有哪些?CSS的盒模型?............................................... 36

42. 前端頁面有哪三層構成,分別是什么?作用是什么?............................................ 37

43. Doctype作用? 嚴格模式與混雜模式-如何觸發這兩種模式,區分它們有何意義?.. 37

44. 行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?............................... 37

45. CSS的盒子模型?............................................................................................... 37

46. CSS 選擇符有哪些?哪些屬性可以繼承?優先級算法如何計算? CSS3新增偽類有那些?         37

47. 如何居中div,如何居中一個浮動元素?................................................................. 38

48. 瀏覽器的內核分別是什么?經常遇到的瀏覽器的兼容性有哪些?原因,解決方法是什么,常用hack的技巧 ?............................................................................................................................... 39

49. 列出display的值,說明他們的作用。position的值, relative和absolute定位原點是?    40

50. absolute的containing block計算方式跟正常流有什么不同?................................ 40

51. 對WEB標准以及W3C的理解與認識.................................................................. 41

52. css的基本語句構成是?....................................................................................... 41

53. 瀏覽器標准模式和怪異模式之間的區別是什么?.................................................. 41

54. CSS中可以通過哪些屬性定義,使得一個DOM元素不顯示在瀏覽器可視范圍內? 41

55. 行內元素和塊級元素的具體區別是什么?行內元素的padding和margin可設置嗎? 42

56. 什么是外邊距重疊?重疊的結果是什么?.......................................................... 42

58、描述一個"reset"的CSS文件並如何使用它。知道normalize.css嗎?你了解他們的不同之處?  42

57. 說display屬性有哪些?可以做什么?................................................................ 43

58. 哪些css屬性可以繼承?.................................................................................... 43

59. css優先級算法如何計算?.................................................................................. 43

60. b標簽和strong標簽,i標簽和em標簽的區別?................................................... 43

61. 有那些行內元素、有哪些塊級元素、盒模型?................................................... 43

62. 有哪些選擇符,優先級的計算公式是什么?行內樣式和!important哪個優先級高?         45

63. 我想讓行內元素跟上面的元素距離10px,加margin-top和padding-top可以嗎? 45

64. CSS的盒模型由什么組成?................................................................................. 45

65. 說說display屬性有哪些?可以做什么?............................................................. 46

66. 哪些css屬性可以繼承?.................................................................................... 46

67. css優先級算法如何計算?.................................................................................. 46

二、JS基礎.................................................................................................................... 46

1. javascript的typeof返回哪些數據類型................................................................... 46

2. 例舉3種強制類型轉換和2種隱式類型轉換?....................................................... 47

3. split() 、join() 的區別........................................................................................... 47

4. 數組方法pop() push() unshift() shift()..................................................................... 47

5. 事件綁定和普通事件有什么區別.......................................................................... 47

6. IE和DOM事件流的區別....................................................................................... 48

7. IE和標准下有哪些兼容性的寫法........................................................................... 48

8. call和apply的區別............................................................................................... 49

9. b繼承a的方法..................................................................................................... 49

10. 如何阻止事件冒泡和默認事件............................................................................ 50

11. 添加 刪除 替換 插入到某個接點的方法............................................................ 50

12. javascript的本地對象,內置對象和宿主對象....................................................... 50

13. window.onload 和documentready的區別............................................................ 50

14. ”==”和“===”的不同.............................................................................................. 51

15. javascript的同源策略.......................................................................................... 51

16. JavaScript是一門什么樣的語言,它有哪些特點?................................................ 51

17. JavaScript的數據類型都有什么?........................................................................ 52

18. 已知ID的Input輸入框,希望獲取這個輸入框的輸入值,怎么做?(不使用第三方框架)   53

19. 希望獲取到頁面中所有的checkbox怎么做?(不使用第三方框架)........................ 53

20. 設置一個已知ID的DIV的html內容為xxxx,字體顏色設置為黑色(不使用第三方框架)     53

21. 當一個DOM節點被點擊時候,我們希望能夠執行一個函數,應該怎么做?....... 53

22. 看下列代碼輸出為何?解釋原因。..................................................................... 54

23. 看下列代碼,輸出什么?解釋原因。.................................................................... 54

24. 看下列代碼,輸出什么?解釋原因。.................................................................... 54

25. 看代碼給答案。................................................................................................. 56

26. 已知數組var stringArray = [“This”, “is”, “Baidu”, “Campus”],Alert出”This is Baidu Campus”。 56

27. 已知有字符串foo=”get-element-by-id”,寫一個function將其轉化成駝峰表示法”getElementById”。      56

28. var numberArray = [3,6,2,4,1,5]; (考察基礎API)................................................ 57

29. 輸出今天的日期,以YYYY-MM-DD的方式,比如今天是2014年9月26日,則輸出2014-09-26        57

30. 將字符串”<tr><td>{$id}</td><td>{$name}</td></tr>”中的{$id}替換成10,{$name}替換成Tony (使用正則表達式)..................................................................................................................... 58

31. 為了保證頁面輸出安全,我們經常需要對一些特殊的字符進行轉義,請寫一個函數escapeHtml,將<, >, &, “進行轉義..................................................................................................................... 58

32. foo = foo||bar ,這行代碼是什么意思?為什么要這樣寫?................................. 59

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

34. 用js實現隨機選取10–100之間的10個數字,存入一個數組,並排序。.......... 60

35. 把兩個數組合並,並刪除第二個元素。.............................................................. 61

36. 怎樣添加、移除、移動、復制、創建和查找節點(原生JS,實在基礎,沒細寫每一步) 61

37. 有這樣一個URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,請寫一段JS程序提取URL中的各個GET參數(參數名和參數個數不確定),將其按key-value形式返回到一個json結構中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。................................................................................................ 62

38. 正則表達式構造函數var reg=new RegExp(“xxx”)與正則表達字面量var reg=//有什么不同?匹配郵箱的正則表達式?................................................................................................................. 63

39. 看下面代碼,給出輸出結果。............................................................................ 63

40. 寫一個function,清除字符串前后的空格。(兼容所有瀏覽器).......................... 64

41. Javascript中callee和caller的作用?................................................................... 65

42. Javascript中, 以下哪條語句一定會產生運行錯誤?      答案(  B C  ).............. 66

43. 以下兩個變量a和b,a+b的哪個結果是NaN?      答案(   AC  )................. 66

44. var a=10; b=20; c=4;  ++b+c+a++ 以下哪個結果是正確的?答案(  B  )................ 66

45. 下面的JavaScript語句中,( D )實現檢索當前頁面中的表單元素中的所有文本框,並將它們全部清空............................................................................................................................... 66

46. 要將頁面的狀態欄中顯示“已經選中該文本框”,下列JavaScript語句正確的是( A )   67

47. 以下哪條語句會產生運行錯誤:(AD)............................................................... 67

48. 以下哪個單詞不屬於javascript保留字:(B)..................................................... 67

49. 請選擇結果為真的表達式:(C)........................................................................ 68

50. Javascript中, 如果已知HTML頁面中的某標簽對象的id=”username”,用____document.getElementById(‘username’)___ _方法獲得該標簽對象。...................... 68

51. typeof運算符返回值中有一個跟javascript數據類型不一致,它是________”function”_________。    68

52. 定義了一個變量,但沒有為該變量賦值,如果alert該變量,javascript彈出的對話框中顯示___undefined______ 。............................................................................................................................... 68

53. 分析代碼,得出正確的結果。............................................................................ 68

54. 寫出函數DateDemo的返回結果,系統時間假定為今天...................................... 68

55. 寫出程序運行的結果?...................................................................................... 69

56. 閱讀以下代碼,請分析出結果:........................................................................ 69

57. 補充按鈕事件的函數,確認用戶是否退出當前頁面,確認之后關閉窗?............... 69

58. 寫出簡單描述html標簽(不帶屬性的開始標簽和結束標簽)的正則表達式,並將以下字符串中的html標簽去除掉..................................................................................................................... 70

59. 完成foo()函數的內容,要求能夠彈出對話框提示當前選中的是第幾個單選框。.. 70

60. 完成函數showImg(),要求能夠動態根據下拉列表的選項變化,更新圖片的顯示 71

61. 截取字符串abcdefg的efg.................................................................................. 72

62. 列舉瀏覽器對象模型BOM里常用的至少4個對象,並列舉window對象的常用方法至少5個           72

63. 簡述列舉文檔對象模型DOM里document的常用的查找訪問節點的方法並做簡單說明     72

64. 希望獲取到頁面中所有的checkbox怎么做?(不使用第三方框架)........................ 72

65. 簡述創建函數的幾種方式................................................................................... 73

66. Javascript如何實現繼承?................................................................................... 73

67. Javascript創建對象的幾種方式?......................................................................... 73

68. iframe的優缺點?............................................................................................... 75

69. 請你談談Cookie的弊端?.................................................................................. 75

70. js延遲加載的方式有哪些?................................................................................. 76

71. documen.write和 innerHTML 的區別?............................................................... 76

72. 哪些操作會造成內存泄漏?............................................................................... 76

73. 判斷一個字符串中出現次數最多的字符,統計這個次數..................................... 77

74. 寫一個獲取非行間樣式的函數............................................................................ 77

75. 事件委托是什么................................................................................................. 78

76. 閉包是什么,有什么特性,對頁面有什么影響................................................... 78

77. 解釋jsonp的原理,以及為什么不是真正的ajax................................................. 79

78. javascript的本地對象,內置對象和宿主對象....................................................... 79

79. 字符串反轉,如將 '12345678' 變成 '87654321'.................................................. 79

80. 將數字 12345678 轉化成 RMB形式 如: 12,345,678 ....................................... 79

81. 生成5個不同的隨機數;................................................................................... 80

82. 去掉數組中重復的數字 方法一;...................................................................... 81

83. 階乘函數;........................................................................................................ 82

84. window.location.search() 返回的是什么?............................................................ 83

85. window.location.hash 返回的是什么?.................................................................. 83

86. window.location.reload() 作用?.......................................................................... 83

87. 、javascript 中的垃圾回收機制?....................................................................... 83

88. 看題做答:........................................................................................................ 84

89. 下面輸出多少?................................................................................................. 84

90. 再來一個........................................................................................................... 85

91. a輸出多少?...................................................................................................... 86

92. 看程序,寫結果................................................................................................. 87

93. JS的繼承性......................................................................................................... 87

94. 精度問題: JS 精度不能精確到 0.1 所以  。。。。同時存在於值和差值中............... 88

95. 加減運算........................................................................................................... 88

96. 什么是同源策略?............................................................................................. 88

97. 為什么不能定義1px左右的div容器?   ............................................................ 89

98. 結果是什么?.................................................................................................... 89

99. 輸出結果........................................................................................................... 89

100. 計算字符串字節數:........................................................................................ 90

101. 結果是:......................................................................................................... 90

102. 聲明對象,添加屬性,輸出屬性...................................................................... 91

103. 匹配輸入的字符:第一個必須是字母或下划線開頭,長度5-20......................... 91

104. 檢測變量類型.................................................................................................. 92

105. 如何在HTML中添加事件,幾種方法?............................................................ 92

106. BOM對象有哪些,列舉window對象?............................................................. 92

107. 請問代碼實現 outerHTML................................................................................ 93

108. JS中的簡單繼承 call方法!.............................................................................. 94

109. bind(), live(), delegate()的區別............................................................................. 95

110. 看下列代碼輸出什么?.................................................................................... 96

111. 看下列代碼,輸出什么?................................................................................... 96

112. 你如何優化自己的代碼?................................................................................. 96

113. 請描述出下列代碼運行的結果.......................................................................... 96

114. 怎樣實現兩欄等高?........................................................................................ 97

115. 使用js實現這樣的效果:在文本域里輸入文字時,當按下enter鍵時不換行,而是替換成“{{enter}}”,(只需要考慮在行尾按下enter鍵的情況)........................................................................... 98

116. 以下代碼中end字符串什么時候輸出............................................................... 98

117. specify(‘hello,world’)//=>’h,e,l,l,o,w,o,r,l,d’實現specify函數................................... 99

118. 請將一個URL的search部分參數與值轉換成一個json對象.............................. 99

119. 請用原生js實現jquery的get\post功能,以及跨域情況下............................... 99

120. 請簡要描述web前端性能需要考慮哪方面,你的優化思路是什么?................. 99

121. 、簡述readyonly與disabled的區別................................................................. 99

122. 寫出3個使用this的典型應用........................................................................ 100

123. 請盡可能詳盡的解釋ajax的工作原理............................................................. 100

124. 、為什么擴展javascript內置對象不是好的做法?........................................... 100

125. 什么是三元表達式?“三元”表示什么意思?................................................ 100

126. 瀏覽器標准模式和怪異模式之間的區別是什么?............................................ 100

127. modulo(12,5)//2  實現滿足這個結果的modulo函數........................................ 101

128. HTTP協議中,GET和POST有什么區別?分別適用什么場景 ?....................... 101

129. HTTP狀態消息200 302 304 403 404 500分別表示什么...................................... 101

130. HTTP協議中,header信息里面,怎么控制頁面失效時間(last-modified,cache-control,Expires分別代表什么).............................................................................................................................. 101

131. HTTP雷鋒議目前常用的有哪幾個?KEEPALIVE從哪個版本開始出現的?.......... 101

132. 業界常用的優化WEB頁面加載速度的方法(可以分別從頁面元素展現,請求連接,css,js,服務器等方面介紹)....................................................................................................................... 101

133. 列舉常用的web頁面開發,調試以及優化工具............................................... 101

134. 解釋什么是sql注入,xss漏洞........................................................................ 101

135. 如何判斷一個js變量是數組類型.................................................................... 101

136. 請列舉js數組類型中的常用方法.................................................................... 101

137. FF與IE中如何阻止事件冒泡,如何獲取事件對象,以及如何獲取觸發事件的元素 101

138. 列舉常用的js框架以及分別適用的領域.......................................................... 102

139. js中如何實現一個map.................................................................................... 103

140. js可否實現面向對象編程,如果可以如何實現js對象的繼承............................ 103

141. 約瑟夫環—已知n個人(以編號1,2,3…分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。.................................................................................................. 103

142. 有1到10w這個10w個數,去除2個並打亂次序,如何找出那兩個數?....... 103

143. 如何獲取對象a擁有的所有屬性(可枚舉的、不可枚舉的,不包括繼承來的屬性)        103

144. 有下面這樣一段HTML結構,使用css實現這樣的效果:............................... 103

145. 下面這段代碼想要循環輸出結果01234,請問輸出結果是否正確,如果不正確,請說明為什么,並修改循環內的代碼使其輸出正確結果.................................................................................... 103

146. 以下哪些是javascript的全局函數:(ABC)..................................................... 104

147. 關於IE的window對象表述正確的有:(ACD)............................................... 104

148. 下面正確的是  A........................................................................................... 105

149. 錯誤的是 B.................................................................................................... 105

150. 不用任何插件,如何實現一個tab欄切換?.................................................... 105

151. 變量的命名規范以及命名推薦........................................................................ 106

152. 三種彈窗的單詞以及三種彈窗的功能.............................................................. 106

153. console.log( 8 | 1 ); 輸出值是多少?................................................................. 107

154. 只允許使用 + - * / 和 Math.* ,求一個函數 y = f(x, a, b);當x > 100 時返回 a 的值,否則返回 b 的值,不能使用 if else 等條件語句,也不能使用|,?:,數組。................................................ 107

155. JavaScriptalert(0.4*0.2);結果是多少?和你預期的一樣嗎?如果不一樣該如何處理? 108

156. 一個div,有幾種方式得到這個div的jQuery對象?<div class='aabbcc' id='nodesView'></div>想直接獲取這個div的dom對象,如何獲取?dom對象如何轉化為jQuery對象?........................... 108

157. 、主流瀏覽器內核.......................................................................................... 108

158. 如何顯示/隱藏一個dom元素?請用原生的JavaScript方法實現...................... 108

159. jQuery框架中$.ajax()的常用參數有哪些?寫一個post請求並帶有發送數據和返回數據的樣例         109

160. JavaScript的循環語句有哪些?........................................................................ 109

161. 作用域-編譯期執行期以及全局局部作用域問題.............................................. 109

162. 閉包:下面這個ul,如何點擊每一列的時候alert其index?........................... 110

163. 列出3條以上ff和IE的腳本兼容問題............................................................ 111

164. 如現在有一個效果,有顯示用戶頭像、用戶昵稱、用戶其他信息;當用戶鼠標移到頭像上時,會彈出用戶的所有信息;如果是你,你會如何實現這個功能,請用代碼實現?............................ 111

165. 用正則表達式,寫出由字母開頭,其余由數字、字母、下划線組成的6~30的字符串? 111

166. 列舉瀏覽器對象模型BOM里常用的至少4個對象,並列舉window對象的常用方法至少5個 (10分).............................................................................................................................. 112

167. 在Javascript中什么是偽數組?如何將偽數組轉化為標准數組?..................... 112

168. 寫一個函數可以計算 sum(5,0,-5);輸出0; sum(1,2,3,4);輸出10;......................... 112

169. 《正則》寫出正確的正則表達式匹配固話號,區號3-4位,第一位為0,中橫線,7-8位數字,中橫線,3-4位分機號格式的固話號........................................................................................... 113

170. 《算法》 一下A,B可任選一題作答,兩題全答加分....................................... 113

171. 請寫一個正則表達式:要求最短6位數,最長20位,阿拉伯數和英文字母(不區分大小寫)組成      114

172. 統計1到400億之間的自然數中含有多少個1?比如1-21中,有1、10、11、21這四個自然數有5個1.............................................................................................................................. 115

173. 刪除與某個字符相鄰且相同的字符,比如fdaffdaaklfjklja字符串處理之后成為“fdafdaklfjklja”      115

174. 請寫出三種以上的Firefox有但,InternetExplorer沒有的屬性或者函數............ 115

175. 請寫出一個程序,在頁面加載完成后動態創建一個form表單,並在里面添加一個input對象並給它任意賦值后義post方式提交到:http://127.0.0.1/save.php................................................. 115

176. 用JavaScript實現冒泡排序。數據為23、45、18、37、92、13、24................. 116

177. 前端代碼優化的方法...................................................................................... 116

178. 下列JavaScript代碼執行后,依次alert的結果是............................................ 117

179. 下列JavaScript代碼執行后,iNum的值是....................................................... 118

180. 輸出結果是多少?.......................................................................................... 119

181. 用程序實現找到html中id名相同的元素?.................................................... 123

182. 下列JavaScript代碼執行后,運行的結果是..................................................... 125

183. 下列JavaScript代碼執行后,依次alert的結果是............................................ 125

184. 下列JavaScript代碼執行后的效果是............................................................... 126

185. 下列JavaScript代碼執行后的li元素的數量是................................................. 128

186. 程序中捕獲異常的方法?............................................................................... 128

187. 將字符串”<tr><td>{$id}</td><td>{$name}</td></tr>”中的{$id}替換成10,{$name}替換成Tony (使用正則表達式)................................................................................................................ 129

188. 給String對象添加一個方法,傳入一個string類型的參數,然后將string的每個字符間價格空格返回,例如:addSpace(“hello world”) // -> ‘h e l l o ?w o r l d’......................................................... 129

189. 數組和字符串................................................................................................. 129

190. 下列控制台都輸出什么................................................................................... 131

第2題:................................................................................................................ 131

第3題:................................................................................................................ 132

第4題:................................................................................................................ 132

第5題:................................................................................................................ 132

第6題:................................................................................................................ 133

第7題:................................................................................................................ 133

第8題:................................................................................................................ 133

第9題:................................................................................................................ 134

第10題:.............................................................................................................. 134

第11題:考點:函數聲明提前.............................................................................. 134

第12題:.............................................................................................................. 135

第13題:.............................................................................................................. 135

第14題:.............................................................................................................. 135

第15題................................................................................................................. 136

第16題:以下執行會有什么輸出........................................................................... 136

三、HTML5 CSS3............................................................................................................ 137

1. CSS3有哪些新特性?.......................................................................................... 137

2. html5有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區分 HTML 和 HTML5?................................................................................................................ 137

3. 本地存儲(Local Storage )和cookies(儲存在用戶本地終端上的數據)之間的區別是什么?    138

4. 如何實現瀏覽器內多個標簽頁之間的通信?......................................................... 138

5. 你如何對網站的文件和資源進行優化?.............................................................. 138

6. 什么是響應式設計?.......................................................................................... 138

7. 新的 HTML5 文檔類型和字符集是?.................................................................. 139

8. HTML5 Canvas 元素有什么用?........................................................................... 139

9. HTML5 存儲類型有什么區別?............................................................................ 139

10. 用H5+CSS3解決下導航欄最后一項掉下來的問題.............................................. 139

11. CSS3新增偽類有那些?..................................................................................... 139

12. 請用CSS實現:一個矩形內容,有投影,有圓角,hover狀態慢慢變透明。...... 139

13. 描述下CSS3里實現元素動畫的方法................................................................. 140

14. html5\CSS3有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區分 HTML 和 HTML5?........................................................................................................... 140

15. 你怎么來實現頁面設計圖,你認為前端應該如何高質量完成工作? 一個滿屏 品 字布局 如何設計?      140

16. 你能描述一下漸進增強和優雅降級之間的不同嗎?............................................ 141

17. 為什么利用多個域名來存儲網站資源會更有效?.............................................. 141

CDN緩存更方便 ........................................................................................................... 141

18. 請談一下你對網頁標准和標准制定機構重要性的理解。................................... 142

19. 請描述一下cookies,sessionStorage和localStorage的區別?............................ 142

20. 知道css有個content屬性嗎?有什么作用?有什么應用?............................... 142

21. 如何在 HTML5 頁面中嵌入音頻?..................................................................... 143

<audio controls> ............................................................................................................ 143

22. 如何在 HTML5 頁面中嵌入視頻?................................................................... 143

<video width="450" height="340" controls> ...................................................................... 143

23. HTML5 引入什么新的表單屬性?...................................................................... 143

24. CSS3新增偽類有那些?..................................................................................... 143

25. (寫)描述一段語義的html代碼吧。.................................................................... 144

26. cookie在瀏覽器和服務器間來回傳遞。 sessionStorage和localStorage區別........ 144

27. html5有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區分 HTML 和 HTML5?................................................................................................................ 144

28. 如何區分: DOCTYPE聲明\新增的結構元素\功能元素...................................... 145

29. 語義化的理解?............................................................................................... 145

30. HTML5的離線儲存?........................................................................................ 145

31. 寫出HTML5的文檔聲明方式............................................................................ 145

32. HTML5和CSS3的新標簽     ............................................................................. 145

33. 自己對標簽語義化的理解................................................................................. 146

四、移動web開發......................................................................................................... 146

1、移動端常用類庫及優缺點.................................................................................. 146

2、Zepto庫和JQ區別............................................................................................ 146

五、Ajax....................................................................................................................... 146

1、Ajax 是什么? 如何創建一個Ajax?................................................................... 146

}else{............................................................................................................................. 146

2、同步和異步的區別?........................................................................................... 147

3、如何解決跨域問題?........................................................................................... 147

4、頁面編碼和被請求的資源編碼如果不一致如何處理?........................................ 147

5、簡述ajax 的過程。........................................................................................... 147

6、闡述一下異步加載。......................................................................................... 148

7、請解釋一下 JavaScript 的同源策略。................................................................ 148

8、GET和POST的區別,何時使用POST?............................................................. 148

POST:一般用於修改服務器上的資源,對所發送的信息沒有限制.................................. 148

9、ajax 是什么?ajax 的交互模型?同步和異步的區別?如何解決跨域問題?............... 148

10、 Ajax的最大的特點是什么。........................................................................... 149

11、ajax的缺點...................................................................................................... 149

12、ajax請求的時候get 和post方式的區別........................................................... 149

13、解釋jsonp的原理,以及為什么不是真正的ajax............................................... 149

14、什么是Ajax和JSON,它們的優缺點。............................................................. 149

15、http常見的狀態碼有那些?分別代表是什么意思?.......................................... 149

16、一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什么?........ 150

17、ajax請求的時候get 和post方式的區別........................................................... 150

18、ajax請求時,如何解釋json數據..................................................................... 150

19、.javascript的本地對象,內置對象和宿主對象................................................... 150

20、為什么利用多個域名來存儲網站資源會更有效?............................................. 151

21、請說出三種減低頁面加載時間的方法............................................................... 151

22、HTTP狀態碼都有那些。.................................................................................. 151

六、JS高級.................................................................................................................. 151

1、 JQuery一個對象可以同時綁定多個事件,這是如何實現的?........................... 151

2、 知道什么是webkit么? 知道怎么用瀏覽器的各種工具來調試和debug代碼么? 151

3、 如何測試前端代碼? 知道BDD, TDD, Unit Test么? 知道怎么測試你的前端工程么(mocha, sinon, jasmin, qUnit..)?.............................................................................................................. 152

5、 簡述一下 Handlebars 的基本用法?............................................................... 152

6、 簡述一下 Handlerbars 的對模板的基本處理流程, 如何編譯的?如何緩存的? 152

7、 用js實現千位分隔符?.................................................................................... 152

8、 檢測瀏覽器版本版本有哪些方式?.................................................................. 152

9、 我們給一個dom同時綁定兩個點擊事件,一個用捕獲,一個用冒泡,你來說下會執行幾次事件,然后會先執行冒泡還是捕獲..................................................................................................... 152

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

11、如何消除一個數組里面重復的元素?............................................................... 154

12、小賢是一條可愛的小狗(Dog),它的叫聲很好聽(wow),每次看到主人的時候就會乖乖叫一聲(yelp)。從這段描述可以得到以下對象:........................................................................................... 154

13、下面這個ul,如何點擊每一列的時候alert其index?(閉包)........................... 155

14、編寫一個JavaScript函數,輸入指定類型的選擇器(僅需支持id,class,tagName三種簡單CSS選擇器,無需兼容組合選擇器)可以返回匹配的DOM節點,需考慮瀏覽器兼容性和性能。.......... 156

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

16、給String對象添加一個方法,傳入一個string類型的參數,然后將string的每個字符間價格空格返回,例如:.............................................................................................................................. 158

17、定義一個log方法,讓它可以代理console.log的方法。................................... 159

18、在Javascript中什么是偽數組?如何將偽數組轉化為標准數組?....................... 159

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

20、原生JS的window.onload與Jquery的$(document).ready(function(){})有什么不同?如何用原生JS實現Jq的ready方法?.......................................................................................................... 161

21、(設計題)想實現一個對頁面某個節點的拖曳?如何做?(使用原生JS)........ 163

22、請實現如下功能.............................................................................................. 163

23、說出以下函數的作用是?空白區域應該填寫什么?.......................................... 164

24、 Javascript作用鏈域?................................................................................... 165

25、 談談This對象的理解。................................................................................ 165

26、 eval是做什么的?........................................................................................ 165

27、 關於事件,IE與火狐的事件機制有什么區別? 如何阻止冒泡?.................... 165

28、 什么是閉包(closure),為什么要用它?...................................................... 166

29、javascript 代碼中的"use strict";是什么意思 ? 使用它區別是什么?................... 166

30、如何判斷一個對象是否屬於某個類?............................................................... 166

31、new操作符具體干了什么呢?........................................................................... 166

32、用原生JavaScript的實現過什么功能嗎?......................................................... 166

33、Javascript中,有一個函數,執行時對象查找時,永遠不會去查找原型,這個函數是?    166

HasOwnProperty............................................................................................................ 167

34、對JSON的了解?............................................................................................ 167

35、js延遲加載的方式有哪些?............................................................................. 167

36、模塊化開發怎么做?....................................................................................... 167

37、AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)規范區別?      167

38、requireJS的核心原理是什么?(如何動態加載的?如何避免多次加載的?如何 緩存的?)  167

39、讓你自己設計實現一個requireJS,你會怎么做?............................................. 168

40、談一談你對ECMAScript6的了解?................................................................... 168

ES6新的語法糖,類,模塊化等新特性.......................................................................... 168

41、ECMAScript6 怎么寫class么,為什么會出現class這種東西?........................... 168

42、異步加載的方式有哪些?................................................................................ 168

43、documen.write和 innerHTML的區別?.............................................................. 168

44、DOM操作——怎樣添加、移除、移動、復制、創建和查找節點?...................... 169

45、call() 和 .apply() 的含義和區別?.................................................................... 169

46、數組和對象有哪些原生方法,列舉一下?........................................................ 169

Array.concat( ) 連接數組................................................................................................ 169

Object.hasOwnProperty( ) 檢查屬性是否被繼承.............................................................. 170

47、JS 怎么實現一個類。怎么實例化這個類.......................................................... 170

48、JavaScript中的作用域與變量聲明提升?.......................................................... 170

49、如何編寫高性能的Javascript?........................................................................ 170

50、那些操作會造成內存泄漏?............................................................................. 171

51、javascript對象的幾種創建方式?..................................................................... 171

52、javascript繼承的 6 種方法?.......................................................................... 171

53、eval是做什么的?........................................................................................... 171

54、JavaScript 原型,原型鏈 ? 有什么特點?........................................................ 171

55、事件、IE與火狐的事件機制有什么區別? 如何阻止冒泡?............................. 172

56、簡述一下Sass、Less,且說明區別?................................................................ 172

57、關於javascript中apply()和call()方法的區別?.................................................. 172

58、簡述一下JS中的閉包?................................................................................... 172

59、說說你對this的理解?.................................................................................... 172

60、分別闡述split(),slice(),splice(),join()?................................................................ 173

61、事件委托是什么?........................................................................................... 173

62、如何阻止事件冒泡和默認事件?...................................................................... 173

63、添加 刪除 替換 插入到某個接點的方法?...................................................... 173

64、你用過require.js嗎?它有什么特性?.............................................................. 174

65、談一下JS中的遞歸函數,並且用遞歸簡單實現階乘?..................................... 174

66、請用正則表達式寫一個簡單的郵箱驗證。........................................................ 174

67、簡述一下你對web性能優化的方案?.............................................................. 174

68、在JS中有哪些會被隱式轉換為false................................................................. 174

Undefined、null、關鍵字false、NaN、零、空字符串..................................................... 174

69、定時器setInterval有一個有名函數fn1,setInterval(fn1,500)與setInterval(fn1(),500)有什么區別?.............................................................................................................................. 174

70、外部JS文件出現中文字符,會出現什么問題,怎么解決?.............................. 174

71、談談瀏覽器的內核,並且說一下什么是內核?................................................. 175

72、JavaScript原型,原型鏈 ? 有什么特點?......................................................... 175

73、寫一個通用的事件偵聽器函數......................................................................... 175

74、事件、IE與火狐的事件機制有什么區別? 如何阻止冒泡?............................. 178

75、什么是閉包(closure),為什么要用?............................................................. 178

76、如何判斷一個對象是否屬於某個類?............................................................... 178

77、new操作符具體干了什么呢?........................................................................... 178

78、JSON 的了解................................................................................................... 179

79、js延遲加載的方式有哪些................................................................................. 179

80、模塊化怎么做?.............................................................................................. 179

81、異步加載的方式.............................................................................................. 179

82、告訴我答案是多少?....................................................................................... 180

83、JS中的call()和apply()方法的區別?................................................................. 180

84、Jquery與jQuery UI 有啥區別?....................................................................... 180

85、jquery 中如何將數組轉化為json字符串,然后再轉化回來?........................... 180

$.fn.stringifyArray = function(array) {................................................................................. 180

86、JavaScript中的作用域與變量聲明提升?.......................................................... 181

87、前端開發的優化問題(看雅虎14條性能優化原則)。...................................... 181

88、http狀態碼有那些?分別代表是什么意思?.................................................... 181

89、一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什么?(流程說的越詳細越好)      182

七、流行框架................................................................................................................ 182

1、JQuery的源碼看過嗎?能不能簡單概況一下它的實現原理?............................. 182

2、jQuery.fn的init方法返回的this指的是什么對象?為什么要返回this?.............. 182

3、 jquery中如何將數組轉化為json字符串,然后再轉化回來?......................... 182

4、 jQuery 的屬性拷貝(extend)的實現原理是什么,如何實現深拷貝?............... 182

5、 jquery.extend 與 jquery.fn.extend的區別?.............................................. 182

Jquery.extend用來擴展jQuery對象本身;jquery.fn.extend用來擴展jQuery實例............. 182

6、談一下Jquery中的bind(),live(),delegate(),on()的區別?....................................... 182

7、JQuery一個對象可以同時綁定多個事件,這是如何實現的?............................. 182

10、 Jquery與jQuery UI有啥區別?................................................................... 182

11、 jQuery和Zepto的區別?各自的使用場景?.................................................. 183

12、 針對 jQuery 的優化方法?........................................................................... 183

13、 Zepto的點透問題如何解決?........................................................................ 183

14、知道各種JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能講出他們各自的優點和缺點么?.............................................................................................................................. 183

15、Underscore 對哪些 JS 原生對象進行了擴展以及提供了哪些好用的函數方法? 184

Underscore的熟悉程度.................................................................................................. 184

16、使用過angular嗎?angular中的過濾器是干什么用的....................................... 184

八、移動APP開發......................................................................................................... 184

1、移動端最小觸控區域是多大?........................................................................... 184

九、NodeJs................................................................................................................... 184

1. 對Node的優點和缺點提出了自己的看法:........................................................ 184

2. 需求:實現一個頁面操作不會整頁刷新的網站,並且能在瀏覽器前進、后退時正確響應。給出你的技術實現方案?....................................................................................................................... 184

3. Node.js的適用場景?.......................................................................................... 185

4. (如果會用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?         185

Nodejs相關概念的理解程度.......................................................................................... 185

5. 解釋一下 Backbone 的 MVC 實現方式?........................................................... 185

6. 什么是“前端路由”?什么時候適合使用“前端路由”? “前端路由”有哪些優點和缺點? 185

7. 對Node的優點和缺點提出了自己的看法?........................................................ 185

十、前端概括性問題..................................................................................................... 186

1. 常使用的庫有哪些?常用的前端開發工具?開發過什么應用或組件?................ 186

2. 對BFC規范的理解?.......................................................................................... 186

3. 99%的網站都需要被重構是那本書上寫的?......................................................... 186

4. WEB應用從服務器主動推送Data到客戶端有那些方式?.................................... 186

5. 加班的看法........................................................................................................ 187

6. 平時如何管理你的項目,如何設計突發大規模並發架構?.................................. 187

7. 那些操作會造成內存泄漏?............................................................................... 187

8. 你說你熱愛前端,那么應該WEB行業的發展很關注吧? 說說最近最流行的一些東西吧?         187

Node.js、Mongodb、npm、MVVM、MEAN、react、angularjs......................................... 187

9. 你有了解我們公司嗎?說說你的認識?.............................................................. 187

10. 移動端(比如:Android IOS)怎么做好用戶體驗?............................................. 187

11. 你所知道的頁面性能優化方法有那些?............................................................ 188

12. 除了前端以外還了解什么其它技術么?你最最厲害的技能是什么?.................. 188

13. AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)規范區別?        188

14. 談談你認為怎樣做能使項目做的更好?............................................................ 188

15. 你對前端界面工程師這個職位是怎么樣理解的?它的前景會怎么樣?.............. 188

16. php中下面哪個函數可以打開一個文件,以對文件進行讀和寫操作?................ 188

17. php中rmdir可以直接刪除文件夾嗎?該目錄必須是空的,而且要有相應的權限--來自api          188

18. phpinset和empty的區別,舉例說明................................................................. 188

19. php中$_SERVER變量中如何得到當前執行腳本路勁........................................... 189

20. 寫一個php函數,要求兩個日期字符串的天數差,如2012-02-05~2012-03-06的日期差數          189

21. 一個衣櫃中放了許多雜亂的襯衫,如果讓你去整理一下,使得更容易找到你想要的衣服;你會怎么做?請寫出你的做法和思路?.............................................................................................. 189

22. 如何優化網頁加載速度?................................................................................. 189

23. 工作流程,你怎么來實現頁面設計圖,你認為前端應該如何高質量完成工作?.. 190

24. 介紹項目經驗、合作開發、獨立開發。............................................................ 190

25. 開發過程中遇到困難,如何解決。................................................................... 190

26. 對前端界面工程師這個職位是怎么樣理解的?它的前景會怎么樣?.................. 190

 


 

 

一、HTML和CSS

1.        你做的頁面在哪些流覽器測試過?這些瀏覽器的內核分別是什么?

IE: trident內核

Firefox:gecko內核

Safari:webkit內核

Opera:以前是presto內核,Opera現已改用Google Chrome的Blink內核

Chrome:Blink(基於webkit,Google與Opera Software共同開發)

2.        每個HTML文件里開頭都有個很重要的東西,Doctype,知道這是干什么的嗎?

<!DOCTYPE> 聲明位於文檔中的最前面的位置,處於 <html> 標簽之前。此標簽可告知瀏覽器文檔使用哪種 HTML 或 XHTML 規范。(重點:告訴瀏覽器按照何種規范解析頁面)

3.        Quirks模式是什么?它和Standards模式有什么區別???????????

從IE6開始,引入了Standards模式,標准模式中,瀏覽器嘗試給符合標准的文檔在規范上的正確處理達到在指定瀏覽器中的程度。

在IE6之前CSS還不夠成熟,所以IE5等之前的瀏覽器對CSS的支持很差, IE6將對CSS提供更好的支持,然而這時的問題就來了,因為有很多頁面是基於舊的布局方式寫的,而如果IE6 支持CSS則將令這些頁面顯示不正常,如何在即保證不破壞現有頁面,又提供新的渲染機制呢?

在寫程序時我們也會經常遇到這樣的問題,如何保證原來的接口不變,又提供更強大的功能,尤其是新功能不兼容舊功能時。遇到這種問題時的一個常見做法是增加參數和分支,即當某個參數為真時,我們就使用新功能,而如果這個參數 不為真時,就使用舊功能,這樣就能不破壞原有的程序,又提供新功能。IE6也是類似這樣做的,它將DTD當成了這個“參數”,因為以前的頁面大家都不會去寫DTD,所以IE6就假定 如果寫了DTD,就意味着這個頁面將采用對CSS支持更好的布局,而如果沒有,則采用兼容之前的布局方式。這就是Quirks模式(怪癖模式,詭異模式,怪異模式)。

區別:

總體會有布局、樣式解析和腳本執行三個方面的區別。

盒模型:在W3C標准中,如果設置一個元素的寬度和高度,指的是元素內容的寬度和高度,而在Quirks 模式下,IE的寬度和高度還包含了padding和border。

 

設置行內元素的高寬:在Standards模式下,給<span>等行內元素設置wdith和height都不會生效,而在quirks模式下,則會生效。

設置百分比的高度:在standards模式下,一個元素的高度是由其包含的內容來決定的,如果父元素沒有設置百分比的高度,子元素設置一個百分比的高度是無效的用margin:0 auto設置水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下卻會失效。

(還有很多,答出什么不重要,關鍵是看他答出的這些是不是自己經驗遇到的,還是說都是看文章看的,甚至完全不知道。)

4.        div+css的布局較table布局有什么優點?

改版的時候更方便 只要改css文件。

頁面加載速度更快、結構化清晰、頁面顯示簡潔

表現與結構相分離

易於優化(seo)搜索引擎更友好,排名更容易靠前。

5.        img的alt與title有何異同? strong與em的異同?

a:alt(alt text):為不能顯示圖像、窗體或applets的用戶代理(UA),alt屬性用來指定替換文字。替換文字的語言由lang屬性指定。(在IE瀏覽器下會在沒有title時把alt當成 tool tip顯示)

title(tool tip):該屬性為設置該屬性的元素提供建議性的信息。

strong:粗體強調標簽,強調,表示內容的重要性

em:斜體強調標簽,更強烈強調,表示內容的強調點

6.        你能描述一下漸進增強和優雅降級之間的不同嗎?

漸進增強 progressive enhancement:針對低版本瀏覽器進行構建頁面,保證最基本的功能,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗

優雅降級 graceful degradation:一開始就構建完整的功能,然后再針對低版本瀏覽器進行兼容。

區別:優雅降級是從復雜的現狀開始,並試圖減少用戶體驗的供給,而漸進增強則是從一個非常基礎的,能夠起作用的版本開始,並不斷擴充,以適應未來環境的需要。降級(功能衰減)意味着往回看;而漸進增強則意味着朝前看,同時保證其根基處於安全地帶。

“優雅降級”觀點

“優雅降級”觀點認為應該針對那些最高級、最完善的瀏覽器來設計網站。而將那些被認為“過時”或有功能缺失的瀏覽器下的測試工作安排在開發周期的最后階段,並把測試對象限定為主流瀏覽器(如 IE、Mozilla 等)的前一個版本。

在這種設計范例下,舊版的瀏覽器被認為僅能提供“簡陋卻無妨 (poor, but passable)” 的瀏覽體驗。你可以做一些小的調整來適應某個特定的瀏覽器。但由於它們並非我們所關注的焦點,因此除了修復較大的錯誤之外,其它的差異將被直接忽略。

“漸進增強”觀點

“漸進增強”觀點則認為應關注於內容本身。

內容是我們建立網站的誘因。有的網站展示它,有的則收集它,有的尋求,有的操作,還有的網站甚至會包含以上的種種,但相同點是它們全都涉及到內容。這使得“漸進增強”成為一種更為合理的設計范例。這也是它立即被 Yahoo! 所采納並用以構建其“分級式瀏覽器支持 (Graded Browser Support)”策略的原因所在。

那么問題來了。現在產品經理看到IE6,7,8網頁效果相對高版本現代瀏覽器少了很多圓角,陰影(CSS3),要求兼容(使用圖片背景,放棄CSS3),你會如何說服他?

7.        為什么利用多個域名來存儲網站資源會更有效?

CDN緩存更方便

突破瀏覽器並發限制

節約cookie帶寬

節約主域名的連接數,優化頁面響應速度

防止不必要的安全問題

8.        請談一下你對網頁標准和標准制定機構重要性的理解。

網頁標准和標准制定機構都是為了能讓web發展的更‘健康’,開發者遵循統一的標准,降低開發難度,開發成本,SEO也會更好做,也不會因為濫用代碼導致各種BUG、安全問題,最終提高網站易用性。

9.        請描述一下cookies,sessionStorage和localStorage的區別?????

sessionStorage用於本地存儲一個會話(session)中的數據,這些數據只有在同一個會話中的頁面才能訪問並且當會話結束后數據也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲,僅僅是會話級別的存儲。而localStorage用於持久化的本地存儲,除非主動刪除數據,否則數據是永遠不會過期的。

web storage和cookie的區別

Web Storage的概念和cookie相似,區別是它是為了更大容量存儲設計的。Cookie的大小是受限的,並且每次你請求一個新的頁面的時候Cookie都會被發送過去,這樣無形中浪費了帶寬,另外cookie還需要指定作用域,不可以跨域調用。

除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發者自己封裝setCookie,getCookie。但是Cookie也是不可以或缺的:Cookie的作用是與服務器進行交互,作為HTTP規范的一部分而存在 ,而Web Storage僅僅是為了在本地“存儲”數據而生。

10.   簡述一下src與href的區別。

src用於替換當前元素,href用於在當前文檔和引用資源之間確立聯系。

src是source的縮寫,指向外部資源的位置,指向的內容將會嵌入到文檔中當前標簽所在位置;在請求src資源時會將其指向的資源下載並應用到文檔內,例如js腳本,img圖片和frame等元素。

<script src =”js.js”></script>

瀏覽器解析到該元素時,會暫停其他資源的下載和處理,直到將該資源加載、編譯、執行完畢,圖片和框架等元素也如此,類似於將所指向資源嵌入當前標簽內。這也是為什么將js腳本放在底部而不是頭部。

href是Hypertext Reference的縮寫,指向網絡資源所在位置,建立和當前元素(錨點)或當前文檔(鏈接)之間的鏈接,如果我們在文檔中添加

<link href=”common.css” rel=”stylesheet”/>

那么瀏覽器會識別該文檔為css文件,就會並行下載資源並且不會停止對當前文檔的處理。這也是為什么建議使用link方式來加載css,而不是使用@import方式。

11.   知道的網頁制作會用到的圖片格式有哪些?

png-8,png-24,jpeg,gif,svg。

但是上面的那些都不是面試官想要的最后答案。面試官希望聽到是Webp。(是否有關注新技術,新鮮事物)

科普一下Webp:WebP格式,谷歌(google)開發的一種旨在加快圖片加載速度的圖片格式。圖片壓縮體積大約只有JPEG的2/3,並能節省大量的服務器帶寬資源和數據空間。Facebook Ebay等知名網站已經開始測試並使用WebP格式。

在質量相同的情況下,WebP格式圖像的體積要比JPEG格式圖像小40%

12.   知道什么是微格式嗎?談談理解。在前端構建中應該考慮微格式嗎?

微格式(Microformats)是一種讓機器可讀的語義化XHTML詞匯的集合,是結構化數據的開放標准。是為特殊應用而制定的特殊格式。

優點:將智能數據添加到網頁上,讓網站內容在搜索引擎結果界面可以顯示額外的提示。(應用范例:豆瓣,有興趣自行google)

13.   在css/js代碼上線之后開發人員經常會優化性能,從用戶刷新網頁開始,一次js請求一般情況下有哪些地方會有緩存處理?

答案:dns緩存,cdn緩存,瀏覽器緩存,服務器緩存。

14.   一個頁面上有大量的圖片(大型電商網站),加載很慢,你有哪些方法優化這些圖片的加載,給用戶更好的體驗。

圖片懶加載,在頁面上的未可視區域可以添加一個滾動條事件,判斷圖片位置到瀏覽器頂端的距離和到頁面低端的距離,如果前者小於后者,優先加載。

如果為幻燈片、相冊等,可以使用圖片預加載技術,將當前展示圖片的前一張和后一張優先下載。

如果圖片為css圖片,可以使用CSSsprite,SVGsprite,Iconfont、Base64等技術。

如果圖片過大,可以使用特殊編碼的圖片,加載時會先加載一張壓縮的特別厲害的縮略圖,以提高用戶體驗。

如果圖片展示區域小於圖片的真實大小,則因在服務器端根據業務需要先行進行圖片壓縮,圖片壓縮后大小與展示一致。

15.   你如何理解HTML結構的語義化? 

去掉或樣式丟失的時候能讓頁面呈現清晰的結構:

html本身是沒有表現的,我們看到例如<h1>是粗體,字體大小2em,加粗;<strong>是加粗的,不要認為這是html的表現,這些其實html默認的css樣式在起作用,所以去掉或樣式丟失的時候能讓頁面呈現清晰的結構不是語義化的HTML結構的優點,但是瀏覽器都有有默認樣式,默認樣式的目的也是為了更好的表達html的語義,可以說瀏覽器的默認樣式和語義化的HTML結構是不可分割的。

屏幕閱讀器(如果訪客有視障)會完全根據你的標記來“讀”你的網頁.

例如,如果你使用的含語義的標記,屏幕閱讀器就會“逐個拼出”你的單詞,而不是試着去對它完整發音.

PDA、手機等設備可能無法像普通電腦的瀏覽器一樣來渲染網頁(通常是因為這些設備對CSS的支持較弱)

使用語義標記可以確保這些設備以一種有意義的方式來渲染網頁.理想情況下,觀看設備的任務是符合設備本身的條件來渲染網頁.

語義標記為設備提供了所需的相關信息,就省去了你自己去考慮所有可能的顯示情況(包括現有的或者將來新的設備).例如,一部手機可以選擇使一段標記了標題的文字以粗體顯示.而掌上電腦可能會以比較大的字體來顯示.無論哪種方式一旦你對文本標記為標題,您就可以確信讀取設備將根據其自身的條件來合適地顯示頁面.

搜索引擎的爬蟲也依賴於標記來確定上下文和各個關鍵字的權重

過去你可能還沒有考慮搜索引擎的爬蟲也是網站的“訪客”,但現在它們他們實際上是極其寶貴的用戶.沒有他們的話,搜索引擎將無法索引你的網站,然后一般用戶將很難過來訪問.

你的頁面是否對爬蟲容易理解非常重要,因為爬蟲很大程度上會忽略用於表現的標記,而只注重語義標記.

因此,如果頁面文件的標題被標記,而不是,那么這個頁面在搜索結果的位置可能會比較靠后.除了提升易用性外,語義標記有利於正確使用CSS和JavaScript,因為其本身提供了許多“鈎鈎”來應用頁面的樣式與行為.

SEO主要還是靠你網站的內容和外部鏈接的

便於團隊開發和維護

W3C給我們定了一個很好的標准,在團隊中大家都遵循這個標准,可以減少很多差異化的東西,方便開發和維護,提高開發效率,甚至實現模塊化開發

16.   談談以前端角度出發做好SEO需要考慮什么?

了解搜索引擎如何抓取網頁和如何索引網頁

你需要知道一些搜索引擎的基本工作原理,各個搜索引擎之間的區別,搜索機器人(SE robot 或叫 web crawler)如何進行工作,搜索引擎如何對搜索結果進行排序等等。

Meta標簽優化

主要包括主題(Title),網站描述(Description),和關鍵詞(Keywords)。還有一些其它的隱藏文字比如Author(作者),Category(目錄),Language(編碼語種)等。

如何選取關鍵詞並在網頁中放置關鍵詞

搜索就得用關鍵詞。關鍵詞分析和選擇是SEO最重要的工作之一。首先要給網站確定主關鍵詞(一般在5個上下),然后針對這些關鍵詞進行優化,包括關鍵詞密度(Density),相關度(Relavancy),突出性(Prominency)等等。

了解主要的搜索引擎

雖然搜索引擎有很多,但是對網站流量起決定作用的就那么幾個。比如英文的主要有Google,Yahoo,Bing等;中文的有百度,搜狗,有道等。不同的搜索引擎對頁面的抓取和索引、排序的規則都不一樣。還要了解各搜索門戶和搜索引擎之間的關系,比如AOL網頁搜索用的是Google的搜索技術,MSN用的是Bing的技術。

主要的互聯網目錄

Open Directory自身不是搜索引擎,而是一個大型的網站目錄,他和搜索引擎的主要區別是網站內容的收集方式不同。目錄是人工編輯的,主要收錄網站主頁;搜索引擎是自動收集的,除了主頁外還抓取大量的內容頁面。

按點擊付費的搜索引擎

搜索引擎也需要生存,隨着互聯網商務的越來越成熟,收費的搜索引擎也開始大行其道。最典型的有Overture和百度,當然也包括Google的廣告項目Google Adwords。越來越多的人通過搜索引擎的點擊廣告來定位商業網站,這里面也大有優化和排名的學問,你得學會用最少的廣告投入獲得最多的點擊。

搜索引擎登錄

網站做完了以后,別躺在那里等着客人從天而降。要讓別人找到你,最簡單的辦法就是將網站提交(submit)到搜索引擎。如果你的是商業網站,主要的搜索引擎和目錄都會要求你付費來獲得收錄(比如Yahoo要299美元),但是好消息是(至少到目前為止)最大的搜索引擎Google目前還是免費,而且它主宰着60%以上的搜索市場。

鏈接交換和鏈接廣泛度(Link Popularity)

網頁內容都是以超文本(Hypertext)的方式來互相鏈接的,網站之間也是如此。除了搜索引擎以外,人們也每天通過不同網站之間的鏈接來Surfing(“沖浪”)。其它網站到你的網站的鏈接越多,你也就會獲得更多的訪問量。更重要的是,你的網站的外部鏈接數越多,會被搜索引擎認為它的重要性越大,從而給你更高的排名。

合理的標簽使用

17.   有哪項方式可以對一個DOM設置它的CSS樣式? 

外部樣式表,引入一個外部css文件

內部樣式表,將css代碼放在 <head> 標簽內部

內聯樣式,將css樣式直接定義在 HTML 元素內部

18.   CSS都有哪些選擇器?

派生選擇器(用HTML標簽申明)標簽選擇器;

id選擇器(用DOM的ID申明)

類選擇器(用一個樣式類名申明)

屬性選擇器(用DOM的屬性申明,屬於CSS2,IE6不支持,不常用,不知道就算了)

除了前3種基本選擇器,還有一些擴展選擇器,包括

后代選擇器(利用空格間隔,比如div .a{  })

子代選擇器:(div > p選擇div下的第一個子元素p標簽)

群組選擇器(利用逗號間隔,比如p,div,#a{  })

那么問題來了,CSS選擇器的優先級是怎么樣定義的?

基本原則:

一般而言,選擇器越特殊,它的優先級越高。也就是選擇器指向的越准確,它的優先級就越高。

復雜的計算方法:

用1表示派生選擇器的優先級

用10表示類選擇器的優先級

用100標示ID選擇器的優先級

div.test1 .span var 優先級 1+10 +10 +1

span#xxx .songs li 優先級1+100 + 10 + 1

#xxx li 優先級 100 +1

那么問題來了,看下列代碼,<p>標簽內的文字是什么顏色的?

<style>

.classA{ color:blue;}

.classB{ color:red;}

</style>

<body>

<p class='classB classA'> 123 </p>

</body>

答案:red。與樣式定義在文件中的先后順序有關,即是后面的覆蓋前面的,與在<p class=’classB classA’>中的先后關系無關。

19.   CSS中可以通過哪些屬性定義,使得一個DOM元素不顯示在瀏覽器可視范圍內?

最基本的:

設置display屬性為none,或者設置visibility屬性為hidden

技巧性:

設置寬高為0,設置透明度為0,設置z-index位置在-1000em

20.   超鏈接訪問過后hover樣式就不出現的問題是什么?如何解決?

答案:被點擊訪問過的超鏈接樣式不在具有hover和active了,解決方法是改變CSS屬性的排列順序: L-V-H-A(link,visited,hover,active)

21.   什么是Css Hack?ie6,7,8的hack分別是什么?

我們對於CSS來說他們來解決各瀏覽器對CSS解釋不同所采取的區別不同瀏覽器制作不同的CSS樣式的設置來解決這些問題就叫作CSS Hack。

各自的瀏覽器只會識別自己獨有的hack字符,也會優先解析自己的hack而進行渲染頁面

答案:針對不同的瀏覽器寫不同的CSS code的過程,就是CSS hack。

示例如下:

#test{  

        width:300px;   w3c的標准

        height:300px;  

        background-color:blue;      /*firefox*/

        background-color:red\9;      /*all ie*/

        background-color:yellow;    /*ie8*/

        +background-color:pink;        /*ie7*/

        _background-color:orange;       /*ie6*/    } 

        :root #test { background-color:purple\9; }  /*ie9*/

@media all and (min-width:0px)

{ #test {background-color:black;} }  /*opera*/

@media screen and (-webkit-min-device-pixel-ratio:0)

{ #test {background-color:gray;} }       /*chrome and safari*/

CSS3目前標准還沒有統一,各個瀏覽器都有自己的表現方式,甚至有的實現,有的未實現,在前面加一些前綴以表示支持某個特定瀏覽器,這也是CSS 內部hack的基本原理,向上面這些簡單易懂,但是真正的CSS hack 遠遠不止於此,因為有不死的IE6及其各種奇葩的兄弟版本。

 

 

22.   行內元素和塊級元素的具體區別是什么?行內元素的padding和margin可設置嗎?

塊級元素(block)特性:

總是獨占一行,表現為另起一行開始,而且其后的元素也必須另起一行顯示;

寬度(width)、高度(height)、內邊距(padding)和外邊距(margin)都可控制;

內聯元素(inline)特性:

和相鄰的內聯元素在同一行;

寬度(width)、高度(height)、內邊距的top/bottom(padding-top/padding-bottom)和外邊距的top/bottom(margin-top/margin-bottom)都不可改變(也就是padding和margin的left和right是可以設置的),就是里面文字或圖片的大小,內容區域的大小是由內容撐開的

那么問題來了,瀏覽器還有默認的天生inline-block元素(擁有內在尺寸,可設置高寬,但不會自動換行),有哪些?

答案:<input> 、<img> 、<button> 、<texterea> 、<label>

23.   什么是外邊距重疊?重疊的結果是什么?

外邊距重疊就是margin-collapse。

在CSS當中,相鄰的兩個盒子(可能是兄弟關系也可能是祖先關系)的外邊距可以結合成一個單獨的外邊距。這種合並外邊距的方式被稱為折疊,並且因而所結合成的外邊距稱為折疊外邊距。

折疊結果遵循下列計算規則:

兩個相鄰的外邊距都是正數時,折疊結果是它們兩者之間較大的值。

兩個相鄰的外邊距都是負數時,折疊結果是兩者絕對值的較大值。

兩個外邊距一正一負時,折疊結果是兩者的相加的和。

24.   rgba()和opacity的透明效果有什么不同?

rgba()和opacity都能實現透明效果,但最大的不同是opacity作用於元素,以及元素內的所有內容的透明度

rgba()只作用於元素的顏色或其背景色。(設置rgba透明的元素的子元素不會繼承透明效果!)

25.   css中可以讓文字在垂直和水平方向上重疊的兩個屬性是什么?

垂直方向:line-height

水平方向:letter-spacing

那么問題來了,關於letter-spacing的妙用知道有哪些么?

答案:可以用於消除inline-block元素間的換行符空格間隙問題。

26.   如何垂直居中一個浮動元素?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

// 方法一:已知元素的高寬

#div1{

    background-color:#6699FF;

    width:200px;

    height:200px;

    position: absolute;        //父元素需要相對定位

    top: 50%;

    left: 50%;

    margin-top:-100px ;   //二分之一的height,width

    margin-left: -100px;

    }

 

//方法二:未知元素的高寬

 

  #div1{

    width: 200px;

    height: 200px;  //寬高就可以隨意設置了,無需在設置其他的代碼,永運句中顯示

    background-color: #6699FF;

 

    margin:auto;

    position: absolute;        //父元素需要相對定位

    left: 0;

    top: 0;

    right: 0;

    bottom: 0;

    }

那么問題來了,如何垂直居中一個<img>?(用更簡便的方法。)

1

2

3

4

5

6

#container     //<img>的容器設置如下

{

    display:table-cell;

    text-align:center;

    vertical-align:middle;

}

27.   px和em的區別。

px和em都是長度單位,區別是,px的值是固定的,指定是多少就是多少,計算比較容易。em得值不是固定的,並且em會繼承父級元素的字體大小。

瀏覽器的默認字體高都是16px。所以未經調整的瀏覽器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。

28.   描述一個”reset”的CSS文件並如何使用它。知道normalize.css嗎?你了解他們的不同之處?

重置樣式非常多,凡是一個前端開發人員肯定有一個常用的重置CSS文件並知道如何使用它們。他們是盲目的在做還是知道為什么這么做呢?原因是不同的瀏覽器對一些元素有不同的默認樣式,如果你不處理,在不同的瀏覽器下會存在必要的風險,或者更有戲劇性的性發生。

你可能會用Normalize來代替你的重置樣式文件。它沒有重置所有的樣式風格,但僅提供了一套合理的默認樣式值。既能讓眾多瀏覽器達到一致和合理,但又不擾亂其他的東西(如粗體的標題)。

在這一方面,無法做每一個復位重置。它也確實有些超過一個重置,它處理了你永遠都不用考慮的怪癖,像HTML的audio元素不一致或line-height不一致。

29.   Sass、LESS是什么?大家為什么要使用他們?

他們是CSS預處理器。他是CSS上的一種抽象層。他們是一種特殊的語法/語言編譯成CSS。

例如Less是一種動態樣式語言. 將CSS賦予了動態語言的特性,如變量,繼承,運算, 函數. LESS 既可以在客戶端上運行 (支持IE 6+, Webkit, Firefox),也可一在服務端運行 (借助 Node.js)。

為什么要使用它們?

結構清晰,便於擴展。

可以方便地屏蔽瀏覽器私有語法差異。這個不用多說,封裝對瀏覽器語法差異的重復處理,減少無意義的機械勞動。

可以輕松實現多重繼承。

完全兼容 CSS 代碼,可以方便地應用到老項目中。LESS 只是在 CSS 語法上做了擴展,所以老的 CSS 代碼也可以與 LESS 代碼一同編譯。

30.   display:none與visibility:hidden的區別是什么?

display : 隱藏對應的元素並且擠占該元素原來的空間。

visibility: 隱藏對應的元素但是不擠占該元素原來的空間。

即是,使用CSS display:none屬性后,HTML元素(對象)的寬度、高度等各種屬性值都將“丟失”;而使用visibility:hidden屬性后,HTML元素(對象)僅僅是在視覺上看不見(完全透明),而它所占據的空間位置仍然存在。

31.   CSS中link和@import的區別是:

Link屬於html標簽,而@import是CSS中提供的

在頁面加載的時候,link會同時被加載,而@import引用的CSS會在頁面加載完成后才會加載引用的CSS

@import只有在ie5以上才可以被識別,而link是html標簽,不存在瀏覽器兼容性問題

Link引入樣式的權重大於@import的引用(@import是將引用的樣式導入到當前的頁面中)

32.   簡介盒子模型:

CSS的盒子模型有兩種:IE盒子模型、標准的W3C盒子模型模型

盒模型:內容、內邊距、外邊距(一般不計入盒子實際寬度)、邊框

 

33.   為什么要初始化樣式?

由於瀏覽器兼容的問題,不同的瀏覽器對標簽的默認樣式值不同,若不初始化會造成不同瀏覽器之間的顯示差異

但是初始化CSS會對搜索引擎優化造成小影響

34.   BFC是什么?

BFC(塊級格式化上下文),一個創建了新的BFC的盒子是獨立布局的,盒子內元素的布局不會影響盒子外面的元素。在同一個BFC中的兩個相鄰的盒子在垂直方向發生margin重疊的問題

BFC是指瀏覽器中創建了一個獨立的渲染區域,該區域內所有元素的布局不會影響到區域外元素的布局,這個渲染區域只對塊級元素起作用

35.   html語義化是什么?

當頁面樣式加載失敗的時候能夠讓頁面呈現出清晰的結構

有利於seo優化,利於被搜索引擎收錄(更便於搜索引擎的爬蟲程序來識別)

便於項目的開發及維護,使html代碼更具有可讀性,便於其他設備解析。

36.   Doctype的作用?嚴格模式與混雜模式的區別?

<!DOCTYPE>用於告知瀏覽器該以何種模式來渲染文檔

嚴格模式下:頁面排版及JS解析是以該瀏覽器支持的最高標准來執行

混雜模式:不嚴格按照標准執行,主要用來兼容舊的瀏覽器,向后兼容

37.   IE的雙邊距BUG:塊級元素float后設置橫向margin,ie6顯示的margin比設置的較大。


解決:加入_display:inline

38.   HTML與XHTML——二者有什么區別?

1. 所有的標記都必須要有一個相應的結束標記

2. 所有標簽的元素和屬性的名字都必須使用小寫

3. 所有的 XML 標記都必須合理嵌套

4. 所有的屬性必須用引號 "" 括起來

5. 把所有 < 和 & 特殊符號用編碼表示

6. 給所有屬性賦一個值

7. 不要在注釋內容中使用 "--"

8. 圖片必須有說明文字

39.   html常見兼容性問題?

1.雙邊距BUG float引起的  使用display

2.3像素問題 使用float引起的 使用dislpay:inline -3px 

3.超鏈接hover 點擊后失效  使用正確的書寫順序 link visited hover active

4.Ie z-index問題 給父級添加position:relative

5.Png 透明 使用js代碼 改

6.Min-height 最小高度 !Important 解決’

7.select 在ie6下遮蓋 使用iframe嵌套

8.為什么沒有辦法定義1px左右的寬度容器(IE6默認的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)

9.IE5-8不支持opacity,解決辦法:

.opacity {

    opacity: 0.4

    filter: alpha(opacity=60); /* for IE5-7 */

    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; /* for IE 8*/

}

10. IE6不支持PNG透明背景,解決辦法: IE6下使用gif圖片

40.   對WEB標准以及W3C的理解與認識

答:標簽閉合、標簽小寫、不亂嵌套、提高搜索機器人搜索幾率、使用外聯 css和js腳本、結構行為表現的分離、文件下載與頁面速度更快、內容能被更多的用戶所訪問、內容能被更廣泛的設備所訪問、更少的代碼和組件,容易維 護、改版方便,不需要變動頁面內容、提供打印版本而不需要復制內容、提高網站易用性。

41.   行內元素有哪些?塊級元素有哪些?CSS的盒模型?

答:塊級元素:div p h1 h2 h3 h4 form ul
    行內元素: a b br i span input select
    Css盒模型:內容,border ,margin,padding

42.   前端頁面有哪三層構成,分別是什么?作用是什么?

答:結構層 Html 表示層 CSS 行為層 js。

43.   Doctype作用? 嚴格模式與混雜模式-如何觸發這兩種模式,區分它們有何意義?

    (1)、<!DOCTYPE> 聲明位於文檔中的最前面,處於 <html> 標簽之前。告知瀏覽器的解析器,用什么文檔類型 規范來解析這個文檔。

    (2)、嚴格模式的排版和 JS 運作模式是  以該瀏覽器支持的最高標准運行。

    (3)、在混雜模式中,頁面以寬松的向后兼容的方式顯示。模擬老式瀏覽器的行為以防止站點無法工作。

    (4)、DOCTYPE不存在或格式不正確會導致文檔以混雜模式呈現。

44.   行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?

(1)CSS規范規定,每個元素都有display屬性,確定該元素的類型,每個元素都有默認的display值,比如div默認display屬性值為“block”,成為“塊級”元素;span默認display屬性值為“inline”,是“行內”元素。 

(2)行內元素有:a b span img input select strong(強調的語氣) 塊級元素有:div ul ol li dl dt dd h1 h2 h3 h4…p 

(3)知名的空元素:     

<br><hr><img><input><link><meta>鮮為人知的是: <area><base><col><command>

<embed><keygen><param><source><track><wbr>

45.   CSS的盒子模型?

(1)兩種, IE 盒子模型、標准 W3C 盒子模型;IE 的content部分包含了 border 和 pading;

(2)盒模型: 內容(content)、填充(padding)、邊界(margin)、 邊框(border).

46.   CSS 選擇符有哪些?哪些屬性可以繼承?優先級算法如何計算? CSS3新增偽類有那些?

    *   1.id選擇器( # myid)

        2.類選擇器(.myclassname)

        3.標簽選擇器(div, h1, p)

        4.相鄰選擇器(h1 + p)

        5.子選擇器(ul > li)

        6.后代選擇器(li a)

        7.通配符選擇器( * )

        8.屬性選擇器(a[rel = "external"])可擴展的屬性值

        9.偽類選擇器(a: hover, li: nth - child)link vitetd hover active

    *   可繼承: font-size font-family color, UL LI DL DD DT;

    *   不可繼承 :border padding margin width height ;

    *   優先級就近原則,樣式定義最近者為准;

    *   載入樣式以最后載入的定位為准;

優先級為:

       !important >  id > class > tag 

       important 比 內聯優先級高

CSS3新增偽類舉例:

    p:first-of-type 選擇屬於其父元素的首個 <p> 元素的每個 <p> 元素。

    p:last-of-type  選擇屬於其父元素的最后 <p> 元素的每個 <p> 元素。

    p:only-of-type  選擇屬於其父元素唯一的 <p> 元素的每個 <p> 元素。

    p:only-child    選擇屬於其父元素的唯一子元素的每個 <p> 元素。

    p:nth-child(2)  選擇屬於其父元素的第二個子元素的每個 <p> 元素。

    :enabled、:disabled 控制表單控件的禁用狀態。

    :checked,單選框或復選框被選中。

47.   如何居中div,如何居中一個浮動元素?

給div設置一個寬度,然后添加margin:0 auto屬性

    div{

        width:200px;

        margin:0 auto;

     } 

居中一個浮動元素

      確定容器的寬高 寬500 高 300 的層

      設置層的外邊距

     .div {

      Width:500px ; height:300px;//高度可以不設

      Margin: -150px 0 0 -250px;

      position:relative;相對定位

      background-color:pink;//方便看效果

      left:50%;

      top:50%;

    }

48.   瀏覽器的內核分別是什么?經常遇到的瀏覽器的兼容性有哪些?原因,解決方法是什么,常用hack的技巧 ?

    * IE瀏覽器的內核Trident、 Mozilla的Gecko、google的WebKit、Opera內核Presto;

    * png24為的圖片在iE6瀏覽器上出現背景,解決方案是做成PNG8.

    * 瀏覽器默認的margin和padding不同。解決方案是加一個全局的*{margin:0;padding:0;}來統一。Css的初始化,取消瀏覽器的css的默認樣式

    * IE6雙邊距bug:塊屬性標簽float后,又有橫行的margin情況下,在ie6顯示margin比設置的大。

      浮動ie產生的雙倍距離 #box{ float:left; width:10px; margin:0 0 0 100px;}

     這種情況之下IE會產生20px的距離,解決方案是在float的標簽樣式控制中加入 ——_display:inline;將其轉化為行內屬性。(_這個符號只有ie6會識別)

      漸進識別的方式,從總體中逐漸排除局部。

      首先,巧妙的使用“\9”這一標記,將IE游覽器從所有情況中分離出來。

      接着,再次使用“+”將IE8和IE7、IE6分離開來,這樣IE8已經獨立識別。

      css

          .bb{

           background-color:#f1ee18;/*所有識別*/

          .background-color:#00deff\9; /*IE6、7、8識別*/

          +background-color:#a200ff;/*IE6、7識別*/

          _background-color:#1e0bd1;/*IE6識別*/

          }

    *  IE下,可以使用獲取常規屬性的方法來獲取自定義屬性,

       也可以使用getAttribute()獲取自定義屬性;

       Firefox下,只能使用getAttribute()獲取自定義屬性.

       解決方法:統一通過getAttribute()獲取自定義屬性.

    *  IE下,even對象有x,y屬性,但是沒有pageX,pageY屬性;

      Firefox下,event對象有pageX,pageY屬性,但是沒有x,y屬性.

    * (條件注釋)缺點是在IE瀏覽器下可能會增加額外的HTTP請求數。

    * Chrome 中文界面下默認會將小於 12px 的文本強制按照 12px 顯示, 可通過加入 CSS 屬性 -webkit-text-size-adjust: none; 解決.

    超鏈接訪問過后hover樣式就不出現了 被點擊訪問過的超鏈接樣式不在具有hover和active了解決方法是改變CSS屬性的排列順序:

    L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}

49.   列出display的值,說明他們的作用。position的值, relative和absolute定位原點是?

  1. block 像塊類型元素一樣顯示。

  none 缺省值。向行內元素類型一樣顯示。徹底的隱藏元素包括位置也不在占據

  inline-block 象行內元素一樣顯示,但其內容象塊類型元素一樣顯示。

  list-item 象塊類型元素一樣顯示,並添加樣式列表標記。

  2. position的值

  *absolute

        生成絕對定位的元素,相對於 static 定位以外的第一個父元素進行定位。

  *fixed (老IE不支持)

        生成絕對定位的元素,相對於瀏覽器窗口進行定位。

  * relative

        生成相對定位的元素,相對於其正常位置進行定位。

  * static  默認值。沒有定位,元素出現在正常的流中

  *(忽略 top, bottom, left, right z-index 聲明)。

  * inherit 規定從父元素繼承 position 屬性的值。

50.   absolute的containing block計算方式跟正常流有什么不同??????

lock-level boxes
一個 block-level element ('display' 屬性值為 'block', 'list-item' 或是 ‘table’) 會生成一個 block-level box,這樣的盒子會參與到 block-formatting context (一種布局的方式) 中。
block formatting context
在這種布局方式下,盒子們自所在的 containing block 頂部起一個接一個垂直排列,水平方向上撐滿整個寬度 (除非內部的盒子自己內部建立了新的 BFC)。
containing block
一般來說,盒子本身就為其子孫建立了 containing block,用來計算內部盒子的位置、大小,而對內部的盒子,具體采用哪個 containing block 來計算,需要分情況來討論:

若此元素為 inline 元素,則 containing block 為能夠包含這個元素生成的第一個和最后一個 inline box 的 padding box (除 margin, border 外的區域) 的最小矩形;
否則則由這個祖先元素的 padding box 構成。
根元素所在的 containing block 被稱為 initial containing block,在我們常用的瀏覽器環境下,指的是原點與 canvas 重合,大小和 viewport 相同的矩形;
對於 position 為 static 或 relative 的元素,其 containing block 為祖先元素中最近的 block container box 的 content box (除 margin, border, padding 外的區域);
對於 position:fixed 的元素,其 containing block 由 viewport 建立;
對於 position:absolute 的元素,則是先找到其祖先元素中最近的 position 屬性非 static 的元素,然后判斷:
如果都找不到,則為 initial containing block。

 

51.   對WEB標准以及W3C的理解與認識

標簽閉合、標簽小寫、不亂嵌套、提高搜索機器人搜索幾率使用外 鏈css和js腳本、結構行為表現的分離、文件下載與頁面速度更快、內容能被更多的用戶所訪問、內容能被更廣泛的設備所訪問、更少的代碼和組件,容易維 護、改版方便,不需要變動頁面內容、提供打印版本而不需要復制內容、提高網站易用性;

52.   css的基本語句構成是

選擇器{屬性1:值1;屬性2:值2;……}

53.   瀏覽器標准模式和怪異模式之間的區別是什么?

盒子模型 渲染模式的不同

使用 window.top.document.compatMode 可顯示為什么模式

54.   CSS中可以通過哪些屬性定義,使得一個DOM元素不顯示在瀏覽器可視范圍內?  

  最基本的:

  設置display屬性為none,或者設置visibility屬性為hidden

  技巧性:

  設置寬高為0,設置透明度為0,設置z-index位置在-1000

55.   行內元素和塊級元素的具體區別是什么?行內元素的padding和margin可設置嗎?

  塊級元素(block)特性:

總是獨占一行,表現為另起一行開始,而且其后的元素也必須另起一行顯示;

寬度(width)、高度(height)、內邊距(padding)和外邊距(margin)都可控制;

  內聯元素(inline)特性:

和相鄰的內聯元素在同一行;

寬度(width)、高度(height)、內邊距的top/bottom(padding-top/padding-bottom)和外邊距的top/bottom(margin-top/margin-bottom)都不可改變(也就是padding和margin的left和right是可以設置的),就是里面文字或圖片的大小。

  那么問題來了,瀏覽器還有默認的天生inline-block元素(擁有內在尺寸,可設置高寬,但不會自動換行),有哪些

  答案:<input> 、<img> 、<button> 、<textarea> 、<label>

56.   什么是外邊距重疊?重疊的結果是什么?

  答案:

  外邊距重疊就是margin-collapse。

  在CSS當中,相鄰的兩個盒子(可能是兄弟關系也可能是祖先關系)的外邊距可以結合成一個單獨的外邊距。這種合並外邊距的方式被稱為折疊,並且因而所結合成的外邊距稱為折疊外邊距。

  折疊結果遵循下列計算規則:

  1. 兩個相鄰的外邊距都是正數時,折疊結果是它們兩者之間較大的值。
  2. 兩個相鄰的外邊距都是負數時,折疊結果是兩者絕對值的較大值。
  3. 兩個外邊距一正一負時,折疊結果是兩者的相加的和。

  父元素設置特定的寬高上的邊框、內邊距、內容填充

58、描述一個"reset"的CSS文件並如何使用它。知道normalize.css嗎?你了解他們的不同之處? 

  重置樣式非常多,凡是一個前端開發人員肯定有一個常用的重置CSS文件並知道如何使用它們。他們是盲目的在做還是知道為什么這么做呢?原因是不同的瀏覽器對一些元素有不同的默認樣式,如果你不處理,在不同的瀏覽器下會存在必要的風險,或者更有戲劇性的性發生。

  你可能會用Normalize來代替你的重置樣式文件。它沒有重置所有的樣式風格,但僅提供了一套合理的默認樣式值。既能讓眾多瀏覽器達到一致和合理,但又不擾亂其他的東西(如粗體的標題)。

  在這一方面,無法做每一個復位重置。它也確實有些超過一個重置,它處理了你永遠都不用考慮的怪癖,像HTML的audio元素不一致或line-height不一致。

57.   說display屬性有哪些?可以做什么?

display:block行內元素轉換為塊級元素

  display:inline塊級元素轉換為行內元素

  display:inline-block轉為內聯元素

58.   哪些css屬性可以繼承?

可繼承: font-size font-family color, ul li dl dd dt;

  不可繼承 :border padding margin width height ;盒模型的屬性。寬度默認是占據一整行,

59.   css優先級算法如何計算?

!important >  id > class > 標簽

  !important 比 內聯優先級高

  *優先級就近原則,樣式定義最近者為准;

  *以最后載入的樣式為准;

60.   b標簽和strong標簽,i標簽和em標簽的區別?

后者有語義,前者則無。

61.   有那些行內元素、有哪些塊級元素、盒模型?

1.內聯元素(inline element)

a – 錨點

abbr – 縮寫

acronym – 首字

b – 粗體(不推薦)

big – 大字體

br – 換行

em – 強調

font – 字體設定(不推薦)

i – 斜體

img – 圖片

input – 輸入框

label 表格標簽

s – 中划線(不推薦)

select – 項目選擇

small 小字體文本

span – 常用內聯容器,定義文本內區塊

strike – 中划線

strong 粗體強調

sub 下標

sup 上標

textarea – 多行文本輸入框

tt – 電傳文本

u – 下划線

var – 定義變量

2、塊級元素

address – 地址

blockquote – 塊引用

center – 舉中對齊塊

dir – 目錄列表

div – 常用塊級容易,也是css layout的主要標簽

dl – 定義列表

fieldset – form控制組

form – 交互表單

h1 – 大標題

h2 – 副標題

h3 – 3級標題

h4 – 4級標題

h5 – 5級標題

h6 – 6級標題

hr – 水平分隔線

isindex – input prompt

menu 菜單列表

noframes – frames可選內容,(對於不支持frame的瀏覽器顯示此區塊內容)

noscript – )可選腳本內容(對於不支持script的瀏覽器顯示此內容)

ol – 排序表單

p – 段落

pre – 格式化文本

table 表格

ul – 非排序列表

3.CSS盒子模型包含四個部分組成:

內容、填充(padding)、邊框(border)、外邊界(margin)。

62.   有哪些選擇符,優先級的計算公式是什么?行內樣式和!important哪個優先級高?

#ID > .class > 標簽選擇符  !important優先級高,其次是行內嵌套樣式,在次是id、class、標簽。。。。。。。

63.   我想讓行內元素跟上面的元素距離10px,加margin-top和padding-top可以嗎?不能設置盒模型的垂直的樣式。

  margin-top,padding-top無效

64.   CSS的盒模型由什么組成?

  內容,border ,margin,padding

65.   說說display屬性有哪些?可以做什么?

  display:block行內元素轉換為塊級元素

  display:inline塊級元素轉換為行內元素

  display:inline-block轉為內聯元素

66.   哪些css屬性可以繼承?

  可繼承: font-size font-family color, ul li dl dd dt;

  不可繼承 :border padding margin width height ;

67.   css優先級算法如何計算?

  !important >  id > class > 標簽

  !important 比 內聯優先級高

  * 優先級就近原則,樣式定義最近者為准;

  * 以最后載入的樣式為准;

 

二、JS基礎

  1. javascript的typeof返回哪些數據類型

 alert(typeof [1, 2]); //object

    alert(typeof 'leipeng'); //string

    var i = true; 

    alert(typeof i); //boolean

    alert(typeof 1); //number

    var a; 

    alert(typeof a); //undefined

    function a(){;};

    alert(typeof a) //function

  1. 例舉3種強制類型轉換和2種隱式類型轉換?

強制(parseInt(),parseFloat(),Number())

隱式(== ,!!)

  1. split() 、join() 的區別

前者是切割成數組的形式,后者是將數組轉換成字符串

  1. 數組方法pop() push() unshift() shift()

Push()尾部添加 pop()尾部刪除

Unshift()頭部添加 shift()頭部刪除

  1. 事件綁定和普通事件有什么區別

普通添加事件的方法:

var btn = document.getElementById("hello");

btn.onclick = function(){

         alert(1);

}

btn.onclick = function(){

         alert(2);

}

執行上面的代碼只會alert 2   重疊覆蓋

 

事件綁定方式添加事件:

var btn = document.getElementById("hello");

btn.addEventListener("click",function(){

         alert(1);

},false);  冒泡事件,

btn.addEventListener("click",function(){

         alert(2);

},false);

執行上面的代碼會先alert 1 再 alert 2  不會重疊前面的綁定的事件

普通添加事件的方法不支持添加多個事件,最下面的事件會覆蓋上面的,而事件綁定(addEventListener)方式添加事件可以添加多個。

addEventListener不兼容低版本IE

普通事件無法取消

addEventLisntener還支持事件冒泡+事件捕獲,

removeEventLIstener取消綁定事件

  1. IE和DOM事件流的區別:

1.執行順序不一樣、

2.參數不一樣

3.事件加不加on

4.this指向問題

  1. IE和標准下有哪些兼容性的寫法:事件對象event

Var ev = ev || window.event

document.documentElement.clientWidth || document.body.clientWidth

Var target = ev.srcElement||ev.target

  1. call和apply的區別

call方法: 
語法:call(thisObj,Object1,Object2...)
定義:調用一個對象的一個方法,以另一個對象替換當前對象。也就是改變當前的this指向的問題
說明:
call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。 
如果沒有提供 thisObj 參數,那么 Global 對象被用作 thisObj。 

apply方法: 
語法:apply(thisObj,[argArray])
定義:應用某一對象的一個方法,用另一個對象替換當前對象。 
說明: 
如果 argArray 不是一個有效的數組或者不是 arguments 對象,那么將導致一個 TypeError。 
如果沒有提供 argArray 和 thisObj 任何一個參數,那么 Global 對象將被用作 thisObj, 並且無法被傳遞任何參數。

  1. b繼承a的方法

function A( age, name ){

  this.age = age;

  this.name = name;

}

 

A.prototype.show = function(){

  alert('父級方法');

}

 

function B(age,name,job){

  A.apply( this, arguments );

  this.job = job;

}

 

B.prototype = new A();

var b = new A(14,'俠客行');

var a = new B(15,'狼俠','俠客');

  1. 如何阻止事件冒泡和默認事件

canceBubble()只支持IE,return false,stopPropagation()

e.predefiut()

  1. 添加 刪除 替換 插入到某個節點的方法

obj.appendChid()

obj.insertBefore()

obj.replaceChild()

obj.removeChild()

  1. javascript的本地對象,內置對象和宿主對象

本地對象為array obj regexp等可以new實例化

內置對象為gload Math 等不可以實例化的

宿主為瀏覽器自帶的document,window 等

  1. window.onload 和document.ready的區別

引入js文件的兩種方式:一種原生的 一種是jQuery庫的入口函數

window.onload 是在dom文檔樹加載完和所有文件加載完之后執行一個函數Document.ready原生種沒有這個方法,jquery中有 $(document).ready(function(){代碼}),在dom文檔樹加載完之后執行一個函數(注意,這里面的文檔樹加載完不代表全部文件加載完)。

$(document).ready要比window.onload先執行,執行的上下文不同,

window.onload只能出來一次,$(document).ready可以出現多次

  1. ”==”和“===”的不同

前者會自動轉換類型,只是比較數值,不比較數據類型

后者不會:即比較數據類型也有比較數值

  1. javascript的同源策略

一段腳本只能讀取來自於同一來源的窗口和文檔的屬性,這里的同一來源指的是主機名、議和端口號的組合

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

沒有標准答案。

javaScript一種直譯腳本語言,是一種動態類型、弱類型、基於原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用於客戶端的腳本語言,最早是在HTML網頁上使用,用來給HTML網頁增加動態功能。JavaScript兼容於ECMA標准,因此也稱為ECMAScript

基本特點

1.是一種解釋性腳本語言(代碼不進行預編譯)。

2.主要用來向HTML標准通用標記語言下的一個應用)頁面添加交互行為。

3.可以直接嵌入HTML頁面,但寫成單獨的js文件有利於結構和行為的分離

4.跨平台特性,在絕大多數瀏覽器的支持下,可以在多種平台下運行(如WindowsLinux、Mac、Android、iOS等)。

  1. JavaScript的數據類型都有什么?

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

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

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

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

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

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

 

 

 

 

 

 

if(typeof Array.isArray==="undefined")

{

  Array.isArray = function(arg){

        return Object.prototype.toString.call(arg)==="[object Array]"

    }; 

}

  1. 已知ID的Input輸入框,希望獲取這個輸入框的輸入值,怎么做?(不使用第三方框架)

 

document.getElementById(“ID”).value

$(“#id”).val();

  1. 希望獲取到頁面中所有的checkbox怎么做?(不使用第三方框架)

 

 

 

 

 

 

 

 

var domList = document.getElementsByTagName(‘input’)

var checkBoxList = [];

var len = domList.length;  //緩存到局部變量

while (len--) {  //使用while的效率會比for循環更高

  if (domList[len].type == ‘checkbox’) {

      checkBoxList.push(domList[len]);

  }

}

  1. 設置一個已知ID的DIV的html內容為xxxx,字體顏色設置為黑色(不使用第三方框架)

 

 

 

var dom = document.getElementById(“ID”);

dom.innerHTML = “xxxx”

dom.style.color = “#000”

  1. 當一個DOM節點被點擊時候,我們希望能夠執行一個函數,應該怎么做?

直接在DOM里綁定事件:<div onclick=”test()”></div>

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

通過事件添加進行綁定:addEventListener(xxx, ‘click’, test)

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

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

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

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

  1. 看下列代碼輸出為何?解釋原因。

 

 

 

var a;

alert(typeof a); // undefined

alert(b); // 報錯

解釋:Undefined是一個只有一個值的數據類型,這個值就是“undefined”,在使用var聲明變量但並未對其賦值進行初始化時,這個變量的值就是undefined。而b由於未聲明將報錯。注意未申明的變量(a is not defined)和聲明了未賦值的是不一樣的

  1. 看下列代碼,輸出什么?解釋原因。

 

 

var a = null;

alert(typeof a); //object

解釋:null是一個只有一個值的數據類型,這個值就是null。表示一個空指針對象,所以用typeof檢測會返回”object”。

  1. 看下列代碼,輸出什么?解釋原因。

 

 

 

 

 

 

 

 

 

var undefined;

undefined == null; // true

1 == true;   // true

2 == true;   // false

0 == false;  // true

0 == '';     // true

NaN == NaN;  // false

[] == false; // true

[] == ![];   // true

  • undefined與null相等,但不恆等(===)

一個是number一個是string時,會嘗試將string轉換為number

嘗試將boolean轉換為number,0或1

嘗試將Object轉換成number或string,取決於另外一個對比量的類型

所以,對於0、空字符串的判斷,建議使用 “===” 。“===”會先判斷兩邊的值類型,類型不匹配時為false。

那么問題來了,看下面的代碼,輸出什么,foo的值為什么?

 

 

 

var foo = "11"+2-"1";

console.log(foo);

console.log(typeof foo);

執行完后foo的值為111,foo的類型為String。

  1. 看代碼給答案。

 

 

 

 

 

var a = new Object();

a.value = 1;

b = a;

b.value = 2;

alert(a.value);

答案:2(考察引用數據類型細節)引用數據類型,數據放在堆中,指針指向這個數據

  1. 已知數組var stringArray = [“This”, “is”, “Baidu”, “Campus”],Alert出”This is Baidu Campus”。

答案:alert(stringArray.join(“”))轉化為字符串空格隔開即可

  1. 已知有字符串foo=”get-element-by-id”,寫一個function將其轉化成駝峰表示法”getElementById”。

 

 

 

 

 

 

 

 

function combo(msg){

    var arr=msg.split("-");

    for(var i=1;i<arr.length;i++){

        arr[i]=arr[i].charAt(0).toUpperCase()+arr[i].substr(1,arr[i].length-1);

    }

    msg=arr.join("");

    return msg;

}

(考察基礎API)

  1. var numberArray = [3,6,2,4,1,5]; (考察基礎API)

2)1) 實現對該數組的倒排,輸出[5,1,4,2,6,3]  是索引值的倒序

numberArray.reverse( )

3) 實現對該數組的降序排列,輸出[6,5,4,3,2,1]  是數值大小的倒序

numberArray.sort(function(a,b){return b-a})

  1. 輸出今天的日期,以YYYY-MM-DD的方式,比如今天是2014年9月26日,則輸出2014-09-26

 

 

 

 

 

 

 

 

 

 

 

var d = new Date();

// 獲取年,getFullYear()返回4位的數字

var year = d.getFullYear();

// 獲取月,月份比較特殊,0是1月,11是12月

var month = d.getMonth() + 1;

// 變成兩位

month = month < 10 ? '0' + month : month;

// 獲取日

var day = d.getDate();

day = day < 10 ? '0' + day : day;

alert(year + '-' + month + '-' + day);

  1. 將字符串”<tr><td>{$id}</td><td>{$name}</td></tr>”中的{$id}替換成10,{$name}替換成Tony (使用正則表達式)

答案:"<tr><td>{$id}</td><td>{$id}_{$name}</td></tr>".replace(/     {\$id} /g, '10').replace( /  {\$name}  /g, 'Tony');

在正則表帶式中的直接量的形式:/要匹配的字符串/,/^ 嚴格模式 $/,/  /g默認在全局下找到所有匹配該字符串的  replace替換匹配到的字符串

特殊符號用 \ 轉義

  1. 為了保證頁面輸出安全,我們經常需要對一些特殊的字符進行轉義,請寫一個函數escapeHtml,將<, >, &, “進行轉義

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function escapeHtml(str) {

return str.replace(/[<>”&]/g, function(match) {

    switch (match) {

                   case “<”:

                      return “&lt;”;

                   case “>”:

                      return “&gt;”;

                   case “&”:

                      return “&amp;”;

                   case “\””:

                      return “&quot;”;

      }

  });

}

  1. foo = foo||bar ,這行代碼是什么意思?為什么要這樣寫?

答案:if(!foo) foo = bar; //如果foo存在,值不變,否則把bar的值賦給foo。

短路表達式:作為”&&”和”||”操作符的操作數表達式,這些表達式在進行求值時,只要最終的結果已經可以確定是真或假,求值過程便告終止,這稱之為短路求值。

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

 

 

 

 

 

 

var foo = 1;

(function(){

    console.log(foo);

    var foo = 2;

    console.log(foo);

})()

答案:輸出undefined 和 2。上面代碼相當於:

 

 

 

 

 

 

 

var foo = 1;

(function(){

    var foo;

    console.log(foo); //undefined

    foo = 2;

    console.log(foo); // 2;  

})()

函數聲明與變量聲明會被JavaScript引擎隱式地提升到當前作用域的頂部,但是只提升名稱不會提升賦值部分。

  1. 用js實現隨機選取10–100之間的10個數字,存入一個數組,並排序。

 

 

 

 

 

 

 

 

 

function randomNub(aArray, len, min, max) {

               if (len >= (max - min)) {

                   return '超過' + min + '-' + max + '之間的個數范圍' + (max - min - 1) + '個的總數';

               }

               if (aArray.length >= len) {

                   aArray.sort(function(a, b) {

                       return a - b

                   });

                   return aArray;

               }

               var nowNub = parseInt(Math.random() * (max - min - 1)) + (min + 1);

               for (var j = 0; j < aArray.length; j++) {

                   if (nowNub == aArray[j]) {

                       randomNub(aArray, len, min, max);

                       return;

                   }

               }

               aArray.push(nowNub);

               randomNub(aArray, len, min, max);

               return aArray;

           }

var arr=[];

randomNub(arr,10,10,100);

  1. 把兩個數組合並,並刪除第二個元素。

 

 

 

 

var array1 = ['a','b','c'];

var bArray = ['d','e','f'];

var cArray = array1.concat(bArray);

cArray.splice(1,1);   在數組的第(參數1)個索引值開始,刪除(參數2)個數組元素,返回剩余的含有數組值的數組

slice()

  1. 怎樣添加、移除、移動、復制、創建和查找節點(原生JS,實在基礎,沒細寫每一步)

1)創建新節點

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

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

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

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

appendChild()      //添加

removeChild()      //移除

replaceChild()      //替換

insertBefore()      //插入

3)查找

getElementsByTagName()    //通過標簽名稱

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

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

  1. 有這樣一個URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,請寫一段JS程序提取URL中的各個GET參數(參數名和參數個數不確定),將其按key-value形式返回到一個json結構中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。

答案:

 

 

 

 

 

 

 

 

 

function serilizeUrl(url) {

    var urlObject = {};

    if (/\?/.test(url)) {

        var urlString = url.substring(url.indexOf("?") + 1);

        var urlArray = urlString.split("&");

        for (var i = 0, len = urlArray.length; i < len; i++) {

            var urlItem = urlArray[i];

            var item = urlItem.split("=");

            urlObject[item[0]] = item[1];

        }

        return urlObject;

    }

    return null;

}

  1. 正則表達式構造函數var reg=new RegExp(“xxx”)與正則表達字面量var reg=//有什么不同?匹配郵箱的正則表達式?

答案:當使用RegExp()構造函數的時候,不僅需要轉義引號(即\”表示”),並且還需要雙反斜杠(即\\表示一個\)。使用正則表達字面量的效率更高。 

郵箱的正則匹配:

 

var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;

  1. 看下面代碼,給出輸出結果。

 

 

 

 

 

for(var i=1;i<=3;i++){

  setTimeout(function(){

      console.log(i);   

  },0); 

};

答案:4 4 4。

原因:Javascript事件處理器在線程空閑之前不會運行。追問,如何讓上述代碼輸出1 2 3?

 

 

 

 

 

 

 

 

 

for(var i=1;i<=3;i++){

   setTimeout((function(a){  //改成立即執行函數

       console.log(a);   

   })(i),0); 

};

 

1           //輸出

2

3

  1. 寫一個function,清除字符串前后的空格。(兼容所有瀏覽器)

使用自帶接口trim(),考慮兼容性:

 

 

 

 

 

 

 

 

 

if (!String.prototype.trim) {

 String.prototype.trim = function() {

 return this.replace(/^\s+/, "").replace(/\s+$/,"");

 }

}

 

// test the function

var str = " \t\n test string ".trim();

alert(str == "test string"); // alerts "true"

  1. Javascript中callee和caller的作用?

caller是返回一個對函數的引用,該函數調用了當前函數;

callee是返回正在被執行的function函數,也就是所指定的function對象的正文。

那么問題來了?如果一對兔子每月生一對兔子;一對新生兔,從第二個月起就開始生兔子;假定每對兔子都是一雌一雄,試問一對兔子,第n個月能繁殖成多少對兔子?(使用callee完成)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var result=[];

function fn(n){  //典型的斐波那契數列

   if(n==1){

        return 1;

   }else if(n==2){

           return 1;

   }else{

        if(result[n]){

                return result[n];

        }else{

                //argument.callee()表示fn()

                result[n]=arguments.callee(n-1)+arguments.callee(n-2);

                return result[n];

        }

   }

}

  1. Javascript中, 以下哪條語句一定會產生運行錯誤?      答案(  B C  )

var _變量=NaN;B、var 0bj = [];C、var obj = //;     D、var obj = {};

  1. 以下兩個變量a和b,a+b的哪個結果是NaN?      答案(   AC  )

A、var a=undefined; b=NaN

B、var a=‘123’; b=NaN

C、var a =undefined , b =NaN

var a=NaN , b='undefined'

  1. var a=10; b=20; c=4;  ++b+c+a++ 以下哪個結果是正確的?答案(  B  )

A、    34   B、35  C、36  D、37

  1. 下面的JavaScript語句中,( D )實現檢索當前頁面中的表單元素中的所有文本框,並將它們全部清空

A. for(vari=0;i< form1.elements.length;i++) {

if(form1.elements.type==”text”)

form1.elements.value=”";}

B. for(vari=0;i<document.forms.length;i++) {

if(forms[0].elements.type==”text”)

forms[0].elements.value=”";

}

C. if(document.form.elements.type==”text”)

form.elements.value=”";

D. for(vari=0;i<document.forms.length; i++){

for(var j=0;j<document.forms.elements.length; j++){

if(document.forms.elements[j].type==”text”)

document.forms.elements[j].value=”";

}

}

  1. 要將頁面的狀態欄中顯示“已經選中該文本框”,下列JavaScript語句正確的是( A )

A. window.status=”已經選中該文本框”

B. document.status=”已經選中該文本框”

C. window.screen=”已經選中該文本框”

D. document.screen=”已經選中該文本框”

  1. 以下哪條語句會產生運行錯誤:(AD)

 

A.var obj = ();

B.var obj = [];

C.var obj = {};

D.var obj = //;

  1. 以下哪個單詞不屬於javascript保留字:(B)

 

A.with

B.parent

C.class

D.void

  1. 請選擇結果為真的表達式:(C)

 

A.null instanceof Object

B.null === undefined

C.null == undefined

D.NaN == NaN

  1. Javascript中, 如果已知HTML頁面中的某標簽對象的id=”username”,用____document.getElementById(‘username’)___ _方法獲得該標簽對象。
  2. typeof運算符返回值中有一個跟javascript數據類型不一致,它是________”function”_________。
  3. 定義了一個變量,但沒有為該變量賦值,如果alert該變量,javascript彈出的對話框中顯示___undefined______ 。
  4. 分析代碼,得出正確的結果。

var a=10, b=20 , c=30;

         ++a;

         a++;

         e=++a+(++b)+(c++)+a++;

         alert(e);

彈出提示對話框:77

  1. 寫出函數DateDemo的返回結果,系統時間假定為今天

function DateDemo(){

 var d, s="今天日期是:";

 d = new Date();

s += d.getMonth() +1+"/";

s += d.getDate() + "/";

s += d.getFullYear();

return s;}

結果:今天日期是:7/17/2010

  1. 寫出程序運行的結果?

for(i=0, j=0; i<10, j<6; i++, j++){

k = i + j;}

結果:10

  1. 閱讀以下代碼,請分析出結果:

       var arr = new Array(1 ,3 ,5);

         arr[4]='z';

         arr2 = arr.reverse();

         arr3 = arr.concat(arr2);

         alert(arr3);

彈出提示對話框:z,,5,3,1,z,,5,3,1

  1. 補充按鈕事件的函數,確認用戶是否退出當前頁面,確認之后關閉窗?

<html>

<head>

<script type=”text/javascript” >

function closeWin(){

//在此處添加代碼

if(confirm(“確定要退出嗎?”)){

window.close();

}

}

</script>

</head>

<body>

<input type=”button”value=”關閉窗口”onclick=”closeWin()”/>

</body>

</html>

  1. 寫出簡單描述html標簽(不帶屬性的開始標簽和結束標簽)的正則表達式,並將以下字符串中的html標簽去除掉

var str = “<div>這里是div<p>里面的段落</p></div>”;

//

<scripttype=”text/javascript”>

varreg = /<\/?\w+\/?>/gi;

varstr = “<div>這里是div<p>里面的段落</p></div>”;

alert(str.replace(reg,”"));

</script>

  1. 完成foo()函數的內容,要求能夠彈出對話框提示當前選中的是第幾個單選框。

<html>

<head>

<metahttp-equiv=”Content-Type” content=”text/html;charset=utf-8″ />

</head>

<body>

<script type=”text/javascript” >

function foo() {

//在此處添加代碼

var rdo =document.form1.radioGroup;

for(var i =0 ;i<rdo.length;i++){

if(rdo.checked){

alert(“您選擇的是第”+(i+1)+”個單選框”);

}

}

}

</script>

<body>

<form name=”form1″ >

<input type=”radio” name=”radioGroup”/>

<input type=”radio” name=”radioGroup”/>

<input type=”radio” name=”radioGroup”/>

<input type=”radio” name=”radioGroup”/>

<input type=”submit”/>

</form>

</body>

</html>

  1. 完成函數showImg(),要求能夠動態根據下拉列表的選項變化,更新圖片的顯示

<body>

<script type=”text/javascript” >

function showImg (oSel) {

//在此處添加代碼

var str = oSel.value;

document.getElementById(“pic”).src= str+”.jpg”;

}

</script>

<img id=”pic”src=”img1.jpg”width=”200″ height=”200″ />

<br />

<select id=”sel”>

<option value=”img1“>城市生活</option>

<option value=”img2“>都市早報</option>

<option value=”img3“>青山綠水</option>

</select></body>

  1. 截取字符串abcdefg的efg

alert('abcdefg'.substring(4));

  1. 列舉瀏覽器對象模型BOM里常用的至少4個對象,並列舉window對象的常用方法至少5個

對象:window, document, location, screen, history, navigator

方法:alert(), confirm(), prompt(), open(), close()

  1. 簡述列舉文檔對象模型DOM里document的常用的查找訪問節點的方法並做簡單說明

Document.getElementById 根據元素id查找元素

Document.getElementByName 根據元素name查找元素

Document.getElementTagName 根據指定的元素名查找元素

  1. 希望獲取到頁面中所有的checkbox怎么做?(不使用第三方框架)

var domList = document.getElementsByTagName(‘input’)

var checkBoxList = [];

var len = domList.length;  //緩存到局部變量

while (len--) {  //使用while的效率會比for循環更高

  if (domList[len].type == ‘checkbox’) {

      checkBoxList.push(domList[len]);

  }

}

  1. 簡述創建函數的幾種方式

第一種(函數聲明): 

function sum1(num1,num2){
   return num1+num2;
}

第二種(函數表達式):

var sum2 = function(num1,num2){
   return num1+num2;
}

第三種(函數對象方式):

var sum3 = new Function("num1","num2","return num1+num2");

 

  1. Javascript如何實現繼承?

1.構造繼承法
2.原型繼承法
3.實例繼承法

  1. Javascript創建對象的幾種方式?

1、var obj = {};(使用json創建對象)

如:obj.name = '張三';​

obj.action = function ()

{

alert('吃飯');

}​;

2、var obj = new Object();(使用Object創建對象)

如:obj.name = '張三';​

obj.action = function ()

{

alert('吃飯');

}​;

3、​通過函數創建對象。

(1)、使用this關鍵字​

如:var obj = function (){

this.name ='張三';

this.age = 19;

this.action = function ()

{

alert('吃飯');

}​;

}​

(2)、使用prototype關鍵字

如:function obj (){}

​       obj.prototype.name ='張三';

​obj.prototype.action=function ()

{

alert('吃飯');

}​;

4、通過Window創建對象。

如:window.name = ''張三';

window.age = 19;

window.action= function()

{

alert('吃飯');

};

5、使用內置對象創建對象。

如:var str = new String("實例初始化String");

var str1 = "直接賦值的String";

var func = new Function("x","alert(x)");//示例初始化func

var obj = new Object();//示例初始化一個Object

  1. iframe的優缺點?

優點:

1. 解決加載緩慢的第三方內容如圖標和廣告等的加載問題

2. Security sandbox

3. 並行加載腳本

缺點:

1. iframe會阻塞主頁面的Onload事件

2. 即時內容為空,加載也需要時間

3. 沒有語意

  1. 請你談談Cookie的弊端?

缺點:

1.Cookie數量和長度的限制。每個domain最多只能有20條cookie,每個cookie長度不能超過4KB,否則會被截掉。

2.安全性問題。如果cookie被人攔截了,那人就可以取得所有的session信息。即使加密也與事無補,因為攔截者並不需要知道cookie的意義,他只要原樣轉發cookie就可以達到目的了。

3.有些狀態不可能保存在客戶端。例如,為了防止重復提交表單,我們需要在服務器端保存一個計數器。如果我們把這個計數器保存在客戶端,那么它起不到任何作用。

  1. js延遲加載的方式有哪些?

1. defer和async

2. 動態創建DOM方式(創建script,插入到DOM中,加載完畢后callBack)

3. 按需異步載入js

  1. documen.write和 innerHTML 的區別?

document.write 只能重繪整個頁面

innerHTML 可以重繪頁面的一部分

  1. 哪些操作會造成內存泄漏?

內存泄漏指任何對象在您不再擁有或需要它之后仍然存在。

垃圾回收器定期掃描對象,並計算引用了每個對象的其他對象的數量。如果一個對象的引用數量為 0(沒有其他對象引用過該對象),或對該對象的惟一引用是循環的,那么該對象的內存即可回收。

1. setTimeout 的第一個參數使用字符串而非函數的話,會引發內存泄漏。

2. 閉包

3. 控制台日志

4. 循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)

  1. 判斷一個字符串中出現次數最多的字符,統計這個次數

答:var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i < str.length; i++) {
        if(!json[str.charAt(i)]){
                json[str.charAt(i)] = 1;
        }else{
                json[str.charAt(i)]++;
        }
};
var iMax = 0;
var iIndex = '';
for(var i in json){
        if(json[i]>iMax){
                iMax = json[i];
                iIndex = i;
        }
}
alert('出現次數最多的是:'+iIndex+'出現'+iMax+'次');

  1. 寫一個獲取非行間樣式的函數

function getStyle(obj,attr,value)

{

         if(!value)

         {

                   if(obj.currentStyle)

                   {

                            return obj.currentStyle(attr);

                   }

                   else{

                            obj.getComputedStyle(attr,false);

                   }

         }       

         else

         {

                   obj.style[attr] = value;

         }

}

  1. 事件委托是什么

讓利用事件冒泡的原理,讓自己的所觸發的事件,讓他的父元素代替執行!

  1. 閉包是什么,有什么特性,對頁面有什么影響

    答:我的理解是,閉包就是能夠讀取其他函數內部變量的函數。在本質上,閉包就是將函數內部和函數外部連接起來的一座橋梁。

 

function outer(){

    var num = 1;

    function inner(){

        var n = 2;

        alert(n + num);

    }

    return inner;

}

outer()();

 

http://blog.csdn.net/gaoshanwudi/article/details/7355794 此鏈接可查看(問這個問題的不是一個公司)

  1. 解釋jsonp的原理,以及為什么不是真正的ajax

動態創建script標簽,回調函數

Ajax是頁面無刷新請求數據操作

  1. javascript的本地對象,內置對象和宿主對象

本地對象為array obj regexp等可以new實例化

內置對象為gload Math 等不可以實例化的

宿主為瀏覽器自帶的document,window 等

  1. 字符串反轉,如將 '12345678' 變成 '87654321'

 

//大牛做法;

//思路:先將字符串轉換為數組 split(),利用數組的反序函數 reverse()顛倒數組,再利用 jion() 轉換為字符串

var str = '12345678';

str = str.split('').reverse().join('');

  1. 將數字 12345678 轉化成 RMB形式 如: 12,345,678 

 

//個人方法;

//思路:先將數字轉為字符, str= str + '' ;

//利用反轉函數,每三位字符加一個 ','最后一位不加; re()是自定義的反轉函數,最后再反轉回去!

function re(str) {

    str += '';

    return str.split("").reverse().join("");

}

 

function toRMB(num) {

       var tmp='';

    for (var  i  =  1;  i  <=  re(num).length;  i++) {    

        tmp  +=  re(num)[i  -  1];    

        if (i  %  3  ==  0  &&  i  !=  re(num).length) {        

            tmp  +=  ',';    

        }

    }

    return re(tmp);

}

  1. 生成5個不同的隨機數;

 

//思路:5個不同的數,每生成一次就和前面的所有數字相比較,如果有相同的,則放棄當前生成的數字!

var num1 = [];

for(var i = 0; i < 5; i++){

    num1[i] = Math.floor(Math.random()*10) + 1; //范圍是 [1, 10]

    for(var j = 0; j < i; j++){

        if(num1[i] == num1[j]){

            i--;

重新覆蓋第i(重復)個值,可以將其刪除或是重新的生成這個i值就會替換掉這個重復的值

        }

    }

}

  1. 去掉數組中重復的數字 方法一;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

//思路:每遍歷一次就和之前的所有做比較,不相等則放入新的數組中!

//這里用的原型 個人做法;

Array.prototype.unique = function(){

    var len = this.length,

        newArr = [],

        flag = 1;

    for(var i = 0; i < len; i++, flag = 1){

        for(var j = 0; j < i; j++){

            if(this[i] == this[j]){

                flag = 0;        //找到相同的數字后,不執行添加數據

            }

        }

For 循環會遍歷完所有的條件值才會跳出for循環,除非有一個讓他跳出循環的語句,

他才會提前終止循環、

 

        flag ? newArr.push(this[i]) : '';

    }

    return newArr;

}

    方法二:

 

var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];

Array.prototype.unique2 = function()
{
         var n = []; //一個新的臨時數組
         for(var i = 0; i < this.length; i++) //遍歷當前數組
         {
                 //如果當前數組的第i已經保存進了臨時數組,那么跳過,
                 //否則把當前項push到臨時數組里面
                 if (n.indexOf(this[i]) == -1) n.push(this[i]);
         }
         return n;
}

Arr.indexOf (3)獲得指定數組下的指定的元素值的下標索引號

var newArr2=arr.unique2(arr);

alert(newArr2); //輸出1,2,3,4,5,6,9,25

 

 

  1. 階乘函數;

 

//原型方法

Number.prototype.N = function(){

    var re = 1;

    for(var i = 1; i <= this; i++){

        re *= i;

    }

    return re;

}

var num = 5;

alert(num.N());

  1. window.location.search() 返回的是什么?

    答:查詢(參數)部分。除了給動態語言賦值以外,我們同樣可以給靜態頁面,並使用javascript來獲得相信應的參數值

        返回值:?ver=1.0&id=timlq 也就是問號后面的!

  1. window.location.hash 返回的是什么?

    答:錨點 , 返回值:#love ;

  1. window.location.reload() 作用?

    答:刷新當前頁面。

  1. 、javascript 中的垃圾回收機制?

    答:在Javascript中,如果一個對象不再被引用,那么這個對象就會被GC回收。如果兩個對象互相引用,而不再  被第3者所引用,那么這兩個互相引用的對象也會被回收。因為函數a被b引用,b又被a外的c引用,這就是為什么  函數a執行后不會被回收的原因。

  1. 看題做答:

 

function f1(){

    var tmp = 1;

    this.x = 3;

    console.log(tmp);    //A

    console.log(this.x);     //B

}

var obj = new f1(); //1

console.log(obj.x)     //2

console.log(f1());        //3

    分析:    

        這道題讓我重新認識了對象和函數,首先看代碼(1),這里實例話化了 f1這個類。相當於執行了 f1函數。所以這個時候 A 會輸出 1, 而 B 這個時候的 this 代表的是 實例化的當前對象 obj B 輸出 3.。 代碼(2)毋庸置疑會輸出 3, 重點 代碼(3)首先這里將不再是一個類,它只是一個函數。那么 A輸出 1, B呢?這里的this 代表的其實就是window對象,那么this.x 就是一個全局變量 相當於在外部 的一個全局變量。所以 B 輸出 3。最后代碼由於f沒有返回值那么一個函數如果沒返回值的話,將會返回 underfined ,所以答案就是 : 1, 3, 3, 1, 3, underfined 。

  1. 下面輸出多少?

 

var o1 = new Object();

var o2 = o1;

o2.name = "CSSer";

console.log(o1.name);

  如果不看答案,你回答真確了的話,那么說明你對javascript的數據類型了解的還是比較清楚了。js中有兩種數據類型,分別是:基本數據類型和引用數據類型(object Array)。對於保存基本類型值的變量,變量是按值訪問的,因為我們操作的是變量實際保存的值。對於保存引用類型值的變量,變量是按引用訪問的,我們操作的是變量值所引用(指向)的對象。答案就清楚了:  //CSSer;

  1. 再來一個

 

function changeObjectProperty (o) {

    o.siteUrl = "http://www.csser.com/";

    o = new Object();

    o.siteUrl = "http://www.popcg.com/";

}

var CSSer = new Object();

changeObjectProperty(CSSer);

console.log(CSSer.siteUrl); //

    如果CSSer參數是按引用傳遞的,那么結果應該是"http://www.popcg.com/",但實際結果卻仍是"http://www.csser.com/"。事實是這樣的:在函數內部修改了引用類型值的參數,該參數值的原始引用保持不變。我們可以把參數想象成局部變量,當參數被重寫時,這個變量引用的就是一個局部變量,局部變量的生存期僅限於函數執行的過程中,函數執行完畢,局部變量即被銷毀以釋放內存。    

    (補充:內部環境可以通過作用域鏈訪問所有的外部環境中的變量對象,但外部環境無法訪問內部環境。每個環境都可以向上搜索作用域鏈,以查詢變量和函數名,反之向下則不能。)

  1. a輸出多少?

 

var a = 6;

setTimeout(function () {    

    var a = 666;

    alert(a);      // 輸出666,

}, 1000);

因為var a = 666;定義了局部變量a,並且賦值為666,根據變量作用域鏈,
全局變量處在作用域末端,優先訪問了局部變量,從而覆蓋了全局變量 。

 

var a = 6;

setTimeout(function () {    

    alert(a);      // 輸出undefined 

    var a = 666;

}, 1000);

因為var a = 666;定義了局部變量a,同樣覆蓋了全局變量,但是在alert(a);之前
a並未賦值,所以輸出undefined。

 

 

var a = 6; 

setTimeout(function(){

    alert(a);

    var a = 66; 

}, 1000);

a = 666; 

alert(a); 

// 666, undefined;

記住: 異步處理,一切OK 聲明提前

  1. 看程序,寫結果

 

function setN(obj){

    obj.name='屌絲';

    obj = new Object(); 

    obj.name = '腐女';

};

var per = new Object();

setN(per);

alert(per.name);  //屌絲 內部

  1. JS的繼承性

 

window.color = 'red';

var o = {color: 'blue'};

function sayColor(){

    alert(this.color);

}

sayColor(); //red

sayColor.call(this); //red this-window對象

sayColor.call(window); //red

sayColor.call(o); //blue

  1. 精度問題: JS 精度不能精確到 0.1 所以  。。。。同時存在於值和差值中

 

var n = 0.3,m = 0.2, i = 0.2, j = 0.1;

alert((n - m) == (i - j)); //false

alert((n-m) == 0.1); //false

alert((i-j)==0.1); //true

  1. 加減運算

 

alert('5'+3); //53 string

alert('5'+'3'); //53 string

alert('5'-3); //2 number

alert('5'-'3'); //2 number

  1. 什么是同源策略?

    指: 同協議、端口、域名的安全策略,由王景公司提出來的安全協議!

  1. 為什么不能定義1px左右的div容器?   

IE6下這個問題是因為默認的行高造成的,解決的方法也有很多,例如:

overflow:hidden | zoom:0.08 | line-height:1px

  1. 結果是什么?

 

function foo(){

    foo.a = function(){alert(1)}; 

    this.a = function(){alert(2)};

    a = function(){alert(3)};

    var a = function(){alert(4)};

}; 

foo.prototype.a = function(){alert(5)};

foo.a = function(){alert(6)};

foo.a(); //6

var obj = new foo();

obj.a(); //2

foo.a(); //1

  1. 輸出結果

 

var a = 5; 

function test(){

    a = 0; 

    alert(a); 

    alert(this.a); //沒有定義 a這個屬性

    var a; 

    alert(a)

}

test(); // 0, 5, 0

new test(); // 0, undefined, 0 //由於類它自身沒有屬性a, 所以是undefined

  1. 計算字符串字節數:

 

new function(s){ 

     if(!arguments.length||!s) return null;  

     if(""==s) return 0;     

     var l=0;

     for(var i=0;i<s.length;i++){        

         if(s.charCodeAt(i)>255) l+=2; else l+=1;  //charCodeAt()得到的是unCode碼   

     }     //漢字的unCode碼大於 255bit 就是兩個字節

     alert(l); 

}("hello world!");

  1. 結果是:

 

var bool = !!2; alert(bool);//true;

雙向非操作可以把字符串和數字轉換為布爾值。

  1. 聲明對象,添加屬性,輸出屬性

 

    var obj = {

        name: 'leipeng',

        showName: function(){

            alert(this.name);

        }

    }

obj.showName();

  1. 匹配輸入的字符:第一個必須是字母或下划線開頭,長度5-20

 

var reg = /^[a-zA-Z_][a-zA-Z0-9_]{5,20}/,

            name1 = 'leipeng',

            name2 = '0leipeng',

            name3 = '你好leipeng',

            name4 = 'hi';

     

        alert(reg.test(name1));

        alert(reg.test(name2));

        alert(reg.test(name3));

        alert(reg.test(name4));

  1. 檢測變量類型
  2. 如何在HTML中添加事件,幾種方法?
function checkStr(str){
return str =='string';
}

console.log(checkStr("aaa"));

    1、標簽之中直接添加 onclick="fun()";

    2、JS添加 Eobj.onclick = method;

    3、現代事件  IE: obj.attachEvent('onclick', method);

                FF: obj.addEventListener('click', method, false);

  1. BOM對象有哪些,列舉window對象?

    1、window對象 ,是JS的最頂層對象,其他的BOM對象都是window對象的屬性;

    2、document對象,文檔對象;

    3、location對象,瀏覽器當前URL信息;

    4、navigator對象,瀏覽器本身信息;

    5、screen對象,客戶端屏幕信息;

    6、history對象,瀏覽器訪問歷史信息;

  1. 請問代碼實現 outerHTML

    //說明:outerHTML其實就是innerHTML再加上本身;

 

Object.prototype.outerHTML = function(){

        var innerCon = this.innerHTML, //獲得里面的內容

            outerCon = this.appendChild(innerCon); //添加到里面

        alert(outerCon); 

    }

    演示代碼:

     

 <!doctype html>

 <html>

  <head>

    <meta charset="UTF-8">

    <title>Document</title>

  </head>

  <body>

    <div id="outer">

       hello

    </div>

  <script>

    Object.prototype.outerHTML = function(){

    var innerCon = this.innerHTML, //獲得里面的內容

    outerCon = this.appendChild(innerCon); //添加到里面

    alert(outerCon); 

      }

    function $(id){

   return document.getElementById(id);

   }

   alert($('outer').innerHTML);

   alert($('outer').outerHTML);

  </script>

 </body>

 </html>

  1. JS中的簡單繼承 call方法!

 

//頂一個父母類,注意:類名都是首字母大寫的哦!

  function Parent(name, money){

            this.name = name;

            this.money = money;

            this.info = function(){

                alert('姓名: '+this.name+' 錢: '+ this.money);

            }

        }

        //定義孩子類

        function Children(name){

            Parent.call(this, name); //繼承 姓名屬性,不要錢。  

            this.info = function(){

                alert('姓名: '+this.name);

            }

        }

        //實例化類

        var per = new Parent('parent', 800000000000);

        var chi = new Children('child');

        per.info();

        chi.info();

  1. bind(), live(), delegate()的區別

    bind: 綁定事件,對新添加的事件不起作用,方法用於將一個處理程序附加到每個匹配元素的事件上並返回jQuery對象。

    live: 方法將一個事件處理程序附加到與當前選擇器匹配的所有元素(包含現有的或將來添加的)的指定事件上並返回jQuery對象。

    delegate: 方法基於一組特定的根元素將處理程序附加到匹配選擇器的所有元素(現有的或將來的)的一個或多個事件上。  

  1. 看下列代碼輸出什么?
  2. 看下列代碼,輸出什么?
  3. 你如何優化自己的代碼?
var foo = "11"+2-"1";
console.log(foo);
console.log(typeof foo);
執行完后foo的值為111,foo的類型為Number。
var a = new Object();
a.value = 1;
b = a;
b.value = 2;
alert(a.value);
執行完后輸出結果為2

代碼重用

避免全局變量(命名空間,封閉空間,模塊化mvc..)

拆分函數避免函數過於臃腫

注釋

  1. 請描述出下列代碼運行的結果

function d(){

                   console.log(this);

}

d();//輸出window對象

  1. 怎樣實現兩欄等高?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="container"style="display: table;width: 100%;">
<div id="left"style="display: table-cell;">
內容<br/>
內容<br/>
內容<br/>
內容<br/>
內容<br/>
內容<br/>
</div>
<div style="display:table-cell;"></div>
<div id="right"style="display: table-cell">
內容
</div>
</div>
</body>
</html>

 

  1. 使用js實現這樣的效果:在文本域里輸入文字時,當按下enter鍵時不換行,而是替換成“{{enter}}”,(只需要考慮在行尾按下enter鍵的情況).
<html>
<head>
<script>
function back(ele,event){
            event = event || window.event;
if(event.keyCode==13){
                event.returnValue = false;
ele.value+="{{enter}}"
return false;
}
        }
</script>
</head>
<body>
<textarea rows="3"cols="40"id="te"onkeypress="back(this,event);"></textarea>
</body>
</html>

 

  1. 以下代碼中end字符串什么時候輸出

var t=true;

setTimeout(function(){

       console.log(123);

       t=false;

       },1000);

while(t){}

console.log(‘end’);

永遠不輸出

  1. specify(‘hello,world’)//=>’h,e,l,l,o,w,o,r,l,d’實現specify函數
function specify(str){
var tempArray =  Array.prototype.filter.call(str,function(value,index,array){
return value >= 'A' &&  value <= 'z' && value != "_";
});
return tempArray.join(",");
}

console.log(specify("hedd____df*(%$#a !!!))))))llo,Wo@@@r        ld")); //h,e,l,l,o,W,o,r,l,d

 

  1. 請將一個URL的search部分參數與值轉換成一個json對象
  2. 請用原生js實現jquery的get\post功能,以及跨域情況下
  3. 請簡要描述web前端性能需要考慮哪方面,你的優化思路是什么?
  4. 、簡述readyonly與disabled的區別

ReadOnly和Disabled的作用是使用戶不能夠更改表單域中的內容.
但是二者還是有着一些區別的:
1、Readonly只針對input(text/password)和textarea有效,而disabled對於所有的表單元素有效,包括select,radio,checkbox,button等。
2、在表單元素使用了disabled后,我們將表單以POST或者GET的方式提交的話,這個元素的值不會被傳遞出去,而readonly會將該值傳遞出去

  1. 寫出3個使用this的典型應用
  2. 請盡可能詳盡的解釋ajax的工作原理
Ajax的工作原理相當於在用戶和服務器之間加了—個中間層,使用戶操作與服務器響應異步化。這樣把以前的一些服務器負擔的工作轉嫁到客戶端,利於客戶端閑置的處理能力來處理,減輕服務器和帶寬的負擔,從而達到節約ISP的空間及帶寬租用成本的目的。

簡單來說通過XmlHttpRequest對象來向服務器發異步請求,從服務器獲得數據,然后用javascript來操作DOM而更新頁面。這其中最關鍵的一步就是從服務器獲得請求數據。要清楚這個過程和原理,我們必須對 XMLHttpRequest有所了解。

 

  1. 、為什么擴展javascript內置對象不是好的做法?
因為你不知道哪一天瀏覽器或javascript本身就會實現這個方法,而且和你擴展的實現有不一致的表現。到時候你的javascript代碼可能已經在無數個頁面中執行了數年,而瀏覽器的實現導致所有使用擴展原型的代碼都崩潰了。。。

 

  1. 什么是三元表達式?“三元”表示什么意思?

三元運算符:

三元如名字表示的三元運算符需要三個操作數。

語法是 條件 ? 結果1 : 結果2;. 這里你把條件寫在問號(?)的前面后面跟着用冒號(:)分隔的結果1和結果2。滿足條件時結果1否則結果2。

 

  1. 瀏覽器標准模式和怪異模式之間的區別是什么?

所謂的標准模式是指,瀏覽器按W3C標准解析執行代碼;怪異模式則是使用瀏覽器自己的方式解析執行代碼,因為不同瀏覽器解析執行的方式不一樣,所以我們稱之為怪異模式

  1. modulo(12,5)//2  實現滿足這個結果的modulo函數
  2. HTTP協議中,GET和POST有什么區別?分別適用什么場景 ?
  3. HTTP狀態消息200 302 304 403 404 500分別表示什么
  4. HTTP協議中,header信息里面,怎么控制頁面失效時間(last-modified,cache-control,Expires分別代表什么)
  5. HTTP雷鋒議目前常用的有哪幾個?KEEPALIVE從哪個版本開始出現的?
  6. 業界常用的優化WEB頁面加載速度的方法(可以分別從頁面元素展現,請求連接,css,js,服務器等方面介紹)
  7. 列舉常用的web頁面開發,調試以及優化工具
  8. 解釋什么是sql注入,xss漏洞
  9. 如何判斷一個js變量是數組類型
  10. 請列舉js數組類型中的常用方法
  11. FF與IE中如何阻止事件冒泡,如何獲取事件對象,以及如何獲取觸發事件的元素

 

function stopPropagation(e) {  

    e = e || window.event;  

    if(e.stopPropagation) { //W3C阻止冒泡方法  

        e.stopPropagation();  

    } else {  

        e.cancelBubble = true; //IE阻止冒泡方法  

    }  

}  

document.getElementById('need_hide').onclick = function(e) {  

    stopPropagation(e);  

}

 

  1. 列舉常用的js框架以及分別適用的領域
  2. js中如何實現一個map
  3. js可否實現面向對象編程,如果可以如何實現js對象的繼承
  4. 約瑟夫環—已知n個人(以編號1,2,3…分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。
  5. 有1到10w這個10w個數,去除2個並打亂次序,如何找出那兩個數?
  6. 如何獲取對象a擁有的所有屬性(可枚舉的、不可枚舉的,不包括繼承來的屬性)
  7. 有下面這樣一段HTML結構,使用css實現這樣的效果:

左邊容器無論寬度如何變動,右邊容器都能自適應填滿父容器剩余的寬度。

<div class=”warp”>

<div class=”left”></div>

<div class=”right”></div>

</div>

  1. 下面這段代碼想要循環輸出結果01234,請問輸出結果是否正確,如果不正確,請說明為什么,並修改循環內的代碼使其輸出正確結果

for(var i=0;i<5;++i){

       setTimeout(function(){

                     console.log(i+’’);

              },100*i);異步線程,后執行

}

  1. 以下哪些是javascript的全局函數:(ABC)

A. escape     函數可對字符串進行編碼,這樣就可以在所有的計算機上讀取該字符串。ECMAScript v3 反對使用該方法,應用使用 decodeURI() 和 decodeURIComponent() 替代它。

B. parseFloat      parseFloat() 函數可解析一個字符串,並返回一個浮點數。

該函數指定字符串中的首個字符是否是數字。如果是,則對字符串進行解析,直到到達數字的末端為止,然后以數字返回該數字,而不是作為字符串。

C. eval   函數可計算某個字符串,並執行其中的的 JavaScript 代碼。

D. setTimeout

E. alert

 

  1. 關於IE的window對象表述正確的有:(ACD)

A. window.opener屬性本身就是指向window對象

B. window.reload()方法可以用來刷新當前頁面  應該是location.reload或者window.location.reload

C. window.location=”a.html”和window.location.href=”a.html”的作用都是把當前頁面替換成a.html頁面

D. 定義了全局變量g;可以用window.g的方式來存取該變量

  1. 下面正確的是  A

A:跨域問題能通過JsonP方案解決 B:不同子域名間僅能通過修改window.name解決跨域   還可以通過script標簽src  jsonp等h5 Java split

C:只有在IE中可通過iframe嵌套跨域 D:MediaQuery屬性是進行視頻格式檢測的屬性是做響應式的

  1. 錯誤的是 B

A: Ajax本質是XMLHttpRequest          

B: 塊元素實際占用的寬度與它的width、border、padding屬性有關,與background無關   還有margin

C: position屬性absolute、fixed、---relative---會使文檔脫標

D:    float屬性left也會使div脫標

答案C:relative不會脫離文檔流

  1. 不用任何插件,如何實現一個tab欄切換?
  2. 變量的命名規范以及命名推薦

變量,函數,方法:小寫開頭,以后的每個單詞首字母大寫 (駝峰)

構造函數,class:每個單詞大寫開頭

基於實際情況,以動詞,名詞,謂詞來命名。盡量言簡意駭,以命名代替注釋

 

  1. 三種彈窗的單詞以及三種彈窗的功能

1.alert

//彈出對話框並輸出一段提示信息 

    function ale() { 

        //彈出一個對話框 

        alert("提示信息!"); 

 

    } 

 

2.confirm

    //彈出一個詢問框,有確定和取消按鈕 

    function firm() { 

        //利用對話框返回的值 (true 或者 false) 

        if (confirm("你確定提交嗎?")) { 

            alert("點擊了確定"); 

        } 

        else { 

            alert("點擊了取消"); 

        } 

 

    } 

 

3.prompt

    //彈出一個輸入框,輸入一段文字,可以提交 

    function prom() { 

        var name = prompt("請輸入您的名字", ""); //將輸入的內容賦給變量 name , 

 

        //這里需要注意的是,prompt有兩個參數,前面是提示的話,后面是當對話框出來后,在對話框里的默認值 

        if (name)//如果返回的有內容 

        { 

            alert("歡迎您:" + name) 

        } 

 

    }

 

  1. console.log( 8 | 1 ); 輸出值是多少?

答案:9

  1. 只允許使用 + - * / 和 Math.* ,求一個函數 y = f(x, a, b);當x > 100 時返回 a 的值,否則返回 b 的值,不能使用 if else 等條件語句,也不能使用|,?:,數組。

答案:

function f(x, a, b) {

    var temp = Math.ceil(Math.min(Math.max(x - 100, 0), 1));

 

    return a * temp + b * (1 - temp);

}

console.log(f(-10, 1, 2));

  1. JavaScriptalert(0.4*0.2);結果是多少?和你預期的一樣嗎?如果不一樣該如何處理?

              有誤差,應該比准確結果偏大。 一般我會將小數變為整數來處理。當前之前遇到這個問題時也上網查詢發現有人用try catch return寫了一個函數,

              當然原理也是一致先轉為整數再計算。

  1. 一個div,有幾種方式得到這個div的jQuery對象?<div class='aabbcc' id='nodesView'></div>想直接獲取這個div的dom對象,如何獲取?dom對象如何轉化為jQuery對象?

$(“#nodesView”) , $(“.aabbcc”) ,$(“#nodesView”)[0] , $(“.aabbcc”)[0]

 

  1. 、主流瀏覽器內核

IE trident             火狐gecko   谷歌蘋果webkit  Opera:Presto

  1. 如何顯示/隱藏一個dom元素?請用原生的JavaScript方法實現
  2. jQuery框架中$.ajax()的常用參數有哪些?寫一個post請求並帶有發送數據和返回數據的樣例

async是否異步

url請求地址

contentType發送信息至服務器時內容編碼類型

data發送到服務器的數據

dataType預期服務器返回的數據類型

type請求類型

success請求成功回調函數

error請求失敗回調函數

 

$.ajax({

            url: "/jquery/test1.txt",

            type: 'post',

            data: {

                id: 1

            },

            success: function(data) {

                alert(data);

            }

        }

 

 

  1. JavaScript的循環語句有哪些?

  For,for..in,while,do...while

  1. 作用域-編譯期執行期以及全局局部作用域問題
  2. 閉包:下面這個ul,如何點擊每一列的時候alert其index?

<ul id="test">

<li>這是第一條</li>

<li>這是第二條</li>

<li>這是第三條</li>

</ul>

//js

 window.onload = function() {

        var lis = document.getElementById('test').children;

        for (var i = 0; i < lis.length; i++) {

            lis[i].onclick = (function(i) {

                return function() {

                    alert(i)

                };

            })(i);

        };

    }

  1. 列出3條以上ff和IE的腳本兼容問題

(1) window.event: 
表示當前的事件對象,IE有這個對象,FF沒有,FF通過給事件處理函數傳遞事件對象 

(2) 獲取事件源 
IE用srcElement獲取事件源,而FF用target獲取事件源 

(3) 添加,去除事件 
IE:element.attachEvent(“onclick”, function) element.detachEvent(“onclick”, function) 
FF:element.addEventListener(“click”, function, true) element.removeEventListener(“click”, function, true) 

(4) 獲取標簽的自定義屬性 
IE:div1.value或div1[“value”] 
FF:可用div1.getAttribute(“value”) 

  1. 如現在有一個效果,有顯示用戶頭像、用戶昵稱、用戶其他信息;當用戶鼠標移到頭像上時,會彈出用戶的所有信息;如果是你,你會如何實現這個功能,請用代碼實現?

(略)

提示:先寫個div將用戶信息放入,默認隱藏,當使用:hover樣式顯示這個div

  1. 用正則表達式,寫出由字母開頭,其余由數字、字母、下划線組成的6~30的字符串?

^[a-zA-Z]{1}[\w]{5,29}$

  1. 列舉瀏覽器對象模型BOM里常用的至少4個對象,並列舉window對象的常用方法至少5個 (10分)

對象:Window document location screen history navigator

方法:Alert() confirm() prompt() open() close()

  1. 在Javascript中什么是偽數組?如何將偽數組轉化為標准數組?

答案:

偽數組(類數組):無法直接調用數組方法或期望length屬性有什么特殊的行為,但仍可以對真正數組遍歷方法來遍歷它們。典型的是函數的argument參數,還有像調用getElementsByTagName,document.childNodes之類的,它們都返回NodeList對象都屬於偽數組。可以使用Array.prototype.slice.call(fakeArray)將數組轉化為真正的Array對象。

  1. 寫一個函數可以計算 sum(5,0,-5);輸出0; sum(1,2,3,4);輸出10;

function sum() {

    var result = 0;

    var arr = arguments;

    for (var i = 0; i < arr.length; i++) {

        var num = arguments[i];

        if (typeof num=='number') {

            result += num;

        };

    };

    return result;

}

  1. 《正則》寫出正確的正則表達式匹配固話號,區號3-4位,第一位為0,中橫線,7-8位數字,中橫線,3-4位分機號格式的固話號

^[0]\d{2,3}\-\d{7,8}\-\d{3,4}$

  1. 《算法》 一下A,B可任選一題作答,兩題全答加分

A:農場買了一只羊,第一年是小羊,第二年底生一只,第三年不生,第四年底再生一只,第五年死掉。

B:寫出代碼對下列數組去重並從大到小排列{5,2,3,6,8,6,5,4,7,1,9}

function fn(arr){
for (var i = 0; i <arr.length-1; i++) {
for (var j = 0; j <arr.length-1-i; j++) {
if(arr[j]<arr[j+1]){
var temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}

        }

    }
for (i = 0; i <arr.length; i++) {
var c=arr[i];
for (var s = i+1; s <arr.length; s++) {
if(arr[s]==c){
//debugger;
arr.splice(s,1);
s--;
}

        }
    }

return arr;
}
console.log(fn([5,2,3,6,8,6,5,4,7,1,9]).toString());

 

  1. 請寫一個正則表達式:要求最短6位數,最長20位,阿拉伯數和英文字母(不區分大小寫)組成

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{6,20}$

  1. 統計1到400億之間的自然數中含有多少個1?比如1-21中,有1、10、11、21這四個自然數有5個1
  2. 刪除與某個字符相鄰且相同的字符,比如fdaffdaaklfjklja字符串處理之后成為“fdafdaklfjklja”
  3. 請寫出三種以上的Firefox有但,InternetExplorer沒有的屬性或者函數
  4. 請寫出一個程序,在頁面加載完成后動態創建一個form表單,並在里面添加一個input對象並給它任意賦值后義post方式提交到:http://127.0.0.1/save.php

window.onload=function(){
var form=document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "http://127.0.0.1/save.php");
var input=document.createElement("input");
form.appendChild(input);
document.body.appendChild(form);
input.value="cxc";
form.submit();//提交表單
}

 

  1. 用JavaScript實現冒泡排序。數據為23、45、18、37、92、13、24

//升序算法
function sort(arr){
for (var i = 0; i <arr.length; i++) {
for (var j = 0; j <arr.length-i; j++) {
if(arr[j]>arr[j+1]){
var c=arr[j];//交換兩個變量的位置
arr[j]=arr[j+1];
arr[j+1]=c;
}
        };
};
return arr.toString();
}
console.log(sort([23,45,18,37,92,13,24]));

 

  1. 前端代碼優化的方法

var User = {

       count = 1,

       getCount:function(){

              return this.count;

       }

}

console.log(User.getCount());

var func = User.getCount;

console.log(func());

1 undefined(因為是window對象執行了func函數);

  1. 下列JavaScript代碼執行后,依次alert的結果是

 

(function test(){

      var a=b=5;

      alert(typeof a);

      alert(typeof b);

})();

alert(typeof a);

alert(typeof b);

答案:number

number

undefined

number

  1. 下列JavaScript代碼執行后,iNum的值是

var iNum = 0;

for(var i = 1; i< 10; i++){

     if(i % 5 == 0){

         continue;

    }

    iNum++;

}

答案:8

  1. 輸出結果是多少?

 1)  var a;

var b = a * 0;

if (b == b) {

          console.log(b * 2 + "2" - 0 + 4);

} else {

          console.log(!b * 2 + "2" - 0 + 4);  加號是字符串連接,減號是轉義為number

}

答案:26

2) <script>

        var a = 1;

</script>

<script>

var a;   這里的a還是之前聲明的變量a的值

var b = a * 0;  是0不是nan

if (b == b) {

        console.log(b * 2 + "2" - 0 + 4);

} else {

        console.log(!b * 2 + "2" - 0 + 4);

}

</script>

答案:6

3)  var t = 10;

function test(t){

       var t = t++;

}test(t);

console.log(t);

答案:10

4) var t = 10;

function test(test){

      var t = test++;  在函數內的t++;就是先運算在自加加一

}test(t);

console.log(t);

答案:10

6) var t = 10;

function test(test){

       t = test++;

}test(t);

console.log(t);

答案:10

7) var t = 10;

function test(test){

      t = t + test;

      console.log(t);

      var t = 3;

}test(t);

console.log(t);

答案:NaN  10

8)var a;

var b = a / 0;

if (b == b) {

        console.log(b * 2 + "2" - 0 + 4);

} else {

        console.log(!b * 2 + "2" - 0 + 4);

}

答案:26

9)<script>

      var a = 1;

</script>

<script>

    var a;

    var b = a / 0;

    if (b == b) {

        console.log(b * 2 + "2" + 4);

    } else {

        console.log(!b * 2 + "2" + 4);

    }

</script>

答案:Infinity24

 

  1. 用程序實現找到html中id名相同的元素?

<body>

<form id='form1'>

<div id='div1'></div>

<div id='div2'></div>

<div id='div3'></div>

<div id='div4'></div>

<div id='div5'></div>

<div id='div3'>id名重復的元素</div>

</form>

</body>

var nodes=document.querySelectorAll("#form1>*");
for(var i=0,len=nodes.length;i<len;i++){
var attr=nodes[i].getAttribute("id");
var s=1;
for(var j=i+1;j<len;j++){
if(nodes[j].getAttribute("id")==attr){
s++;
alert("id為:"+attr+"的元素出現"+s+"次");
}
    }
}

 

  1. 下列JavaScript代碼執行后,運行的結果是

<button id='btn'>點擊我</button>

var btn = document.getElementById('btn');

var handler = {

    id: '_eventHandler',

    exec: function(){

        alert(this.id);

    }

}

btn.addEventListener('click', handler.exec);  指向當前的對象

答案:”btn”

  1. 下列JavaScript代碼執行后,依次alert的結果是

var obj = {proto: {a:1,b:2}};

function F(){};

F.prototype = obj.proto;  構造函數的原型繼承

var f = new F();

obj.proto.c = 3;

obj.proto = {a:-1, b:-2};

alert(f.a);   1

alert(f.c);  

delete F.prototype['a'];

alert(f.a);

alert(obj.proto.a);

答案:

1

3

undefined

-1

 

  1. 下列JavaScript代碼執行后的效果是

<ul id='list'>

<li>item</li>

<li>item</li>

<li>item</li>

<li>item</li>

<li>item</li>

</ul>

var items = document.querySelectorAll('#list>li');

for(var i = 0;i < items.length; i++){

     setTimeout(function(){

           items[i].style.backgroundColor = '#fee';

    }, 5);

}

答案:報錯,因為i一直等於5,items[i]獲取不到元素

  1. 下列JavaScript代碼執行后的li元素的數量是

<ul>

<li>Item</li>

<li></li>

<li></li>

<li>Item</li>

<li>Item</li>

</ul>

 

var items = document.getElementsByTagName('li');

for(var i = 0; i< items.length; i++){

    if(items[i].innerHTML == ''){

        items[i].parentNode.removeChild(items[i]);

    }

}

  1. 程序中捕獲異常的方法?

window.error

try{}catch(){}finally{}

  1. 將字符串”<tr><td>{$id}</td><td>{$name}</td></tr>”中的{$id}替換成10,{$name}替換成Tony (使用正則表達式)
答案:'<tr><td>{$id}</td><td>{$id}_{$name}</td></tr>'
.replace(/{\$id}/g,'10')
        .replace(/{\$name}/g,'Tony')

 

  1. 給String對象添加一個方法,傳入一個string類型的參數,然后將string的每個字符間價格空格返回,例如:addSpace(“hello world”) // -> ‘h e l l o ?w o r l d’

String.prototype.spacify = function(){

return this.split('').join(' ');

};

  1. 數組和字符串

<script lang="JavaScript" type="text/javascript">

    function outPut(s) {

        document.writeln(s);

    }

    var a = "lashou";

    var b = a;

    outPut(b);

    a = "拉手";

    outPut(a);

    outPut(b);

    var a_array = [1, 2, 3];

    var b_array = a_array;

    outPut(b_array);

    a_array[3] = 4;

    outPut(a_array);

    outPut(b_array);

</script>

輸出結果:

答案:lashou 拉手 lashou 1,2,3 1,2,3,4 1,2,3,4

  1. 下列控制台都輸出什么

第1題:

function setName(){

       name="張三";

}

setName();

console.log(name);

答案:"張三"

第2題:

//考點:1、變量聲明提升 2、變量搜索機制

var a=1;

function test(){

       console.log(a);

       var a=1;

}

test();

答案:undefined

第3題:

var b=2;

function test2(){

       window.b=3;

       console.log(b);

}

test2();

答案:3

第4題:

c=5;//聲明一個全局變量c

function test3(){

       window.c=3;

       console.log(c);           //答案:undefined,原因:由於此時的c是一個局部變量c,並且沒有被賦值

       var c;

       console.log(window.c);//答案:3,原因:這里的c就是一個全局變量c

}

test3();

第5題:

var arr = [];

arr[0]  = 'a';

arr[1]  = 'b';

arr[10] = 'c';

alert(arr.length); //答案:11

console.log(arr[5]);   //答案:undefined

第6題:

var a=1;

console.log(a++);            //答案:1

console.log(++a);            //答案:3

第7題:

console.log(null==undefined);     //答案:true

console.log("1"==1);       //答案:true,因為會將數字1先轉換為字符串1

console.log("1"===1);            //答案:false,因為數據類型不一致

第8題:

typeof 1;              "number"

typeof "hello";           "string"

typeof /[0-9]/;            "object"

typeof {};             "object"

typeof null;         "object"

typeof undefined;     "undefined"

typeof [1,2,3];             "object"

typeof function(){};   //"function"

第9題:

parseInt(3.14);                  //3

parseFloat("3asdf");         //3

parseInt("1.23abc456");

parseInt(true);//"true" NaN

第10題:

//考點:函數聲明提前

function bar() {

    return foo;

    foo = 10;

    function foo() {}

    //var foo = 11;

}

alert(typeof bar());//"function"

第11題:考點:函數聲明提前

var foo = 1;

function bar() {

       foo = 10;

       return;

       function foo() {}

}

bar();

alert(foo);//答案:1

第12題:

console.log(a);//是一個函數

var a = 3;

function a(){}

console.log(a);////3

第13題:

//考點:對arguments的操作

function foo(a) {

    arguments[0] = 2;

    alert(a);//答案:2,因為:a、arguments是對實參的訪問,b、通過arguments[i]可以修改指定實參的值

}

foo(1);

第14題:

function foo(a) {

    alert(arguments.length);//答案:3,因為arguments是對實參的訪問

}

foo(1, 2, 3);

第15題

bar();//報錯

var foo = function bar(name) {

       console.log("hello"+name);

       console.log(bar);

};

//alert(typeof bar);

foo("world");//"hello"

console.log(bar);//undefined

console.log(foo.toString());

bar();//報錯

 

第16題:以下執行會有什么輸出

function test(){

       console.log("test函數");

}

setTimeout(function(){

       console.log("定時器回調函數");

}, 0)

test();

結果:

test函數

定時器回調函數

 

三、HTML5 CSS3

  1. CSS3有哪些新特性?

1. CSS3實現圓角(border-radius),陰影(box-shadow),

2. 對文字加特效(text-shadow、),線性漸變(gradient),旋轉(transform)

3.transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);// 旋轉,縮放,定位,傾斜

4. 增加了更多的CSS選擇器  多背景 rgba

5. 在CSS3中唯一引入的偽元素是 ::selection.

6. 媒體查詢,多欄布局

7. border-image

  1. html5有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區分 HTML 和 HTML5?

新特性:

1. 拖拽釋放(Drag and drop) API

2. 語義化更好的內容標簽(header,nav,footer,aside,article,section)

3. 音頻、視頻API(audio,video)

4. 畫布(Canvas) API

5. 地理(Geolocation) API

6. 本地離線存儲 localStorage 長期存儲數據,瀏覽器關閉后數據不丟失;

7. sessionStorage 的數據在瀏覽器關閉后自動刪除

8. 表單控件,calendar、date、time、email、url、search 

9. 新的技術webworker, websocket, Geolocation

移除的元素:

1. 純表現的元素:basefont,big,center,font, s,strike,tt,u;

2. 對可用性產生負面影響的元素:frame,frameset,noframes;

支持HTML5新標簽:

1. IE8/IE7/IE6支持通過 document.createElement 方法產生的標簽,可以利用這一特性讓這些瀏覽器支持 HTML5 新標簽,瀏覽器支持新標簽后,還需要添加標簽默認的樣式(當然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架):

<!--[if lt IE 9]>

<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>

<![endif]-->

如何區分:

DOCTYPE聲明新增的結構元素、功能元素

  1. 本地存儲(Local Storage )和cookies(儲存在用戶本地終端上的數據)之間的區別是什么?

Cookies:服務器和客戶端都可以訪問;大小只有4KB左右;有有效期,過期后將會刪除;

本地存儲:只有本地瀏覽器端可訪問數據,服務器不能訪問本地存儲直到故意通過POST或者GET的通道發送到服務器;每個域5MB;沒有過期數據,它將保留知道用戶從瀏覽器清除或者使用Javascript代碼移除

  1. 如何實現瀏覽器內多個標簽頁之間的通信?

調用 localstorge、cookies 等本地存儲方式

  1. 你如何對網站的文件和資源進行優化?

文件合並

文件最小化/文件壓縮

使用CDN托管

緩存的使用

  1. 什么是響應式設計?

它是關於網頁制作的過程中讓不同的設備有不同的尺寸和不同的功能。響應式設計是讓所有的人能在這些設備上讓網站運行正常   

  1. 新的 HTML5 文檔類型和字符集是?

答:HTML5文檔類型:<!doctype html>

    HTML5使用的編碼<meta charset=”UTF-8”>

  1. HTML5 Canvas 元素有什么用?

答:Canvas 元素用於在網頁上繪制圖形,該元素標簽強大之處在於可以直接在 HTML 上進行圖形操作。

  1. HTML5 存儲類型有什么區別?

答:Media API、Text Track API、Application Cache API、User Interaction、Data Transfer API、Command API、Constraint Validation API、History API

  1. 用H5+CSS3解決下導航欄最后一項掉下來的問題
  2. CSS3新增偽類有那些?

    p:first-of-type 選擇屬於其父元素的首個 <p> 元素的每個 <p> 元素。

    p:last-of-type  選擇屬於其父元素的最后 <p> 元素的每個 <p> 元素。

    p:only-of-type  選擇屬於其父元素唯一的 <p> 元素的每個 <p> 元素。

    p:only-child    選擇屬於其父元素的唯一子元素的每個 <p> 元素。

    p:nth-child(2)  選擇屬於其父元素的第二個子元素的每個 <p> 元素。

    :enabled、:disabled 控制表單控件的禁用狀態。

:checked,單選框或復選框被選中。

  1. 請用CSS實現:一個矩形內容,有投影,有圓角,hover狀態慢慢變透明。

css屬性的熟練程度和實踐經驗

  1. 描述下CSS3里實現元素動畫的方法

動畫相關屬性的熟悉程度

  1. html5\CSS3有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區分 HTML 和 HTML5?

HTML5 現在已經不是 SGML 的子集,主要是關於圖像,位置,存儲,地理定位等功能的增加。

* 繪畫 canvas 元素

  用於媒介回放的 video 和 audio 元素

  本地離線存儲 localStorage 長期存儲數據,瀏覽器關閉后數據不丟失;

  sessionStorage 的數據在瀏覽器關閉后自動刪除

  語意化更好的內容元素,比如 article、footer、header、nav、section

  表單控件,calendar、date、time、email、url、search

  CSS3實現圓角,陰影,對文字加特效,增加了更多的CSS選擇器  多背景 rgba

  新的技術webworker, websockt, Geolocation

移除的元素

純表現的元素:basefont,big,center,font, s,strike,tt,u;

對可用性產生負面影響的元素:frame,frameset,noframes;

* 是IE8/IE7/IE6支持通過document.createElement方法產生的標簽,

  可以利用這一特性讓這些瀏覽器支持HTML5新標簽,

  瀏覽器支持新標簽后,還需要添加標簽默認的樣式:

* 當然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架

<!--[if lt IE 9]>

<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>

<![endif]-->

  1. 你怎么來實現頁面設計圖,你認為前端應該如何高質量完成工作? 一個滿屏 品 字布局 如何設計?

* 首先划分成頭部、body、腳部;。。。。。

* 實現效果圖是最基本的工作,精確到2px;

  與設計師,產品經理的溝通和項目的參與

  做好的頁面結構,頁面重構和用戶體驗

  處理hack,兼容、寫出優美的代碼格式

  針對服務器的優化、擁抱 HTML5。

  1. 你能描述一下漸進增強和優雅降級之間的不同嗎?

漸進增強 progressive enhancement:針對低版本瀏覽器進行構建頁面,保證最基本的功能,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗。

優雅降級 graceful degradation:一開始就構建完整的功能,然后再針對低版本瀏覽器進行兼容。

  區別:優雅降級是從復雜的現狀開始,並試圖減少用戶體驗的供給,而漸進增強則是從一個非常基礎的,能夠起作用的版本開始,並不斷擴充,以適應未來環境的需要。降級(功能衰減)意味着往回看;而漸進增強則意味着朝前看,同時保證其根基處於安全地帶。 

  “優雅降級”觀點

  “優雅降級”觀點認為應該針對那些最高級、最完善的瀏覽器來設計網站。而將那些被認為“過時”或有功能缺失的瀏覽器下的測試工作安排在開發周期的最后階段,並把測試對象限定為主流瀏覽器(如 IE、Mozilla 等)的前一個版本。

  在這種設計范例下,舊版的瀏覽器被認為僅能提供“簡陋卻無妨 (poor, but passable)” 的瀏覽體驗。你可以做一些小的調整來適應某個特定的瀏覽器。但由於它們並非我們所關注的焦點,因此除了修復較大的錯誤之外,其它的差異將被直接忽略。

  “漸進增強”觀點

  “漸進增強”觀點則認為應關注於內容本身。

  內容是我們建立網站的誘因。有的網站展示它,有的則收集它,有的尋求,有的操作,還有的網站甚至會包含以上的種種,但相同點是它們全都涉及到內容。這使得“漸進增強”成為一種更為合理的設計范例。這也是它立即被 Yahoo! 所采納並用以構建其“分級式瀏覽器支持 (Graded Browser Support)”策略的原因所在。

 

  那么問題了。現在產品經理看到IE6,7,8網頁效果相對高版本現代瀏覽器少了很多圓角,陰影(CSS3),要求兼容(使用圖片背景,放棄CSS3),你會如何說服他?

  1. 為什么利用多個域名來存儲網站資源會更有效?

CDN緩存更方便 

突破瀏覽器並發限制 

節約cookie帶寬 

節約主域名的連接數,優化頁面響應速度 

防止不必要的安全問題

  1. 請談一下你對網頁標准和標准制定機構重要性的理解。

  (無標准答案)網頁標准和標准制定機構都是為了能讓web發展的更‘健康’,開發者遵循統一的標准,降低開發難度,開發成本,SEO也會更好做,也不會因為濫用代碼導致各種BUG、安全問題,最終提高網站易用性。

 

  1. 請描述一下cookies,sessionStorage和localStorage的區別?  

  sessionStorage用於本地存儲一個會話(session)中的數據,這些數據只有在同一個會話中的頁面才能訪問並且當會話結束后數據也隨之銷毀。因此sessionStorage不是一種持久化的本地存儲,僅僅是會話級別的存儲。而localStorage用於持久化的本地存儲,除非主動刪除數據,否則數據是永遠不會過期的。

web storagecookie的區別

Web Storage的概念和cookie相似,區別是它是為了更大容量存儲設計的。Cookie的大小是受限的,並且每次你請求一個新的頁面的時候Cookie都會被發送過去,這樣無形中浪費了帶寬,另外cookie還需要指定作用域,不可以跨域調用。

除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發者自己封裝setCookie,getCookie。但是Cookie也是不可以或缺的:Cookie的作用是與服務器進行交互,作為HTTP規范的一部分而存在 ,而Web Storage僅僅是為了在本地“存儲”數據而生。

  1. 知道css有個content屬性嗎?有什么作用?有什么應用?

知道。css的content屬性專門應用在 before/after 偽元素上,用來插入生成內容。最常見的應用是利用偽類清除浮動。

//一種常見利用偽類清除浮動的代碼

.clearfix:after {

    content:"."; //這里利用到了content屬性

    display:block;

    height:0;

    visibility:hidden;

    clear:both; }

.clearfix {

    *zoom:1;

}

after偽元素通過 content 在元素的后面生成了內容為一個點的塊級素,再利用clear:both清除浮動。

  那么問題繼續還有,知道css計數器(序列數字字符自動遞增)嗎?如何通過css content屬性實現css計數器?

答案:css計數器是通過設置counter-reset 、counter-increment 兩個屬性 、及 counter()/counters()一個方法配合after / before 偽類實現。 

  1. 如何在 HTML5 頁面中嵌入音頻?

HTML 5 包含嵌入音頻文件的標准方式,支持的格式包括 MP3、Wav 和 Ogg:

<audio controls> 

  <source src="jamshed.mp3" type="audio/mpeg"> 

   Your browser does'nt support audio embedding feature. 

</audio>

  1. 如何在 HTML5 頁面中嵌入視頻?

和音頻一樣,HTML5 定義了嵌入視頻的標准方法,支持的格式包括:MP4、WebM 和 Ogg:

<video width="450" height="340" controls> 

  <source src="jamshed.mp4" type="video/mp4"> 

   Your browser does'nt support video embedding feature. 

</video> 

  1. HTML5 引入什么新的表單屬性?

Datalist   datetime   output   keygen  date  month  week  time  number   range   emailurl

  1. CSS3新增偽類有那些?

 p:first-of-type 選擇屬於其父元素的首個 <p> 元素的每個 <p> 元素。

    p:last-of-type  選擇屬於其父元素的最后 <p> 元素的每個 <p> 元素。

    p:only-of-type  選擇屬於其父元素唯一的 <p> 元素的每個 <p> 元素。

    p:only-child    選擇屬於其父元素的唯一子元素的每個 <p> 元素。

    p:nth-child(2)  選擇屬於其父元素的第二個子元素的每個 <p> 元素。

    :enabled、:disabled 控制表單控件的禁用狀態。

:checked,單選框或復選框被選中。

  1. (寫)描述一段語義的html代碼吧。

(HTML5中新增加的很多標簽(如:<article>、<nav>、<header>和<footer>等)

就是基於語義化設計原則) 

< div id="header">

< h1>標題< /h1>

< h2>專注Web前端技術< /h2>

< /div>

語義 HTML 具有以下特性:

 

文字包裹在元素中,用以反映內容。例如:

段落包含在 <p> 元素中。

順序表包含在<ol>元素中。

從其他來源引用的大型文字塊包含在<blockquote>元素中。

HTML 元素不能用作語義用途以外的其他目的。例如:

<h1>包含標題,但並非用於放大文本。

<blockquote>包含大段引述,但並非用於文本縮進。

空白段落元素 ( <p></p> ) 並非用於跳行。

文本並不直接包含任何樣式信息。例如:

不使用 <font> 或 <center> 等格式標記。

類或 ID 中不引用顏色或位置。

  1. cookie在瀏覽器和服務器間來回傳遞。 sessionStorage和localStorage區別

sessionStorage和localStorage的存儲空間更大;

sessionStorage和localStorage有更多豐富易用的接口;

sessionStorage和localStorage各自獨立的存儲空間;

  1. html5有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?如何區分 HTML 和 HTML5?

* HTML5 現在已經不是 SGML 的子集,主要是關於圖像,位置,存儲,多任務等功能的增加。

* 繪畫 canvas 

  用於媒介回放的 video 和 audio 元素

  本地離線存儲 localStorage 長期存儲數據,瀏覽器關閉后數據不丟失;

  sessionStorage 的數據在瀏覽器關閉后自動刪除

  語意化更好的內容元素,比如 article、footer、header、nav、section

  表單控件,calendar、date、time、email、url、search 

  新的技術webworker, websockt, Geolocation

* 移除的元素

純表現的元素:basefont,big,center,font, s,strike,tt,u;

對可用性產生負面影響的元素:frame,frameset,noframes;

支持HTML5新標簽:

* IE8/IE7/IE6支持通過document.createElement方法產生的標簽,

  可以利用這一特性讓這些瀏覽器支持HTML5新標簽,

  瀏覽器支持新標簽后,還需要添加標簽默認的樣式:

* 當然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架

<!--[if lt IE 9]>

<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>

<![endif]-->

  1. 如何區分: DOCTYPE聲明\新增的結構元素\功能元素
  2. 語義化的理解?

用正確的標簽做正確的事情!

html語義化就是讓頁面的內容結構化,便於對瀏覽器、搜索引擎解析;

在沒有樣式CCS情況下也以一種文檔格式顯示,並且是容易閱讀的。

搜索引擎的爬蟲依賴於標記來確定上下文和各個關鍵字的權重,利於 SEO。

使閱讀源代碼的人對網站更容易將網站分塊,便於閱讀維護理解。

  1. HTML5的離線儲存?

localStorage    長期存儲數據,瀏覽器關閉后數據不丟失;

sessionStorage  數據在瀏覽器關閉后自動刪除。

  1. 寫出HTML5的文檔聲明方式

 

 <DOCYPE html>

  1. HTML5和CSS3的新標簽     

 

 

HTML5: nav, footer, header, section, hgroup, video, time, canvas, audio...

CSS3: RGBA, opacity, text-shadow, box-shadow, border-radius, border-image, 

border-color, transform...;

  1. 自己對標簽語義化的理解

    在我看來,語義化就是比如說一個段落, 那么我們就應該用 <p>標簽來修飾,標題就應該用 <h?>標簽等。符合文檔語義的標簽。

四、移動web開發

1、移動端常用類庫及優缺點

知識面寬度,多多益善

2、Zepto庫和JQ區別

Zepto相對jQuery更加輕量,主要用在移動端,jQuery也有對應的jQuerymobile移動端框架

五、Ajax

1、Ajax 是什么? 如何創建一個Ajax?

Ajax並不算是一種新的技術,全稱是asychronous javascript and xml,可以說是已有技術的組合,主要用來實現客戶端與服務器端的異步通信效果,實現頁面的局部刷新,早期的瀏覽器並不能原生支持ajax,可以使用隱藏幀(iframe)方式變相實現異步效果,后來的瀏覽器提供了對ajax的原生支持

使用ajax原生方式發送請求主要通過XMLHttpRequest(標准瀏覽器)、ActiveXObject(IE瀏覽器)對象實現異步通信效果

基本步驟:

var xhr =null;//創建對象

if(window.XMLHttpRequest){

   xhr = new XMLHttpRequest();

}else{

   xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

     xhr.open(“方式”,”地址”,”標志位”);//初始化請求

     xhr.setRequestHeader(“”,””);//設置http頭信息

     xhr.onreadystatechange =function(){}//指定回調函數

     xhr.send();//發送請求

js框架(jQuery/EXTJS等)提供的ajax  API對原生的ajax進行了封裝,熟悉了基礎理論,再學習別的框架就會得心應手,好多都是換湯不換葯的內容

2、同步和異步的區別?

同步:阻塞的

-張三叫李四去吃飯,李四一直忙得不停,張三一直等着,直到李四忙完兩個人一塊去吃飯

=瀏覽器向服務器請求數據,服務器比較忙,瀏覽器一直等着(頁面白屏),直到服務器返回數據,瀏覽器才能顯示頁面

異步:非阻塞的

-張三叫李四去吃飯,李四在忙,張三說了一聲然后自己就去吃飯了,李四忙完后自己去吃

=瀏覽器向服務器請求數據,服務器比較忙,瀏覽器可以自如的干原來的事情(顯示頁面),服務器返回數據的時候通知瀏覽器一聲,瀏覽器把返回的數據再渲染到頁面,局部更新

3、如何解決跨域問題?

理解跨域的概念:協議、域名、端口都相同才同域,否則都是跨域

出於安全考慮,服務器不允許ajax跨域獲取數據,但是可以跨域獲取文件內容,所以基於這一點,可以動態創建script標簽,使用標簽的src屬性訪問js文件的形式獲取js腳本,並且這個js腳本中的內容是函數調用,該函數調用的參數是服務器返回的數據,為了獲取這里的參數數據,需要事先在頁面中定義回調函數,在回調函數中處理服務器返回的數據,這就是解決跨域問題的主流解決方案

4、頁面編碼和被請求的資源編碼如果不一致如何處理?

對於ajax請求傳遞的參數,如果是get請求方式,參數如果傳遞中文,在有些瀏覽器會亂碼,不同的瀏覽器對參數編碼的處理方式不同,所以對於get請求的參數需要使用 encodeURIComponent函數對參數進行編碼處理,后台開發語言都有相應的解碼api。對於post請求不需要進行編碼

5、簡述ajax 的過程。

1. 創建XMLHttpRequest對象,也就是創建一個異步調用對象

2. 創建一個新的HTTP請求,並指定該HTTP請求的方法、URL及驗證信息

3. 設置響應HTTP請求狀態變化的函數

4. 發送HTTP請求

5. 獲取異步調用返回的數據

6. 使用JavaScript和DOM實現局部刷新

6、闡述一下異步加載。

1. 異步加載的方案: 動態插入 script 標簽

2. 通過 ajax 去獲取 js 代碼,然后通過 eval 執行

3. script 標簽上添加 defer 或者 async 屬性

4. 創建並插入 iframe,讓它異步執行 js

7、請解釋一下 JavaScript 的同源策略。

同源策略是客戶端腳本(尤其是Javascript)的重要的安全度量標准。它最早出自Netscape Navigator2.0,其目的是防止某個文檔或腳本從多個不同源裝載。所謂同源指的是:協議,域名,端口相同,同源策略是一種安全協議,指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。

8、GET和POST的區別,何時使用POST?

GET:一般用於信息獲取,使用URL傳遞參數,對所發送信息的數量也有限制,一般在2000個字符,有的瀏覽器是8000個字符

POST:一般用於修改服務器上的資源,對所發送的信息沒有限制

在以下情況中,請使用 POST 請求:

1. 無法使用緩存文件(更新服務器上的文件或數據庫)

2. 向服務器發送大量數據(POST 沒有數據量限制)

3. 發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠

9、ajax 是什么?ajax 的交互模型?同步和異步的區別?如何解決跨域問題?

 1. 通過異步模式,提升了用戶體驗

 2. 優化了瀏覽器和服務器之間的傳輸,減少不必要的數據往返,減少了帶寬占用

3.  Ajax在客戶端運行,承擔了一部分本來由服務器承擔的工作,減少了大用戶量下的服務器負載。

10、 Ajax的最大的特點是什么。

    Ajax可以實現異步通信效果,實現頁面局部刷新,帶來更好的用戶體驗;按需獲取數據,節約帶寬資源;

11、ajax的缺點

 1、ajax不支持瀏覽器back按鈕。

 2、安全問題 AJAX暴露了與服務器交互的細節。

 3、對搜索引擎的支持比較弱。

 4、破壞了程序的異常機制。

12、ajax請求的時候get 和post方式的區別

get一般用來進行查詢操作,url地址有長度限制,請求的參數都暴露在url地址當中,如果傳遞中文參數,需要自己進行編碼操作,安全性較低。

post請求方式主要用來提交數據,沒有數據長度的限制,提交的數據內容存在於http請求體中,數據不會暴漏在url地址中。

13、解釋jsonp的原理,以及為什么不是真正的ajax

  Jsonp並不是一種數據格式,而json是一種數據格式,jsonp是用來解決跨域獲取數據的一種解決方案,具體是通過動態創建script標簽,然后通過標簽的src屬性獲取js文件中的js腳本,該腳本的內容是一個函數調用,參數就是服務器返回的數據,為了處理這些返回的數據,需要事先在頁面定義好回調函數,本質上使用的並不是ajax技術

14、什么是Ajax和JSON,它們的優缺點。

Ajax是全稱是asynchronous JavaScript andXML,即異步JavaScript和xml,用於在Web頁面中實現異步數據交互,實現頁面局部刷新。

優點:可以使得頁面不重載全部內容的情況下加載局部內容,降低數據傳輸量,避免用戶不斷刷新或者跳轉頁面,提高用戶體驗

缺點:對搜索引擎不友好;要實現ajax下的前后退功能成本較大;可能造成請求數的增加跨域問題限制;

JSON是一種輕量級的數據交換格式,ECMA的一個子集

優點:輕量級、易於人的閱讀和編寫,便於機器(JavaScript)解析,支持復合數據類型(數組、對象、字符串、數字)

15、http常見的狀態碼有那些?分別代表是什么意思?

200 - 請求成功

301 - 資源(網頁等)被永久轉移到其它URL

404 - 請求的資源(網頁等)不存在

500 - 內部服務器錯誤

16、一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什么?

分為4個步驟:

1. 當發送一個 URL 請求時,不管這個 URL 是 Web 頁面的 URL 還是 Web 頁面上每個資源的 URL,瀏覽器都會開啟一個線程來處理這個請求,同時在遠程 DNS 服務器上啟動一個 DNS 查詢。這能使瀏覽器獲得請求對應的 IP 地址。

2. 瀏覽器與遠程 Web 服務器通過 TCP 三次握手協商來建立一個 TCP/IP 連接。該握手包括一個同步報文,一個同步-應答報文和一個應答報文,這三個報文在 瀏覽器和服務器之間傳遞。該握手首先由客戶端嘗試建立起通信,而后服務器應答並接受客戶端的請求,最后由客戶端發出該請求已經被接受的報文。

3. 一旦 TCP/IP 連接建立,瀏覽器會通過該連接向遠程服務器發送 HTTP 的 GET 請求。遠程服務器找到資源並使用 HTTP 響應返回該資源,值為 200 的 HTTP 響應狀態表示一個正確的響應。

4. 此時,Web 服務器提供資源服務,客戶端開始下載資源。

17、ajax請求的時候get 和post方式的區別

get一般用來進行查詢操作,url地址有長度限制,請求的參數都暴露在url地址當中,如果傳遞中文參數,需要自己進行編碼操作,安全性較低。

post請求方式主要用來提交數據,沒有數據長度的限制,提交的數據內容存在於http請求體中,數據不會暴漏在url地址中。

18、ajax請求時,如何解釋json數據

使用eval()或者JSON.parse() 鑒於安全性考慮,推薦使用JSON.parse()更靠譜,對數據的安全性更好。

19、.javascript的本地對象,內置對象和宿主對象

本地對象為獨立於宿主環境的ECMAScript提供的對象,包括ArrayObjectRegExp等可以new實例化的對象

內置對象為Gload,Math 等不可以實例化的(他們也是本地對象,內置對象是本地對象的一個子集)

宿主對象為所有的非本地對象,所有的BOM和DOM對象都是宿主對象,如瀏覽器自帶的document,window 等對象

20、為什么利用多個域名來存儲網站資源會更有效?

確保用戶在不同地區能用最快的速度打開網站,其中某個域名崩潰用戶也能通過其他郁悶訪問網站,並且不同的資源放到不同的服務器上有利於減輕單台服務器的壓力。

21、請說出三種減低頁面加載時間的方法

1、壓縮css、js文件
2、合並js、css文件,減少http請求
3、外部js、css文件放在最底下
4、減少dom操作,盡可能用變量替代不必要的dom操作

22、HTTP狀態碼都有那些。

200 OK      //客戶端請求成功

400 Bad Request  //客戶端請求有語法錯誤,不能被服務器所理解

403 Forbidden  //服務器收到請求,但是拒絕提供服務

404 Not Found  //請求資源不存在,輸入了錯誤的URL

500 Internal Server Error //服務器發生不可預期的錯誤

503 Server Unavailable  //服務器當前不能處理客戶端的請求,一段時間后可能恢復正常

六、JS高級

1、 JQuery一個對象可以同時綁定多個事件,這是如何實現的?

jQuery可以給一個對象同時綁定多個事件,低層實現方式是使用addEventListner或attachEvent兼容不同的瀏覽器實現事件的綁定,這樣可以給同一個對象注冊多個事件。

2、 知道什么是webkit么? 知道怎么用瀏覽器的各種工具來調試和debug代碼么?

Webkit是瀏覽器引擎,包括html渲染和js解析功能,手機瀏覽器的主流內核,與之相對應的引擎有Gecko(Mozilla Firefox 等使用)和Trident(也稱MSHTML,IE 使用)。

對於瀏覽器的調試工具要熟練使用,主要是頁面結構分析,后台請求信息查看,js調試工具使用,熟練使用這些工具可以快速提高解決問題的效率

3、 如何測試前端代碼? 知道BDD, TDD, Unit Test么? 知道怎么測試你的前端工程么(mocha, sinon, jasmin, qUnit..)?

了解BDD行為驅動開發與TDD測試驅動開發已經單元測試相關概念,

4、 前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用?

Web 模板引擎是為了使用戶界面與業務數據(內容)分離而產生的,

Mustache 是一個 logic-less (輕邏輯)模板解析引擎,它的優勢在於可以應用在 Javascript、PHP、Python、Perl 等多種編程語言中。

Underscore封裝了常用的JavaScript對象操作方法,用於提高開發效率。

Handlebars 是 JavaScript 一個語義模板庫,通過對view和data的分離來快速構建Web模板。

5、 簡述一下 Handlebars 的基本用法?

沒有用過的話說出它是干什么的即可

6、 簡述一下 Handlerbars 的對模板的基本處理流程, 如何編譯的?如何緩存的?

學習技術不僅要會用,還有熟悉它的實現機制,這樣在開發中遇到問題時才能更好的解決

7、 用js實現千位分隔符?

原生js的熟練度,實踐經驗,實現思路

8、 檢測瀏覽器版本版本有哪些方式?

IE與標准瀏覽器判斷,IE不同版本的判斷,userAgent  var ie = /*@cc_on !@*/false;

9、 我們給一個dom同時綁定兩個點擊事件,一個用捕獲,一個用冒泡,你來說下會執行幾次事件,然后會先執行冒泡還是捕獲

對兩種事件模型的理解

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

  • 考察點1:對於基本數據類型和引用數據類型在內存中存放的是值還是指針這一區別是否清楚
  • 考察點2:是否知道如何判斷一個變量是什么類型的
  • 考察點3:遞歸算法的設計

 

// 方法一:

Object.prototype.clone = function(){

   var o = this.constructor === Array ? [] : {};

   for(var e in this){

    o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];

   }

   return o;

}

//方法二:

  /**

     * 克隆一個對象

     * @param Obj

     * @returns

     */

    function clone(Obj) {  

        var buf;  

        if (Obj instanceof Array) {  

            buf = [];//創建一個空的數組

            var i = Obj.length;  

            while (i--) {  

                buf[i] = clone(Obj[i]);  

            }  

            return buf;   

        }else if (Obj instanceof Object){  

            buf = {};//創建一個空對象

            for (var k in Obj) { //為這個對象添加新的屬性

                buf[k] = clone(Obj[k]);  

            }  

            return buf;  

        }else{ //普通變量直接賦值

            return Obj;  

        }  

    }

11、如何消除一個數組里面重復的元素?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];

        function deRepeat(){

            var newArr=[];

            var obj={};

            var index=0;

            var l=arr.length;

            for(var i=0;i<l;i++){

                if(obj[arr[i]]==undefined)

                  {

                    obj[arr[i]]=1;

                    newArr[index++]=arr[i];

                  }

                else if(obj[arr[i]]==1)

                  continue;

            }

            return newArr;

        }

        var newArr2=deRepeat(arr);

        alert(newArr2); //輸出1,2,3,4,5,6,9,25

12、小賢是一條可愛的小狗(Dog),它的叫聲很好聽(wow),每次看到主人的時候就會乖乖叫一聲(yelp)。從這段描述可以得到以下對象:

 

 

 

 

 

 

 

 

function Dog() {

      this.wow = function() {

               alert(’Wow’);

      }

      this.yelp = function() {

              this.wow();

      }

}

小芒和小賢一樣,原來也是一條可愛的小狗,可是突然有一天瘋了(MadDog),一看到人就會每隔半秒叫一聲(wow)地不停叫喚(yelp)。請根據描述,按示例的形式用代碼來實。(繼承,原型,setInterval)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

function MadDog() {

    this.yelp = function() {

          var self = this;         

          setInterval(function() {

                self.wow();     

          }, 500);

      }

}

MadDog.prototype = new Dog();        

//for test

var dog = new Dog();

dog.yelp();

var madDog = new MadDog();

madDog.yelp();

13、下面這個ul,如何點擊每一列的時候alert其index?(閉包)

 

 

 

 

 

<ul id=”test”>

<li>這是第一條</li>

<li>這是第二條</li>

<li>這是第三條</li>

</ul>

 

// 方法一:

var lis=document.getElementById('2223').getElementsByTagName('li');

for(var i=0;i<3;i++)

{

    lis[i].index=i;

    lis[i].onclick=function(){

        alert(this.index);

    };

}

//方法二:

var lis=document.getElementById('2223').getElementsByTagName('li');

for(var i=0;i<3;i++){

    lis[i].index=i;

    lis[i].onclick=(function(a){

        return function() {

            alert(a);

        }

    })(i);

}

14、編寫一個JavaScript函數,輸入指定類型的選擇器(僅需支持id,class,tagName三種簡單CSS選擇器,無需兼容組合選擇器)可以返回匹配的DOM節點,需考慮瀏覽器兼容性和性能。

/*** @param selector {String} 傳入的CSS選擇器。* @return {Array}*/

 

var query = function(selector) {

var reg = /^(#)?(\.)?(\w+)$/img;

var regResult = reg.exec(selector);

var result = [];

//如果是id選擇器

if(regResult[1]) {

if(regResult[3]) {

if(typeof document.querySelector === "function") {

result.push(document.querySelector(regResult[3]));

    }else {

      result.push(document.getElementById(regResult[3]));

    }

  }

  }

  //如果是class選擇器

  else if(regResult[2]) {

   if(regResult[3]) {

      if(typeof document.getElementsByClassName === 'function') {

        var doms = document.getElementsByClassName(regResult[3]);

        if(doms) {

          result = converToArray(doms);

        }

      }

     //如果不支持getElementsByClassName函數

     else {

      var allDoms = document.getElementsByTagName("*") ;

       for(var i = 0, len = allDoms.length; i < len; i++) {

         if(allDoms[i].className.search(new RegExp(regResult[2])) > -1) {

           result.push(allDoms[i]);

        }

       }

    }

 }

}

 //如果是標簽選擇器

 else if(regResult[3]) {

   var doms = document.getElementsByTagName(regResult[3].toLowerCase());

   if(doms) {

     result = converToArray(doms);

   }

 }

 return result;

 }

 function converToArray(nodes){

    var array = null;        

    try{       

     array = Array.prototype.slice.call(nodes,0);//針對非IE瀏覽器        

   }catch(ex){

    array = new Array();        

   for( var i = 0 ,len = nodes.length; i < len ; i++ ) {

     array.push(nodes[i])        

   }

  }     

  return array;

}

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

 

if(window.addEventListener){

    var addListener = function(el,type,listener,useCapture){

        el.addEventListener(type,listener,useCapture);

  };

}

else if(document.all){

    addListener = function(el,type,listener){

        el.attachEvent("on"+type,function(){

          listener.apply(el);

      });

   } 

}

  • 不應該在if和else語句中聲明addListener函數,應該先聲明;
  • 不需要使用window.addEventListener或document.all來進行檢測瀏覽器,應該使用能力檢測;
  • 由於attachEvent在IE中有this指向問題,所以調用它時需要處理一下

改進如下:

function addEvent(elem, type, handler){

  if(elem.addEventListener){

    elem.addEventListener(type, handler, false);

  }else if(elem.attachEvent){

    elem['temp' + type + handler] = handler;

    elem[type + handler] = function(){

    elem['temp' + type + handler].apply(elem);

  };

  elem.attachEvent('on' + type, elem[type + handler]); 

  }else{

  elem['on' + type] = handler;

  }

}

16、給String對象添加一個方法,傳入一個string類型的參數,然后將string的每個字符間價格空格返回,例如:

addSpace(“hello world”) // -> ‘h e l l o  w o r l d’

 

 

 

String.prototype.spacify = function(){

      return this.split('').join(' ');

    };

接着上述問題答案提問,1)直接在對象的原型上添加方法是否安全?尤其是在Object對象上。(這個我沒能答出?希望知道的說一下。) 2)函數聲明與函數表達式的區別?

答案:在js中,解析器在向執行環境中加載數據時,對函數聲明和函數表達式並非是一視同仁的,解析器會率先讀取函數聲明,並使其在執行任何代碼之前可用(可以訪問),至於函數表達式,則必須等到解析器執行到它所在的代碼行,才會真正被解析執行。

17、定義一個log方法,讓它可以代理console.log的方法。

可行的方法一:

function log(msg) {

    console.log(msg);

}

log("hello world!") // hello world!

如果要傳入多個參數呢?顯然上面的方法不能滿足要求,所以更好的方法是:

function log(){

    console.log.apply(console, arguments);

};

到此,追問apply和call方法的異同。

對於apply和call兩者在作用上是相同的,即是調用一個對象的一個方法,以另一個對象替換當前對象。將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。

但兩者在參數上有區別的。對於第一個參數意義都一樣,但對第二個參數: apply傳入的是一個參數數組,也就是將多個參數組合成為一個數組傳入,而call則作為call的參數傳入(從第二個參數開始)。 如 func.call(func1,var1,var2,var3)對應的apply寫法為:func.apply(func1,[var1,var2,var3]) 。

18、在Javascript中什么是偽數組?如何將偽數組轉化為標准數組?

偽數組(類數組):無法直接調用數組方法或期望length屬性有什么特殊的行為,但仍可以對真正數組遍歷方法來遍歷它們。典型的是函數的argument參數,還有像調用getElementsByTagName,document.childNodes之類的,它們都返回NodeList對象都屬於偽數組。可以使用Array.prototype.slice.call(fakeArray)將數組轉化為真正的Array對象。

假設接第八題題干,我們要給每個log方法添加一個”(app)”前綴,比如’hello world!’ ->’(app)hello world!’。方法如下:

function log(){

      var args = Array.prototype.slice.call(arguments);  //為了使用unshift數組方法,將argument轉化為真正的數組

      args.unshift('(app)');

      console.log.apply(console, args);

    };

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

var User = {

  count: 1,

  getCount: function() {

    return this.count;

  }

};

console.log(User.getCount());  // what?

var func = User.getCount;

console.log(func());  // what?

問兩處console輸出什么?為什么?

答案是1和undefined。

func是在winodw的上下文中被執行的,所以會訪問不到count屬性。

繼續追問,那么如何確保Uesr總是能訪問到func的上下文,即正確返回1。正確的方法是使用Function.prototype.bind。兼容各個瀏覽器完整代碼如下:

Function.prototype.bind = Function.prototype.bind || function(context){

   var self = this;

   return function(){

      return self.apply(context, arguments);

   };

}

var func = User.getCount.bind(User);

console.log(func());

20、原生JS的window.onload與Jquery的$(document).ready(function(){})有什么不同?如何用原生JS實現Jq的ready方法?

window.onload()方法是必須等到頁面內包括圖片的所有元素加載完畢后才能執行。

$(document).ready()是DOM結構繪制完畢后就執行,不必等到加載完畢。

/*

 * 傳遞函數給whenReady()

 * 當文檔解析完畢且為操作准備就緒時,函數作為document的方法調用

 */

var whenReady = (function() {               //這個函數返回whenReady()函數

    var funcs = [];             //當獲得事件時,要運行的函數

    var ready = false;          //當觸發事件處理程序時,切換為true

    //當文檔就緒時,調用事件處理程序

    function handler(e) {

        if(ready) return;       //確保事件處理程序只完整運行一次

        //如果發生onreadystatechange事件,但其狀態不是complete的話,那么文檔尚未准備好

        if(e.type === 'onreadystatechange' && document.readyState !== 'complete') {

            return;

        }

        //運行所有注冊函數

        //注意每次都要計算funcs.length

        //以防這些函數的調用可能會導致注冊更多的函數

        for(var i=0; i<funcs.length; i++) {

            funcs[i].call(document);

        }

        //事件處理函數完整執行,切換ready狀態, 並移除所有函數

        ready = true;

        funcs = null;

    }

    //為接收到的任何事件注冊處理程序

    if(document.addEventListener) {

        document.addEventListener('DOMContentLoaded', handler, false);

        document.addEventListener('readystatechange', handler, false);            //IE9+

        window.addEventListener('load', handler, false);

    }else if(document.attachEvent) {

        document.attachEvent('onreadystatechange', handler);

        window.attachEvent('onload', handler);

    }

    //返回whenReady()函數

    return function whenReady(fn) {

        if(ready) { fn.call(document); }

        else { funcs.push(fn); }

    }

})();

如果上述代碼十分難懂,下面這個簡化版:

function ready(fn){

    if(document.addEventListener) {//標准瀏覽器

        document.addEventListener('DOMContentLoaded', function() {

            //注銷事件, 避免反復觸發

            document.removeEventListener('DOMContentLoaded',arguments.callee, false);

            fn();//執行函數

        }, false);

    }else if(document.attachEvent) {//IE

        document.attachEvent('onreadystatechange', function() {

            if(document.readyState == 'complete') {

                document.detachEvent('onreadystatechange', arguments.callee);

                fn();//函數執行

            }

        });

    }

};

21、(設計題)想實現一個對頁面某個節點的拖曳?如何做?(使用原生JS)

回答出概念即可,下面是幾個要點

1. 給需要拖拽的節點綁定mousedown, mousemove, mouseup事件

2. mousedown事件觸發后,開始拖拽

3. mousemove時,需要通過event.clientX和clientY獲取拖拽位置,並實時更新位置

4. mouseup時,拖拽結束

5. 需要注意瀏覽器邊界的情況

22、請實現如下功能

 

 function setcookie(name,value,days){  //給cookie增加一個時間變量

  var exp = new Date();

  exp.setTime(exp.getTime() + days*24*60*60*1000); //設置過期時間為days天

  document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();

}

function getCookie(name){

  var result = "";

  var myCookie = ""+document.cookie+";";

  var searchName = "+name+"=";

  var startOfCookie = myCookie.indexOf(searchName);

  var endOfCookie;

  if(satrtOfCookie != -1){

    startOfcookie += searchName.length;

    endOfCookie = myCookie.indexOf(";",startOfCookie);

    result = (myCookie.substring(startOfCookie,endOfCookie));

  }

  return result;

}

(function(){

  var oTips = document.getElementById('tips');//假設tips的id為tips

  var page = {

  check: function(){//檢查tips的cookie是否存在並且允許顯示

    var tips = getCookie('tips');

    if(!tips || tips == 'show') return true;//tips的cookie不存在

    if(tips == "never_show_again") return false;

  },

  hideTip: function(bNever){

    if(bNever) setcookie('tips', 'never_show_again', 365);

    oTips.style.display = "none";//隱藏

  },

  showTip: function(){

  oTips.style.display = "inline";//顯示,假設tips為行級元素

  },

  init: function(){

    var _this = this;

    if(this.check()){

    _this.showTip();

    setcookie('tips', 'show', 1);

  }

  oTips.onclick = function(){

    _this.hideTip(true);

  };

  }

  };

  page.init();

})();

23、說出以下函數的作用是?空白區域應該填寫什么?

//define

(function(window){

    function fn(str){

        this.str=str;

    }

 

    fn.prototype.format = function(){

        var arg = ______;

        return this.str.replace(_____,function(a,b){

             return arg[b]||"";

      });

    }

    window.fn = fn;

})(window);

 

//use

(function(){

    var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>');

    console.log(t.format('http://www.alibaba.com','Alibaba','Welcome'));

})();

答案:訪函數的作用是使用format函數將函數的參數替換掉{0}這樣的內容,返回一個格式化后的結果:

第一個空是:arguments

第二個空是:/\{(\d+)\}/ig

24、 Javascript作用鏈域?

理解變量和函數的訪問范圍和生命周期,全局作用域與局部作用域的區別,JavaScript中沒有塊作用域,函數的嵌套形成不同層次的作用域,嵌套的層次形成鏈式形式,通過作用域鏈查找屬性的規則需要深入理解。

25、 談談This對象的理解。

理解不同形式的函數調用方式下的this指向,理解事件函數、定時函數中的this指向,函數的調用形式決定了this的指向。

26、 eval是做什么的?

它的功能是把對應的字符串解析成JS代碼並運行;應該避免使用eval,不安全,非常耗性能(2個步驟,一次解析成js語句,一次執行)

 

27、 關於事件,IE與火狐的事件機制有什么區別? 如何阻止冒泡?

[1].在IE中,事件對象是作為一個全局變量來保存和維護的.所有的瀏覽器事件,不管是用戶觸發的,還是其他事件,都會更新window.event對象.所以在代碼中,只要調用window.event就可以獲取事件對象, 再event.srcElement就可以取得觸發事件的元素進行進一步處理.

[2].在FireFox中,事件對象卻不是全局對象,一般情況下,是現場發生,現場使用,FireFox把事件對象自動傳給事件處理程序.

關於事件的兼容性處理要熟練掌握,事件對象具體哪些屬性存在兼容性問題,IE與標准事件模型事件冒泡與事件捕獲的支持要理解

28、 什么是閉包(closure),為什么要用它?

簡單的理解是函數的嵌套形成閉包,閉包包括函數本身已經它的外部作用域

使用閉包可以形成獨立的空間,延長變量的生命周期,報存中間狀態值

29、javascript 代碼中的"use strict";是什么意思 ? 使用它區別是什么?

意思是使用嚴格模式,使用嚴格模式,一些不規范的語法將不再支持

30、如何判斷一個對象是否屬於某個類?

Instanceof   constructor

31、new操作符具體干了什么呢?

1、創建一個空對象,並且 this 變量引用該對象,同時還繼承了該函數的原型。

  2、屬性和方法被加入到 this 引用的對象中。

  3、新創建的對象由 this 所引用,並且最后隱式的返回 this 。

32、用原生JavaScript的實現過什么功能嗎?

主要考察原生js的實踐經驗

33、Javascript中,有一個函數,執行時對象查找時,永遠不會去查找原型,這個函數是?

HasOwnProperty

34、對JSON的了解?

輕量級數據交互格式,可以形成復雜的嵌套格式,解析非常方便

35、js延遲加載的方式有哪些?

方案一:<script>標簽的async="async"屬性(詳細參見:script標簽的async屬性)

方案二:<script>標簽的defer="defer"屬性

方案三:動態創建<script>標簽

方案四:AJAX eval(使用AJAX得到腳本內容,然后通過eval_r(xmlhttp.responseText)來運行腳本)

方案五:iframe方式

36、模塊化開發怎么做?

理解模塊化開發模式:瀏覽器端requirejs,seajs;服務器端nodejs;ES6模塊化;fis、webpack等前端整體模塊化解決方案;grunt、gulp等前端工作流的使用

37、AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)規范區別?

理解這兩種規范的差異,主要通過requirejs與seajs的對比,理解模塊的定義與引用方式的差異以及這兩種規范的設計原則

38、requireJS的核心原理是什么?(如何動態加載的?如何避免多次加載的?如何 緩存的?)

核心是js的加載模塊,通過正則匹配模塊以及模塊的依賴關系,保證文件加載的先后順序,根據文件的路徑對加載過的文件做了緩存

39、讓你自己設計實現一個requireJS,你會怎么做?

核心是實現js的加載模塊,維護js的依賴關系,控制好文件加載的先后順序

40、談一談你對ECMAScript6的了解?

ES6新的語法糖,類,模塊化等新特性

41、ECMAScript6 怎么寫class么,為什么會出現class這種東西?

class Point {

  constructor(x, y) {

    this.x = x;

    this.y = y;

  }

  toString() {

     return '('+this.x+', '+this.y+')';

  }

}

42、異步加載的方式有哪些?

方案一:<script>標簽的async="async"屬性(詳細參見:script標簽的async屬性)

方案二:<script>標簽的defer="defer"屬性

方案三:動態創建<script>標簽

方案四:AJAX eval(使用AJAX得到腳本內容,然后通過eval_r(xmlhttp.responseText)來運行腳本)

方案五:iframe方式

43、documen.write和 innerHTML的區別?

document.write是重寫整個document, 寫入內容是字符串的html

innerHTML是HTMLElement的屬性,是一個元素的內部html內容

44、DOM操作——怎樣添加、移除、移動、復制、創建和查找節點?

(1)創建新節點

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

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

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

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

      appendChild()

      removeChild()

      replaceChild()

      insertBefore()

(3)查找

      getElementsByTagName()    //通過標簽名稱

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

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

45、call() 和 .apply() 的含義和區別?

apply的參數是數組形式,call的參數是單個的值,除此之外在使用上沒有差別,重點理解這兩個函數調用的this改變

46、數組和對象有哪些原生方法,列舉一下?

Array.concat( ) 連接數組

Array.join( ) 將數組元素連接起來以構建一個字符串

Array.length 數組的大小

Array.pop( ) 刪除並返回數組的最后一個元素

Array.push( ) 給數組添加元素

Array.reverse( ) 顛倒數組中元素的順序

Array.shift( ) 將元素移出數組

Array.slice( ) 返回數組的一部分

Array.sort( ) 對數組元素進行排序

Array.splice( ) 插入、刪除或替換數組的元素

Array.toLocaleString( ) 把數組轉換成局部字符串

Array.toString( ) 將數組轉換成一個字符串

Array.unshift( ) 在數組頭部插入一個元素

 

Object.hasOwnProperty( ) 檢查屬性是否被繼承

Object.isPrototypeOf( ) 一個對象是否是另一個對象的原型

Object.propertyIsEnumerable( ) 是否可以通過for/in循環看到屬性

Object.toLocaleString( ) 返回對象的本地字符串表示

Object.toString( ) 定義一個對象的字符串表示

Object.valueOf( ) 指定對象的原始值

47、JS 怎么實現一個類。怎么實例化這個類

嚴格來講js中並沒有類的概念,不過js中的函數可以作為構造函數來使用,通過new來實例化,其實函數本身也是一個對象。

48、JavaScript中的作用域與變量聲明提升?

理解JavaScript的預解析機制,js的運行主要分兩個階段:js的預解析和運行,預解析階段所有的變量聲明和函數定義都會提前,但是變量的賦值不會提前

49、如何編寫高性能的Javascript?

使用 DocumentFragment 優化多次 append

通過模板元素 clone ,替代 createElement

使用一次 innerHTML 賦值代替構建 dom 元素

使用 firstChild 和 nextSibling 代替 childNodes 遍歷 dom 元素

使用 Array 做為 StringBuffer ,代替字符串拼接的操作

將循環控制量保存到局部變量

順序無關的遍歷時,用 while 替代 for

將條件分支,按可能性順序從高到低排列

在同一條件子的多( >2 )條件分支時,使用 switch 優於 if

使用三目運算符替代條件分支

需要不斷執行的時候,優先考慮使用 setInterval

50、那些操作會造成內存泄漏?

閉包,循環

51、javascript對象的幾種創建方式?

1. 工廠模式

2. 構造函數模式

3. 原型模式

4. 混合構造函數和原型模式

5. 動態原型模式

6. 寄生構造函數模式

7. 穩妥構造函數模式

52、javascript繼承的 6 種方法?

1. 原型鏈繼承

2. 借用構造函數繼承

3. 組合繼承(原型+借用構造)

4. 原型式繼承

5. 寄生式繼承

6. 寄生組合式繼承

53、eval是做什么的?

1. 它的功能是把對應的字符串解析成JS代碼並運行

2. 應該避免使用eval,不安全,非常耗性能(2次,一次解析成js語句,一次執行)

54、JavaScript 原型,原型鏈 ? 有什么特點?

1. 原型對象也是普通的對象,是對象一個自帶隱式的 __proto__ 屬性,原型也有可能有自己的原型,如果一個原型對象的原型不為 null 的話,我們就稱之為原型鏈

2. 原型鏈是由一些用來繼承和共享屬性的對象組成的(有限的)對象鏈

55、事件、IE與火狐的事件機制有什么區別? 如何阻止冒泡?

1. 我們在網頁中的某個操作(有的操作對應多個事件)。例如:當我們點擊一個按鈕就會產生一個事件。是可以被 JavaScript 偵測到的行為

2. 事件處理機制:IE是事件冒泡、firefox同時支持兩種事件模型,也就是:捕獲型事件和冒泡型事件

3. ev.stopPropagation();

注意舊ie的方法:ev.cancelBubble = true;

56、簡述一下Sass、Less,且說明區別?

他們是動態的樣式語言,是CSS預處理器,CSS上的一種抽象層。他們是一種特殊的語法/語言而編譯成CSS。

變量符不一樣,less是@,而Sass是$;

Sass支持條件語句,可以使用if{}else{},for{}循環等等。而Less不支持;

Sass是基於Ruby的,是在服務端處理的,而Less是需要引入less.js來處理Less代碼輸出Css到瀏覽器

57、關於javascript中apply()和call()方法的區別?

相同點:兩個方法產生的作用是完全一樣的

不同點:方法傳遞的參數不同

Object.call(this,obj1,obj2,obj3)

Object.apply(this,arguments)

apply()接收兩個參數,一個是函數運行的作用域(this),另一個是參數數組。

call()方法第一個參數與apply()方法相同,但傳遞給函數的參數必須列舉出來。

58、簡述一下JS中的閉包?

閉包用的多的兩個作用:讀取函數內部的變量值;讓這些變量值始終保存着(在內存中)。

同時需要注意的是:閉包慎用,不濫用,不亂用,由於函數內部的變量都被保存在內存中,會導致內存消耗大。

59、說說你對this的理解?

在JavaScript中,this通常指向的是我們正在執行的函數本身,或者是,指向該函數所屬的對象。

全局的this → 指向的是Window

函數中的this → 指向的是函數所在的對象

對象中的this → 指向其本身

60、分別闡述split(),slice(),splice(),join()?

join()用於把數組中的所有元素拼接起來放入一個字符串。所帶的參數為分割字符串的分隔符,默認是以逗號分開。歸屬於Array

split()即把字符串分離開,以數組方式存儲。歸屬於Stringstring

slice() 方法可從已有的數組中返回選定的元素。該方法並不會修改數組,而是返回一個子數組。如果想刪除數組中的一段元素,應該使用方法 Array.splice()

splice() 方法向/從數組中添加/刪除項目,然后返回被刪除的項目。返回的是含有被刪除的元素的數組。

61、事件委托是什么?

讓利用事件冒泡的原理,讓自己的所觸發的事件,讓他的父元素代替執行!

62、如何阻止事件冒泡和默認事件?

阻止瀏覽器的默認行為

window.event?window.event.returnValue=false:e.preventDefault();

停止事件冒泡

window.event?window.event.cancelBubble=true:e.stopPropagation();

原生JavaScript中,return false;只阻止默認行為,不阻止冒泡,jQuery中的return false;既阻止默認行為,又阻止冒泡

63、添加 刪除 替換 插入到某個接點的方法?

obj.appendChidl()

obj.removeChild()

obj.replaceChild()

obj.innersetBefore()

64、你用過require.js嗎?它有什么特性?

(1)實現js文件的異步加載,避免網頁失去響應;

(2)管理模塊之間的依賴性,便於代碼的編寫和維護。

65、談一下JS中的遞歸函數,並且用遞歸簡單實現階乘?

遞歸即是程序在執行過程中不斷調用自身的編程技巧,當然也必須要有一個明確的結束條件,不然就會陷入死循環。

66、請用正則表達式寫一個簡單的郵箱驗證。

/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

67、簡述一下你對web性能優化的方案?

    1、盡量減少 HTTP 請求

2、使用瀏覽器緩存

3、使用壓縮組件

4、圖片、JS的預載入

5、將腳本放在底部

6、將樣式文件放在頁面頂部

7、使用外部的JS和CSS

8、精簡代碼

68、在JS中有哪些會被隱式轉換為false

Undefined、null、關鍵字false、NaN、零、空字符串

69、定時器setInterval有一個有名函數fn1,setInterval(fn1,500)與setInterval(fn1(),500)有什么區別?

第一個是重復執行每500毫秒執行一次,后面一個只執行一次。

70、外部JS文件出現中文字符,會出現什么問題,怎么解決?

會出現亂碼,加charset=”GB2312”;

71、談談瀏覽器的內核,並且說一下什么是內核?

Trident (['traɪd(ə)nt])--IE,Gecko (['gekəʊ])--Firefox, Presto (['prestəʊ])--opera,webkit—谷歌和Safari

瀏覽器內核又可以分成兩部分:渲染引擎和 JS 引擎。它負責取得網頁的內容(HTML、XML、圖像等等)、整理訊息(例如加入 CSS 等),以及計算網頁的顯示方式,然后會輸出至顯示器或打印機。JS 引擎則是解析 Javascript 語言,執行 javascript 語言來實現網頁的動態效果。

72、JavaScript原型,原型鏈 ? 有什么特點?

*  原型對象也是普通的對象,是對象一個自帶隱式的 __proto__ 屬性,原型也有可能有自己的原型,如果一個原型對象的原型不為null的話,我們就稱之為原型鏈。

*  原型鏈是由一些用來繼承和共享屬性的對象組成的(有限的)對象鏈。

* JavaScript的數據對象有那些屬性值?

  writable:這個屬性的值是否可以改。

  configurable:這個屬性的配置是否可以刪除,修改。

  enumerable:這個屬性是否能在for…in循環中遍歷出來或在Object.keys中列舉出來。

  value:屬性值。

* 當我們需要一個屬性的時,Javascript引擎會先看當前對象中是否有這個屬性, 如果沒有的話,就會查找他的Prototype對象是否有這個屬性。

 function clone(proto) {

  function Dummy() { }

  Dummy.prototype = proto;

  Dummy.prototype.constructor = Dummy;

  return new Dummy(); //等價於Object.create(Person);

 }

        function object(old) {

         function F() {};

         F.prototype = old;

         return new F();

        }

    var newObj = object(oldObject);

73、寫一個通用的事件偵聽器函數

`// event(事件)工具集,來源:https://github.com/markyun

markyun.Event = {

    // 頁面加載完成后

    readyEvent : function(fn) {

        if (fn==null) {

            fn=document;

        }

        var oldonload = window.onload;

        if (typeof window.onload != 'function') {

            window.onload = fn;

        } else {

            window.onload = function() {

                oldonload();

                fn();

            };

        }

    },

    // 視能力分別使用dom0||dom2||IE方式 來綁定事件

    // 參數: 操作的元素,事件名稱 ,事件處理程序

    addEvent : function(element, type, handler) {

        if (element.addEventListener) {

            //事件類型、需要執行的函數、是否捕捉

            element.addEventListener(type, handler, false);

        } else if (element.attachEvent) {

            element.attachEvent('on' + type, function() {

                handler.call(element);

            });

        } else {

            element['on' + type] = handler;

        }

    },

    // 移除事件

    removeEvent : function(element, type, handler) {

        if (element.removeEnentListener) {

            element.removeEnentListener(type, handler, false);

        } else if (element.datachEvent) {

            element.detachEvent('on' + type, handler);

        } else {

            element['on' + type] = null;

        }

    },

    // 阻止事件 (主要是事件冒泡,因為IE不支持事件捕獲)

    stopPropagation : function(ev) {

        if (ev.stopPropagation) {

            ev.stopPropagation();

        } else {

            ev.cancelBubble = true;

        }

    },

    // 取消事件的默認行為

    preventDefault : function(event) {

        if (event.preventDefault) {

            event.preventDefault();

        } else {

            event.returnValue = false;

        }

    },

    // 獲取事件目標

    getTarget : function(event) {

        return event.target || event.srcElement;

    },

    // 獲取event對象的引用,取到事件的所有信息,確保隨時能使用event;

    getEvent : function(e) {

        var ev = e || window.event;

        if (!ev) {

            var c = this.getEvent.caller;

            while (c) {

                ev = c.arguments[0];

                if (ev && Event == ev.constructor) {

                    break;

                }

                c = c.caller;

            }

        }

        return ev;

    }

};

74、事件、IE與火狐的事件機制有什么區別? 如何阻止冒泡?

 1. 我們在網頁中的某個操作(有的操作對應多個事件)。例如:當我們點擊一個按鈕就會產生一個事件。是可以被 JavaScript 偵測到的行為。 

 2. 事件處理機制:IE是事件冒泡、火狐是 事件捕獲;

 3.  ev.stopPropagation();

75、什么是閉包(closure),為什么要用?

執行say667()后,say667()閉包內部變量會存在,而閉包內部函數的內部變量不會存在.使得Javascript的垃圾回收機制GC不會收回say667()所占用的資源,因為say667()的內部函數的執行需要依賴say667()中的變量。這是對閉包作用的非常直白的描述.

  function say667() {

    // Local variable that ends up within closure

    var num = 666;

    var sayAlert = function() { alert(num); }

    num++;

    return sayAlert;

}

 var sayAlert = say667();

 sayAlert()//執行結果應該彈出的667 

76、如何判斷一個對象是否屬於某個類?

使用instanceof (待完善)

if(a instanceof Person){

    alert('yes');

}

77、new操作符具體干了什么呢?

  1、創建一個空對象,並且 this 變量引用該對象,同時還繼承了該函數的原型。

  2、屬性和方法被加入到 this 引用的對象中。

  3、新創建的對象由 this 所引用,並且最后隱式的返回 this 。

    var obj  = {};

    obj.__proto__ = Base.prototype;

    Base.call(obj);

78、JSON 的了解

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它是基於JavaScript的一個子集。數據格式簡單, 易於讀寫, 占用帶寬小

{'age':'12', 'name':'back'}

79、js延遲加載的方式有哪些

defer和async、動態創建DOM方式(用得最多)、按需異步載入js

80、模塊化怎么做?

立即執行函數,不暴露私有成員

var module1 = (function(){

    var _count = 0;

    var m1 = function(){

      //...

    };

    var m2 = function(){

      //...

    };

    return {

      m1 : m1,

      m2 : m2

    };

  })();

81、異步加載的方式

  (1) defer,只支持IE

  (2) async:

  (3) 創建script,插入到DOM中,加載完畢后callBack

      documen.write和 innerHTML的區別

      document.write只能重繪整個頁面

      innerHTML可以重繪頁面的一部分

82、告訴我答案是多少?

(function(x){

    delete x;

    alert(x);

})(1+5);

函數參數無法delete刪除,delete只能刪除通過for in訪問的屬性。

當然,刪除失敗也不會報錯,所以代碼運行會彈出“1”。

83、JS中的call()和apply()方法的區別?

例子中用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,所以運行結果為:alert(4);

注意:js 中的函數其實是對象,函數名是對 Function 對象的引用。

function add(a,b){

    alert(a+b);

}

function sub(a,b){

    alert(a-b);

}

add.call(sub,3,1); 

84、Jquery與jQuery UI 有啥區別?

*jQuery是一個js庫,主要提供的功能是選擇器,屬性修改和事件綁定等等。

*jQuery UI則是在jQuery的基礎上,利用jQuery的擴展性,設計的插件。

提供了一些常用的界面元素,諸如對話框、拖動行為、改變大小行為等等

85、jquery 中如何將數組轉化為json字符串,然后再轉化回來?

jQuery中沒有提供這個功能,所以你需要先編寫兩個jQuery的擴展:

$.fn.stringifyArray = function(array) {

        return JSON.stringify(array)

    }

    $.fn.parseArray = function(array) {

        return JSON.parse(array)

    }

    然后調用:

    $("").stringifyArray(array)

86、JavaScript中的作用域與變量聲明提升?

其他部分

(HTTP、正則、優化、重構、響應式、移動端、團隊協作、SEO、UED、職業生涯)

    *基於Class的選擇性的性能相對於Id選擇器開銷很大,因為需遍歷所有DOM元素。

    *頻繁操作的DOM,先緩存起來再操作。用Jquery的鏈式調用更好。  

     比如:var str=$("a").attr("href");

    *for (var i = size; i < arr.length; i++) {}

     for 循環每一次循環都查找了數組 (arr) 的.length 屬性,在開始循環的時候設置一個變量來存儲這個數字,可以讓循環跑得更快:

     for (var i = size, length = arr.length; i < length; i++) {}

87、前端開發的優化問題(看雅虎14條性能優化原則)。

  (1) 減少http請求次數:CSS Sprites, JS、CSS源碼壓縮、圖片大小控制合適;網頁Gzip,CDN托管,data緩存 ,圖片服務器。

  (2) 前端模板 JS+數據,減少由於HTML標簽導致的帶寬浪費,前端用變量保存AJAX請求結果,每次操作本地變量,不用請求,減少請求次數

  (3) 用innerHTML代替DOM操作,減少DOM操作次數,優化javascript性能。

  (4) 當需要設置的樣式很多時設置className而不是直接操作style。

  (5) 少用全局變量、緩存DOM節點查找的結果。減少IO讀取操作。

  (6) 避免使用CSS Expression(css表達式)又稱Dynamic properties(動態屬性)。

  (7) 圖片預加載,將樣式表放在頂部,將腳本放在底部  加上時間戳。

  (8) 避免在頁面的主體布局中使用table,table要等其中的內容完全下載之后才會顯示出來,顯示比div+css布局慢。

88、http狀態碼有那些?分別代表是什么意思?

    100-199 用於指定客戶端應相應的某些動作。

    200-299 用於表示請求成功。

    300-399 用於已經移動的文件並且常被包含在定位頭信息中指定新的地址信息。

400-499 用於指出客戶端的錯誤。

400  語義有誤,當前請求無法被服務器理解。

401  當前請求需要用戶驗證

403  服務器已經理解請求,但是拒絕執行它。

500-599 用於支持服務器錯誤。

503 – 服務不可用

89、一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什么?(流程說的越詳細越好)

    要熟悉前后端的通信流程,最好把動態網站的背后細節也介紹一遍

七、流行框架

1、JQuery的源碼看過嗎?能不能簡單概況一下它的實現原理?

考察學習知識的態度,是否僅僅是停留在使用層面,要知其然知其所以然

2、jQuery.fn的init方法返回的this指的是什么對象?為什么要返回this?

this執行init構造函數自身,其實就是jQuery實例對象,返回this是為了實現jQuery的鏈式操作

3、 jquery中如何將數組轉化為json字符串,然后再轉化回來?

$.parseJSON('{"name":"John"}');

4、 jQuery 的屬性拷貝(extend)的實現原理是什么,如何實現深拷貝?

遞歸賦值

5、 jquery.extend 與 jquery.fn.extend的區別?

Jquery.extend用來擴展jQuery對象本身;jquery.fn.extend用來擴展jQuery實例

6、談一下Jquery中的bind(),live(),delegate(),on()的區別?

7、JQuery一個對象可以同時綁定多個事件,這是如何實現的?

可以同時綁定多個事件,低層實現原理是使用addEventListner與attachEvent兼容處理做事件注冊

10、    Jquery與jQuery UI有啥區別?

jQuery是操作dom的框架,jQueryUI是基於jQuery做的一個UI組件庫

11、    jQuery和Zepto的區別?各自的使用場景?

jQuery主要用於pc端,當然有對應的jQuerymobile用於移動端,zepto比jQuery更加小巧,主要用於移動端

12、    針對 jQuery 的優化方法?

優先使用ID選擇器

在class前使用tag(標簽名)

給選擇器一個上下文

慎用 .live()方法(應該說盡量不要使用)

使用data()方法存儲臨時變量

13、    Zepto的點透問題如何解決?

點透主要是由於兩個div重合,例如:一個div調用show(),一個div調用hide();這個時候當點擊上面的div的時候就會影響到下面的那個div;

解決辦法主要有2種:

1.github上有一個叫做fastclick的庫,它也能規避移動設備上click事件的延遲響應,https://github.com/ftlabs/fastclick

將它用script標簽引入頁面(該庫支持AMD,於是你也可以按照AMD規范,用諸如require.js的模塊加載器引入),並且在dom ready時初始化在body上,

2.根據分析,如果不引入其它類庫,也不想自己按照上述fastclcik的思路再開發一套東西,需要1.一個優先於下面的“divClickUnder”捕獲的事件;2.並且通過這個事件阻止掉默認行為(下面的“divClickUnder”對click事件的捕獲,在ios的safari,click的捕獲被認為和滾屏、點擊輸入框彈起鍵盤等一樣,是一種瀏覽器默認行為,即可以被event.preventDefault()阻止的行為)。

14、知道各種JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能講出他們各自的優點和缺點么?

知識面的寬度,流行框架要多多熟悉

15、Underscore 對哪些 JS 原生對象進行了擴展以及提供了哪些好用的函數方法?

Underscore的熟悉程度

16、使用過angular嗎?angular中的過濾器是干什么用的

在表達式中轉換數據<p>姓名為 {{ lastName | uppercase }}</p>

currency,是什么過濾器——格式化數字為貨幣格式,單位是$符。

 

八、移動APP開發

1、移動端最小觸控區域是多大?

移動端的點擊事件的有延遲,時間是多久,為什么會有? 怎么解決這個延時?(click 有 300ms 延遲,為了實現safari的雙擊事件的設計,瀏覽器要知道你是不是要雙擊操作。)

九、NodeJs

68.   對Node的優點和缺點提出了自己的看法:

*(優點)因為Node是基於事件驅動和無阻塞的,所以非常適合處理並發請求,

因此構建在Node上的代理服務器相比其他技術實現(如Ruby)的服務器表現要好得多。

此外,與Node代理服務器交互的客戶端代碼是由javascript語言編寫的,

因此客戶端和服務器端都用同一種語言編寫,這是非常美妙的事情。

*(缺點)Node是一個相對新的開源項目,所以不太穩定,它總是一直在變,

而且缺少足夠多的第三方庫支持。看起來,就像是Ruby/Rails當年的樣子。

69.   需求:實現一個頁面操作不會整頁刷新的網站,並且能在瀏覽器前進、后退時正確響應。給出你的技術實現方案?

至少給出自己的思路(url-hash,可以使用已有的一些框架history.js等)

70.   Node.js的適用場景?

1)、實時應用:如在線聊天,實時通知推送等等(如socket.io)

2)、分布式應用:通過高效的並行I/O使用已有的數據

3)、工具類應用:海量的工具,小到前端壓縮部署(如grunt),大到桌面圖形界面應用程序

4)、游戲類應用:游戲領域對實時和並發有很高的要求(如網易的pomelo框架)

5)、利用穩定接口提升Web渲染能力

6)、前后端編程語言環境統一:前端開發人員可以非常快速地切入到服務器端的開發(如著名的純Javascript全棧式MEAN架構)

71.   (如果會用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?

Nodejs相關概念的理解程度

72.   解釋一下 Backbone 的 MVC 實現方式?

流行的MVC架構模式

73.   什么是“前端路由”?什么時候適合使用“前端路由”? “前端路由”有哪些優點和缺點?

熟悉前后端通信相關知識

74.   對Node的優點和缺點提出了自己的看法?

優點:

1. 因為Node是基於事件驅動和無阻塞的,所以非常適合處理並發請求,因此構建在Node上的代理服務器相比其他技術實現(如Ruby)的服務器表現要好得多。

2. 與Node代理服務器交互的客戶端代碼是由javascript語言編寫的,因此客戶端和服務器端都用同一種語言編寫,這是非常美妙的事情。

缺點:

1. Node是一個相對新的開源項目,所以不太穩定,它總是一直在變。

2. 缺少足夠多的第三方庫支持。看起來,就像是Ruby/Rails當年的樣子(第三方庫現在已經很豐富了,所以這個缺點可以說不存在了)。

 

十、前端概括性問題

75.   常使用的庫有哪些?常用的前端開發工具?開發過什么應用或組件?

使用率較高的框架有jQuery、YUI、Prototype、Dojo、Ext.js、Mootools等。尤其是jQuery,超過91%。

輕量級框架有Modernizr、underscore.js、backbone.js、Raphael.js等。(理解這些框架的功能、性能、設計原理)

前端開發工具:Sublime Text 、Eclipse、Notepad、Firebug、HttpWatch、Yslow。

開發過的插件:城市選擇插件,汽車型號選擇插件、幻燈片插件。彈出層。(寫過開源程序,加載器,js引擎更好)

76.   對BFC規范的理解?

Formatting Context:指頁面中的一個渲染區域,並且擁有一套渲染規則,他決定了其子元素如何定位,以及與其他元素的相互關系和作用。

77.   99%的網站都需要被重構是那本書上寫的?

網站重構:應用web標准進行設計(第2版)

78.   WEB應用從服務器主動推送Data到客戶端有那些方式?

    html5 websoket

    WebSocket通過Flash

    XHR長時間連接

    XHR Multipart Streaming

    不可見的Iframe

<script>標簽的長時間連接(可跨域)

79.   加班的看法

加班就像借錢,原則應當是------救急不救窮

80.   平時如何管理你的項目,如何設計突發大規模並發架構?

先期團隊必須確定好全局樣式(globe.css),編碼模式(utf-8) 等

編寫習慣必須一致(例如都是采用繼承式的寫法,單樣式都寫成一行);

標注樣式編寫人,各模塊都及時標注(標注關鍵樣式調用的地方);

頁面進行標注(例如 頁面 模塊 開始和結束);

CSS跟HTML 分文件夾並行存放,命名都得統一(例如style.css)

JS 分文件夾存放 命民以該JS 功能為准英文翻譯;

圖片采用整合的 images.png png8 格式文件使用 盡量整合在一起使用方便將來的管理

81.   那些操作會造成內存泄漏?

內存泄漏指任何對象在您不再擁有或需要它之后仍然存在。

垃圾回收器定期掃描對象,並計算引用了每個對象的其他對象的數量。如果一個對象的引用數量為 0(沒有其他對象引用過該對象),或對該對象的惟一引用是循環的,那么該對象的內存即可回收。

setTimeout 的第一個參數使用字符串而非函數的話,會引發內存泄漏。

閉包、控制台日志、循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)

82.   你說你熱愛前端,那么應該WEB行業的發展很關注吧? 說說最近最流行的一些東西吧?

Node.js、Mongodb、npm、MVVM、MEAN、react、angularjs

83.   你有了解我們公司嗎?說說你的認識?

因為我想去阿里,所以我針對阿里的說

最羡慕就是在雙十一購物節,350.19億元,每分鍾支付79萬筆。海量數據,居然無一漏單、無一故障。太厲害了。

84.   移動端(比如:Android IOS)怎么做好用戶體驗?

融入自己的設計理念,注重用戶體驗,選擇合適的技術

85.   你所知道的頁面性能優化方法有那些?

壓縮、合並,減少請求,代碼層析優化。。。

86.   除了前端以外還了解什么其它技術么?你最最厲害的技能是什么?

知識面寬度,最好熟悉一些后台語言,比如php,展現出自己的技術兩點

87.   AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)規范區別?

88.   談談你認為怎樣做能使項目做的更好?

考慮問題的深入,不僅僅停留在完成任務上,要精益求精

89.   你對前端界面工程師這個職位是怎么樣理解的?它的前景會怎么樣?

表現出對前端的認同與興趣,關注相關技術前沿

90.   php中下面哪個函數可以打開一個文件,以對文件進行讀和寫操作?

A.fget();B.file_open();C.fopen();D.open_file();

91.   php中rmdir可以直接刪除文件夾嗎?該目錄必須是空的,而且要有相應的權限--來自api

A.任何文件夾都可以刪除           B.空文件夾可以刪除

C.有權限的任何文件夾都可以刪除   D.有權限的空文件夾可以刪除

92.   phpinset和empty的區別,舉例說明

1、empty函數

用途:檢測變量是否為空

判斷:如果 var 是非空或非零的值,則 empty() 返回 FALSE。換句話說,""、0、"0"、NULL、FALSE、array()、var $var; 以及沒有任何屬性的對象都將被認為是空的,如果 var 為空,則返回 TRUE。注意:empty() 只檢測變量,檢測任何非變量的東西都將導致解析錯誤。換句話說,后邊的語句將不會起作用;

2、isset函數

用途:檢測變量是否設置

判斷:檢測變量是否設置,並且不是 NULL。如果已經使用 unset() 釋放了一個變量之后,它將不再是 isset()。若使用 isset() 測試一個被設置成 NULL 的變量,將返回 FALSE。同時要注意的是一個NULL 字節("\0")並不等同於 PHP 的 NULL 常數。

93.   php中$_SERVER變量中如何得到當前執行腳本路勁

 

94.   寫一個php函數,要求兩個日期字符串的天數差,如2012-02-05~2012-03-06的日期差數

95.   一個衣櫃中放了許多雜亂的襯衫,如果讓你去整理一下,使得更容易找到你想要的衣服;你會怎么做?請寫出你的做法和思路?

96.   如何優化網頁加載速度?

   1.減少css,js文件數量及大小(減少重復性代碼,代碼重復利用),壓縮CSS和Js代碼

   2.圖片的大小

   3.把css樣式表放置頂部,把js放置頁面底部

   4.減少http請求數

   5.使用外部 Js 和 CSS

97.   工作流程,你怎么來實現頁面設計圖,你認為前端應該如何高質量完成工作?

熟悉相關設計規范,自己總結的一些經驗

98.   介紹項目經驗、合作開發、獨立開發。

團隊協作,個人能力。實踐經驗

99.   開發過程中遇到困難,如何解決。

考察解決問題的能力

100.            對前端界面工程師這個職位是怎么樣理解的?它的前景會怎么樣?

    前端是最貼近用戶的程序員,比后端、數據庫、產品經理、運營、安全都近。

    1、實現界面交互

    2、提升用戶體驗

    3、有了Node.js,前端可以實現服務端的一些事情

前端是最貼近用戶的程序員,前端的能力就是能讓產品從 90分進化到 100 分,甚至更好,

參與項目,快速高質量完成實現效果圖,精確到1px;

與團隊成員,UI設計,產品經理的溝通;

做好的頁面結構,頁面重構和用戶體驗;

處理hack,兼容、寫出優美的代碼格式;

針對服務器的優化、擁抱最新前端技術。

其它相關的加分項:

1. 都使用和了解過哪些編輯器?都使用和了解過哪些日常工具?

2. 都知道有哪些瀏覽器內核?開發過的項目都兼容哪些瀏覽器?

3. 瀑布流布局或者流式布局是否有了解

4. HTML5都有哪些新的API?

5. 都用過什么代碼調試工具?

6. 是否有接觸過或者了解過重構。

7.你遇到過比較難的技術問題是?你是如何解決的?

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM