1、第一個為字母,后面是字母數(shù)字下劃線總長度為5-20 正則:
?/^[a-zA-Z]\w{4-19}/
2、怎么規(guī)避javascript多人并發(fā)函數(shù)重命名問題:
根據(jù)不同的開發(fā)人員實(shí)現(xiàn)的功能,在函數(shù)名加前綴每個開發(fā)人員都把自己的函數(shù)封裝到類中,然后調(diào)用的時候即使函數(shù)名相同,但是因為是要類.函數(shù)名來調(diào)用,所以也減少了重復(fù)的可能性
3、javascript如何實(shí)現(xiàn)面向?qū)ο笾械睦^承
六中繼承方式....更新中。。。
4、javascript如何檢測一個變量是一個String類型的?請寫出函數(shù)實(shí)現(xiàn)。
function a(obj){? return typeof(obj)=="string";}alert(a(123));alert(a("abc"));
5、javascript有幾種數(shù)據(jù)類型基本數(shù)據(jù)類型:
Number(數(shù)字)String(字符串) null nudefined(未定義) boolean(布爾)引用數(shù)據(jù)類型:function(函數(shù)) object(對象)[Array]數(shù)組 Data(時間)RegExp正則 ...
6、AJAX是什么?同步和異步的區(qū)別?如何解決跨域問題?
AJAX的全稱是Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進(jìn)行更新。
同步的意思是當(dāng)JS代碼加載到當(dāng)前AJAX的時候會把頁面里所有的代碼停止加載,頁面出現(xiàn)假死狀態(tài),當(dāng)這個AJAX執(zhí)行完畢后才會繼續(xù)運(yùn)行其他代碼頁面假死狀態(tài)解除。而異步則這個AJAX代碼運(yùn)行中的時候其他代碼一樣可以運(yùn)行。
JQuery的AJAX解決跨域問題:
$(document).ready(function() {
? ? ? ? ? ? ?var ?url='http://localhost:8080/WorkGroupManagment/open/getGroupById"? ? ? +"?id=1&callback=?';
? ? ? ? ? ? $.ajax({
? ? ? ? ? ? ? ? ? ? url:url,dataType:'jsonp',processData:false,type:'get',success:function(data) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?alert(data.name);
? ? ? ? ? ? ? ? ? ?}, error:function(XMLHttpRequest, textStatus, errorThrown) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?alert(XMLHttpRequest.status);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?alert(XMLHttpRequest.readyState);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? alert(textStatus);
? ? ? ? ? ? ? ? ? ? ? }
});
});
JSONP也叫填充式JSON,是應(yīng)用JSON的一種新方法,只不過是被包含在函數(shù)調(diào)用中的JSON(如:callback({"name", "chenjun"});)。JSONP由兩部分組成:回調(diào)函數(shù)和數(shù)據(jù)?;卣{(diào)函數(shù)是當(dāng)響應(yīng)到來時應(yīng)該在頁面中調(diào)用的函數(shù),而數(shù)據(jù)就是傳入回調(diào)函數(shù)中的JSON數(shù)據(jù)跨域原理:利用標(biāo)簽沒有跨域限制,實(shí)現(xiàn)跨域目的
JSONP優(yōu)缺點(diǎn):
優(yōu)點(diǎn):它不像XMLHttpRequest對象實(shí)現(xiàn)的Ajax請求那樣受到同源策略的限制;它的兼容性更好,在更加古老的瀏覽器中都可以運(yùn)行;并且在請求完畢后可以通過調(diào)用callback的方式回傳結(jié)果
缺點(diǎn):它只支持GET請求而不支持POST等其它類型的HTTP請求;它只支持跨域HTTP請求這種情況,不能解決不同域的兩個頁面之間如何進(jìn)行JS調(diào)用的問題
CORS
CORS(Cross-Origin Resource Sharing)跨域資源共享,定義了必須在訪問跨域資源時,瀏覽器與服務(wù)器應(yīng)該如何溝通。
跨域原理:CORS背后的基本思想就是使用自定義的HTTP頭部讓瀏覽器與服務(wù)器進(jìn)行溝通,從而決定請求或響應(yīng)是應(yīng)該成功還是失敗
瀏覽器支持情況:
Chrome 3+ ? ? ?Firefox 3.5+ ? ??Opera 12+ ? ? ??Safari 4+ ? ? ? ??Internet Explorer 8+
Chrome,F(xiàn)irefox,Opera和Safari都使用XMLHttpRequest2對象。 Internet Explorer使用了類似的XDomainRequest對象,其工作原理和XMLHttpRequest大致相同,但增加了額外的安全預(yù)防措施。
CORS優(yōu)缺點(diǎn):
優(yōu)點(diǎn):支持所有類型的HTTP請求;使用普通的XMLHttpRequest發(fā)起請求和獲得數(shù)據(jù),擁有良好的出錯處理
缺點(diǎn):老式瀏覽器不支持
7、給出異步加載js方案,不少于兩種
8、document.write和 innerHTML的區(qū)別?
document.write是直接將內(nèi)容寫入頁面的內(nèi)容劉,會導(dǎo)致頁面全部重繪,innerHTML將內(nèi)容寫入某個DOM節(jié)點(diǎn),不會導(dǎo)致頁面全部重繪
9、如何添加HTML元素的事件,有幾種方法?
1通過HTML元素屬性2通過對象屬性3.通過W3C監(jiān)聽方式(標(biāo)準(zhǔn)方式)或者IE專屬的中間模型添加事件
10、多瀏覽器檢測通過什么?
window.navigator.userAgent這個查詢當(dāng)前瀏覽器型號版本但是window.userAgent也可以查詢到不知道有沒有區(qū)別
11、如何控制網(wǎng)頁在網(wǎng)絡(luò)傳輸過程中的數(shù)據(jù)量?
我一般這樣處理:
服務(wù)器發(fā)送數(shù)據(jù)塊前發(fā)送數(shù)據(jù)塊長度,然后發(fā)送數(shù)據(jù)
客戶端先讀取這個長度,然后按這個長度接收數(shù)據(jù)。
什么面向?qū)ο?/b>:
mvc這種框架有什么好處?
會讓項目可維護(hù)性高,所有涉及界面的代碼都在視圖(view)中,所有涉及核心邏輯的代碼都在模型(Model)里面。URL路由之類的代碼都在控制器(Controller)中
預(yù)解釋:
1、在預(yù)解釋的時候,不管條件是否成立,都要進(jìn)行預(yù)解釋
2、預(yù)解釋的時候只對等號左邊的進(jìn)行預(yù)解釋,右邊的是值,是不進(jìn)行預(yù)解釋的
3、函數(shù)體中return下面的代碼雖然不在執(zhí)行了,但是需要進(jìn)行預(yù)解釋;return后面的返回的是值,是不進(jìn)行預(yù)解釋的;
4、自執(zhí)行函數(shù)的function是不進(jìn)行預(yù)解釋的
5、在預(yù)解釋階段,如果當(dāng)前的這個名字已經(jīng)聲明過了,那么下面在遇到就不會在從新的聲明了,但是需要重新的賦值;
in:用來檢測某一個屬性名是否屬于這個對象的
this:
->我們一般只研究函數(shù)執(zhí)行的時候里面的this
->this是誰和當(dāng)前的函數(shù)在哪執(zhí)行和在哪定義沒有半毛錢的關(guān)系
1)看函數(shù)執(zhí)行的時候,函數(shù)名之前是否有".",有的話"."前面是誰this就是誰,沒有的話this就是window
2)自執(zhí)行函數(shù)中的this永遠(yuǎn)是window
3)給元素的某一個事件綁定方法,當(dāng)事件觸發(fā)的時候,方法中的this是當(dāng)前元素本身
4)在構(gòu)造函數(shù)模式中,我們的this.xxx=xxx中的this是當(dāng)前的類的一個實(shí)例
5)call和apply強(qiáng)制改變this的指向->以上所有的this情況在遇到call/apply的時候都不好使,都已強(qiáng)制改變的為主
obj.fn.call(1);//this->1
一般情況下,我們執(zhí)行call方法第一個傳遞的參數(shù)值是誰,那么fn中的this就是誰
[在非嚴(yán)格模式下]
第一個參數(shù)沒有傳遞值、傳遞的是null、傳遞的是undefined fn中的this都是window
[嚴(yán)格模式下]
第一個參數(shù)傳遞的是誰this就是誰,傳遞null/undefined,fn中的this都是對應(yīng)的null/undefined,不傳遞值默認(rèn)也是undefined
6)定時器的this永遠(yuǎn)是window
瀏覽器的內(nèi)存分為兩類:
堆內(nèi)存:引用數(shù)據(jù)類型開辟的那個存儲空間(用來存儲對象的鍵值對和函數(shù)的代碼字符串的) ->存儲倉庫
棧內(nèi)存:就是我們的作用域(全局作用域/私有的作用域)->執(zhí)行環(huán)境
[棧內(nèi)存的釋放]
全局作用域,在瀏覽器加載頁面的時候形成,只有在瀏覽器關(guān)閉頁面的時候才能釋放->"全局作用域?qū)儆诓讳N毀的作用域"
立即銷毀的私有作用域:一般情況下,函數(shù)執(zhí)行完成后,當(dāng)前形成的這個私有的作用域,就沒有用了,為了提高性能,瀏覽器會自動的把它釋放掉
不銷毀的私有作用域:函數(shù)執(zhí)行形成一個私有的作用域A,但是A中的某一部分內(nèi)容被A以外的東西(變量)給占用了,那么A這個作用域就不能銷毀了
一個函數(shù)執(zhí)行,形成一個私有的作用域A,A中返回一個引用的數(shù)據(jù)類型值(函數(shù)、對象、數(shù)組...),并且被外面的一個變量接收了,此時A這個作用域就不能釋放了
閉包:
閉包是一種"機(jī)制":函數(shù)執(zhí)行形成私有的作用域(不管銷毀還是不銷毀),保護(hù)了里面的私有變量不受外界的干擾
單例模式:
起到了一個分組的作用->把描述同一件事物的屬性和方法放在同一個"命名空間"下,避免了全局變量過多使用造成的沖突
每一個對象都是一個單獨(dú)的實(shí)例,里面的屬性都是自己私有的屬性,不同實(shí)例之間互不影響
JS中的異步編程:定時器、所有的事件綁定都是異步編程、回調(diào)函數(shù)也可以理解為異步編程、AJAX中也可以設(shè)置異步編程