// 1、條件Hack <!--[if IE]> <style> .test{color:red;} </style> <![endif]--> // 2、屬性Hack .test{ color:#090/9; /* For IE8+ */ *color:#f00; /* For IE7 and earlier */ _color:#ff0; /* For IE6 and earlier */ } // 3、選擇符Hack * html .test{color:#090;} /* For IE6 and earlier */ * + html .test{color:#ff0;} /* For IE7 */ 6、簡述同步和異步的區別
同步是阻塞模式,異步是非阻塞模式。同步就是指一個進程在執行某個請求的時候,若該請求需要一段時間才能返回信息,那么這個進程將會一直等待下去,直到收到返回信息才繼續執行下去;異步是指進程不需要一直等下去,而是繼續執行下面的操作,不管其他進程的狀態。當有消息返回時系統會通知進程進行處理,這樣可以提高執行的效率。
7、px和em的區別
px和em都是長度單位,區別是,px的值是固定的,指定是多少就是多少,計算比較容易。em得值不是固定的,并且em會繼承父級元素的字體大小。瀏覽器的默認字體高都是16px。所以未經調整的瀏覽器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em
8、什么叫優雅降級和漸進增強?
漸進增強 PRogressive enhancement:針對低版本瀏覽器進行構建頁面,保證最基本的功能,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗。
優雅降級 graceful degradation:一開始就構建完整的功能,然后再針對低版本瀏覽器進行兼容。
區別:
a. 優雅降級是從復雜的現狀開始,并試圖減少用戶體驗的供給
b. 漸進增強則是從一個非?;A的,能夠起作用的版本開始,并不斷擴充,以適應未來環境的需要
c. 降級(功能衰減)意味著往回看;而漸進增強則意味著朝前看,同時保證其根基處于安全地帶
9、瀏覽器的內核分別是什么?
IE: trident內核Firefox:gecko內核Safari:webkit內核Opera:以前是presto內核,Opera現已改用Google Chrome的Blink內核Chrome:Blink(基于webkit,Google與Opera Software共同開發)
1、怎樣添加、移除、移動、復制、創建和查找節點?
1)創建新節點createDocumentFragment() //創建一個DOM片段createElement() //創建一個具體的元素createTextNode() //創建一個文本節點
2)添加、移除、替換、插入appendChild() //添加removeChild() //移除replaceChild() //替換insertBefore() //插入
3)查找getElementsByTagName() //通過標簽名稱getElementsByName() //通過元素的Name屬性的值getElementById() //通過元素Id,唯一性
2、實現一個函數clone,可以對Javascript中的5種主要的數據類型(包括Number、String、Object、Array、Boolean)進行值復制。
/** * 對象克隆 * 支持基本數據類型及對象 * 遞歸方法 */function clone(obj) { var o; switch (typeof obj) { case "undefined": break; case "string": o = obj + ""; break; case "number": o = obj - 0; break; case "boolean": o = obj; break; case "object": // object 分為兩種情況 對象(Object)或數組(Array) if (obj === null) { o = null; } else { if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") { o = []; for (var i = 0; i < obj.length; i++) { o.push(clone(obj[i])); } } else { o = {}; for (var k in obj) { o[k] = clone(obj[k]); } } } break; default: o = obj; break; } return o;}3、如何消除一個數組里面重復的元素?
// 方法一:var arr1 =[1,2,2,2,3,3,3,4,5,6], arr2 = [];for(var i = 0,len = arr1.length; i< len; i++){ if(arr2.indexOf(arr1[i]) < 0){ arr2.push(arr1[i]); }}document.write(arr2); // 1,2,3,4,5,64、想實現一個對頁面某個節點的拖曳?如何做?(使用原生JS)。
5、在Javascript中什么是偽數組?如何將偽數組轉化為標準數組?
偽數組(類數組):無法直接調用數組方法或期望length屬性有什么特殊的行為,但仍可以對真正數組遍歷方法來遍歷它們。典型的是函數的argument參數,還有像調用getElementsByTagName,document.childNodes之類的,它們都返回NodeList對象都屬于偽數組??梢允褂肁rray.prototype.slice.call(fakeArray)將數組轉化為真正的Array對象。
function log(){ var args = Array.prototype.slice.call(arguments); //為了使用unshift數組方法,將argument轉化為真正的數組 args.unshift('(app)'); console.log.apply(console, args);};6、Javascript中callee和caller的作用?
caller是返回一個對函數的引用,該函數調用了當前函數;
callee是返回正在被執行的function函數,也就是所指定的function對象的正文。
7、請描述一下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僅僅是為了在本地“存儲”數據而生。
8、手寫數組快速排序
關于快排算法的詳細說明,可以參考阮一峰老 關于快排算法的詳細說明,可以參考阮一峰老師的文章快速排序 "快速排序"的思想很簡單,整個排序過程只需要三步: (1)在數據集之中,選擇一個元素作為"基準"(pivot)。 (2)所有小于"基準"的元素,都移到"基準"的左邊;所有大于"基準"的元素,都移到"基準"的右邊。 (3)對"基準"左邊和右邊的兩個子集,不斷重復第一步和第二步,直到所有子集只剩下一個元素為止。