答:jQuery強(qiáng)調(diào)的理念是寫的少,做的多(write less,do more)。其主要特點(diǎn)有:輕量級(jí)、強(qiáng)大的選擇器、漂亮的DOM操作封裝、可靠的事件處理機(jī)制、完善的Ajax處理、出色的瀏覽器兼容性、鏈?zhǔn)讲僮鞣绞?、豐富的插件支持、開源產(chǎn)品。
2.eval是做什么的?
答:eval功能是把對(duì)應(yīng)的字符串解析成JS代碼并運(yùn)行;但不安全,非常耗性能。
3.null與undefined的區(qū)別?
答:Undefined類型只有一個(gè)值,即undefined,當(dāng)聲明的變量還未被初始化時(shí),變量的默認(rèn)值為undefined。Null類型也只有一個(gè)值,即null,null用來表示尚未存在的對(duì)象,常用來表示函數(shù)企圖返回一個(gè)不存在的對(duì)象。
4.談?wù)剬?duì)this對(duì)象的理解。
答:this是js的一個(gè)關(guān)鍵字,隨著函數(shù)使用場(chǎng)合不同,this的值會(huì)發(fā)生變化。但是有一個(gè)總原則,那就是this指的是調(diào)用函數(shù)的那個(gè)對(duì)象。
5.use strict是什么意思?
答:表示代碼標(biāo)志為“嚴(yán)格模式”,則其中運(yùn)行的所有代碼都必然是嚴(yán)格模式下的。如果在語法檢測(cè)時(shí)發(fā)現(xiàn)語法問題,則整個(gè)代碼塊失效,并導(dǎo)致一個(gè)語法異常。如果在運(yùn)行期出現(xiàn)了違反嚴(yán)格模式的代碼,則拋出執(zhí)行異常。
6.簡(jiǎn)述new操作符的功能。
答:(1)創(chuàng)建一個(gè)空對(duì)象,使用this變量引用該對(duì)象,同時(shí)還繼承了該函數(shù)的原型 (2)屬性和方法被加入到this引用的對(duì)象中。(3)新創(chuàng)建的對(duì)象由this所引用,并且最后隱式的返回this。
7.描述typeof關(guān)鍵字的功能。
答:typeof可用來判斷一個(gè)變量是否為空或是什么類型的變量。typeof一般只能返回如下幾個(gè)結(jié)果:number、boolean、string、function、object、undefined。
8.描述instanceof關(guān)鍵字的功能。
答:instanceof可用來判斷一個(gè)變量是否為空或是什么類型的變量。如果想判斷一個(gè)變量是否某個(gè)對(duì)象的實(shí)例建議使用instanceof關(guān)鍵字。
9.簡(jiǎn)述hasOwnProperty函數(shù)的功能。
答:hasOwnProperty函數(shù)是用來判斷一個(gè)對(duì)象是否有你給出名稱的屬性或?qū)ο?。不過需要注意的是,此方法無法檢查該對(duì)象的原型鏈中是否具有該屬性,該屬性必須是對(duì)象本身的一個(gè)成員。
10.簡(jiǎn)述一下isPrototypeOf函數(shù)的功能。
答:isPrototypeOf函數(shù)是用來判斷要檢查其原型鏈的對(duì)象是否存在于指定對(duì)象實(shí)例中,是則返回true,否則返回false。
11.談?wù)剬?duì)JSON的了解。
答:JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式。其是基于JavaScript的一個(gè)子集,具有數(shù)據(jù)格式簡(jiǎn)單,易于讀寫,占用空間小的特點(diǎn)。
12.Ajax是什么?
答:AJAX即“Asynchronous Javascript+XML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX可以使網(wǎng)頁實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下,對(duì)網(wǎng)頁的某部分進(jìn)行更新。
13.同步請(qǐng)求和異步請(qǐng)求的區(qū)別?
答: ? 同步:提交請(qǐng)求→等待服務(wù)器處理→處理完畢返回,這個(gè)期間客戶端瀏覽器不能干任何事。 ? 異步:請(qǐng)求通過事件觸發(fā)→服務(wù)器處理(這是瀏覽器仍然可以作其他事情)→處理完畢。
14.jQuery如何解決跨域問題?
答:借助JSONP這個(gè)非官方的協(xié)議,其允許在服務(wù)器端集成script tags返回至客戶端,通過callback的形式實(shí)現(xiàn)跨域訪問JSONP即JSON with Padding。如果要進(jìn)行跨域請(qǐng)求,我們可以通過使用html的script標(biāo)記來進(jìn)行跨域請(qǐng)求,并在響應(yīng)中返回要執(zhí)行的script代碼,其中可以直接使用JSON傳遞javascript對(duì)象。
15.異步加載的方式有哪些?
答: (1)defer,只支持IE;(2)async;(3)創(chuàng)建script,插入到DOM;
16.如何編寫高性能的jQuery代碼?
答:定義jQuery變量的時(shí)候添加var關(guān)鍵字;DOM操作請(qǐng)務(wù)必記住緩存(cache);盡量使用鏈?zhǔn)讲僮?;盡量把一些代碼都整合到一起;避免使用全局類型的選擇器;盡量使用.on方法,因?yàn)槠渌魏畏椒ǘ际亲罱K使用.on方法來實(shí)現(xiàn)的;盡量使用最新版本的jQuery框架類庫。
17.jQuery與jQuery UI有啥區(qū)別?
答:(1)jQuery是一個(gè)js庫,主要提供的功能是選擇器,屬性修改和事件綁定等等。 (2)jQuery UI則是在jQuery的基礎(chǔ)上,利用jQuery的擴(kuò)展性,設(shè)計(jì)的插件。提供了一些常用的界面元素,諸如對(duì)話框、拖動(dòng)行為、改變大小行為等等。
18.描述基于class的選擇器與基于id選擇器在性能上的區(qū)別。
答:基于class的選擇性的性能相對(duì)于基于id選擇器開銷很大,因?yàn)槠湫枰闅v所有DOM元素。
19.jQuery鏈?zhǔn)秸{(diào)用的最大優(yōu)點(diǎn)是什么?
答:避免頻繁操作的DOM,鏈?zhǔn)秸{(diào)用可以實(shí)現(xiàn)先緩存再操作。
20.一句話說明內(nèi)存泄漏的定義。
答:內(nèi)存泄漏指任何對(duì)象在您不再擁有或需要它之后仍然存在。
21.那些操作會(huì)造成內(nèi)存泄漏?
答: ? 給DOM對(duì)象添加的屬性是一個(gè)對(duì)象的引用。 ? DOM對(duì)象與JS對(duì)象相互引用。 ? 給DOM對(duì)象用attachEvent綁定事件。 ? 從外到內(nèi)執(zhí)行appendChild,這時(shí)即使調(diào)用removeChild也無法釋放。 ? 反復(fù)重寫同一個(gè)屬性會(huì)造成內(nèi)存大量占用。
22.描述垃圾回收器的功能。
答:垃圾回收器定期掃描對(duì)象,并計(jì)算引用了每個(gè)對(duì)象的其他對(duì)象的數(shù)量。如果一個(gè)對(duì)象的引用數(shù)量為0(沒有其他對(duì)象引用過該對(duì)象),或?qū)υ搶?duì)象的惟一引用是循環(huán)的,那么該對(duì)象的內(nèi)存即可回收。
23.documen.write和innerHTML的區(qū)別?
答:document.write只能重繪整個(gè)頁面,innerHTML可以重繪頁面的一部分。
24.jQuery框架的源碼看過嗎?能不能簡(jiǎn)單說一下它的實(shí)現(xiàn)原理?
答:jQuery框架通過改變javascript編碼方式來創(chuàng)建了全新的編程理念。譬如關(guān)于jQuery聲明的流程:先查找(創(chuàng)建)jQuery對(duì)象,然后調(diào)用jQuery對(duì)象的方法完成我們需要完成的工作。jQuery就是以這種可以說是最簡(jiǎn)單的編碼邏輯來改變javascript編碼方式的,這個(gè)流程就是jQuery的編碼邏輯核心。
25.jQuery中如何將對(duì)象轉(zhuǎn)化為json字符串,然后再轉(zhuǎn)化回來?
答:可以通過JSON.stringify方法把一個(gè)對(duì)象轉(zhuǎn)換成json字符串,再通過JSON.parse方法把一個(gè)json字符串解析成對(duì)象。
26.描述一下.get()、[]和.eq()方法的區(qū)別。
答:eq返回原生jQuery對(duì)象,截取某些el元素生成jQuery新對(duì)象;get和[]返回的都是原生的DOM對(duì)象,原理一致;get和[]區(qū)別是get是通過jQuery對(duì)象的方法獲取,[]是根據(jù)jQuery是一個(gè)數(shù)組對(duì)象獲取。
27.描述一下context的概念。
答:context就是限定查找的范圍,context必須是一個(gè)DOM元素,context底層還是用了.find()方法來實(shí)現(xiàn)的。
28.描述一下.delegate()和.live()方法的區(qū)別。
答:delegate方法指定了委托對(duì)象,live方法委托給了jQuery的context,1.9版本以后用on方法代替了。
29.描述一下.attr()和.prop()方法的區(qū)別。
答:.attr()方法是操作屬性節(jié)點(diǎn),.prop()方法是操作獲取到的對(duì)應(yīng)js對(duì)象的屬性。在遇到要獲取或設(shè)置checked、selected、readonly和disabled等屬性時(shí),用prop方法顯然更好。.prop()方法更高效,因?yàn)?attr()方法要訪問DOM。
30.jQuery中的load方法一般怎么用的?
答:load方法一般在載入遠(yuǎn)程HTML代碼并插入到DOM中的時(shí)候用,通常用來從Web服務(wù)器上獲取靜態(tài)的數(shù)據(jù)文件。如果要傳遞參數(shù)的話,可以使用$.get()或$.post()方法。