31.事件、IE與火狐的事件機制有什么區(qū)別? 如何阻止冒泡?
1.我們在網頁中的某個操作(有的操作對應多個事件)。例如:當我們點擊一個按鈕就會產生一個事件。是可以被JavaScript偵測到的行為
2.事件處理機制:IE是事件冒泡、firefox同時支持兩種事件模型,也就是:捕獲型事件和冒泡型事件
3. ev.stopPropagation();
注意舊ie的方法:ev.cancelBubble = true;
32.Ajax是什么?Ajax的交互模型?同步和異步的區(qū)別?如何解決跨域問題?
Ajax是什么:
1.通過異步模式,提升了用戶體驗
2.優(yōu)化了瀏覽器和服務器之間的傳輸,減少不必要的數(shù)據往返,減少了帶寬占用
3. Ajax在客戶端運行,承擔了一部分本來由服務器承擔的工作,減少了大用戶量下的服務器負載。
Ajax的最大的特點:
1. Ajax可以實現(xiàn)動態(tài)不刷新(局部刷新)
2. readyState屬性 狀態(tài) 有5個可取值:0 =未初始化,1 =啟動,2 =發(fā)送,3 =接收,4 =完成
Ajax同步和異步的區(qū)別:
1.同步:提交請求->等待服務器處理->處理完畢返回,這個期間客戶端瀏覽器不能干任何事
2.異步:請求通過事件觸發(fā)->服務器處理(這是瀏覽器仍然可以作其他事情)->處理完畢
ajax.open方法中,第3個參數(shù)是設同步或者異步。
Ajax的缺點:
1. Ajax不支持瀏覽器back按鈕
2.安全問題Ajax暴露了與服務器交互的細節(jié)
3.對搜索引擎的支持比較弱
4.破壞了程序的異常機制
5.不容易調試
解決跨域問題:
1. jsonp
2. iframe
3. window.name、window.postMessage
4.服務器上設置代理頁面
33.js對象的深度克隆代碼實現(xiàn)
function clone(Obj) {
var buf;
if (Obj instanceof Array) {
buf = []; ?//創(chuàng)建一個空的數(shù)組
var i = Obj.length;
while (i--) {
buf[i] = clone(Obj[i]);
}
return buf;
} else if (Obj instanceof Object){
buf = {}; ?//創(chuàng)建一個空對象
for (var k in Obj) { ?//為這個對象添加新的屬性
buf[k] = clone(Obj[k]);
}
return buf;
}else{
return Obj;
}
}
34.對網站重構的理解
網站重構:在不改變外部行為的前提下,簡化結構、添加可讀性,而在網站前端保持一致的行為。也就是說是在不改變UI的情況下,對網站進行優(yōu)化,在擴展的同時保持一致的UI。
對于傳統(tǒng)的網站來說重構通常是:
1.表格(table)布局改為DIV + CSS
2.使網站前端兼容于現(xiàn)代瀏覽器(針對于不合規(guī)范的CSS、如對IE6有效的)
3.對于移動平臺的優(yōu)化
4.針對于SEO進行優(yōu)化
5.深層次的網站重構應該考慮的方面
6.減少代碼間的耦合
7.讓代碼保持彈性
8.嚴格按規(guī)范編寫代碼
9.設計可擴展的API
10.代替舊有的框架、語言(如VB)
11.增強用戶體驗
12.通常來說對于速度的優(yōu)化也包含在重構中
13.壓縮JS、CSS、image等前端資源(通常是由服務器來解決)
14.程序的性能優(yōu)化(如數(shù)據讀寫)
15.采用CDN來加速資源加載
16.對于JS DOM的優(yōu)化
17. HTTP服務器的文件緩存
35.如何獲取UA
function whatBrowser() {
document.Browser.Name.value=navigator.appName;
document.Browser.Version.value=navigator.appVersion;
document.Browser.Code.value=navigator.appCodeName;
document.Browser.Agent.value=navigator.userAgent;
}
36.javascript數(shù)組去重
方法一:遍歷數(shù)組,建立新數(shù)組,利用indexOf判斷是否存在于新數(shù)組中,不存在則push到新數(shù)組,最后返回新數(shù)組
1 function removeDuplicatedItem(ar) {
2 ????var ret = [];
4 ????for (var i = 0, j = ar.length; i < j; i++) {
5 ????????if (ret.indexOf(ar[i]) === -1) {
6 ????????????ret.push(ar[i]);
7 ????????}
8 ????}
10 ????return ret;
11 }
方法二:遍歷數(shù)組,利用object對象保存數(shù)組值,判斷數(shù)組值是否已經保存在object中,未保存則push到新數(shù)組并用object[arrayItem]=1的方式記錄保存
function removeDuplicatedItem2(ar) {
var tmp = {},
ret = [];
for (var i = 0, j = ar.length; i < j; i++) {
if (!tmp[ar[i]]) {
tmp[ar[i]] = 1;
ret.push(ar[i]);
}
}
return ret;
}
方法三:數(shù)組下標判斷法, 遍歷數(shù)組,利用indexOf判斷元素的值是否與當前索引相等,如相等則加入
functionremoveDuplicatedItem3(ar) {
varret = [];
ar.forEach(function(e, i, ar) {
if(ar.indexOf(e) === i) {
ret.push(e);
}
});
returnret;
}
方法四:數(shù)組先排序,然后比較倆數(shù)組一頭一尾進行去重
functionremoveDuplicatedItem4(ar) {
varret = [],
end;
ar.sort();
end = ar[0];
ret.push(ar[0]);
for(vari = 1; i < ar.length; i++) {
if(ar[i] != end) {
ret.push(ar[i]);
end = ar[i];
}
}
returnret;
}
37.HTTP狀態(tài)碼
100 Continue繼續(xù),一般在發(fā)送post請求時,已發(fā)送了http header之后服務端將返回此信息,表示確認,之后發(fā)送具體參數(shù)信息
200 OK正常返回信息
201 Created請求成功并且服務器創(chuàng)建了新的資源
202 Accepted服務器已接受請求,但尚未處理
301 Moved Permanently請求的網頁已永久移動到新位置
302 Found臨時性重定向
303 See Other臨時性重定向,且總是使用GET請求新的URI
304 Not Modified自從上次請求后,請求的網頁未修改過
400 Bad Request服務器無法理解請求的格式,客戶端不應當嘗試再次使用相同的內容發(fā)起請求
401 Unauthorized請求未授權
403 Forbidden禁止訪問
404 Not Found找不到如何與URI相匹配的資源
500 Internal Server Error最常見的服務器端錯誤
503 Service Unavailable服務器端暫時無法處理請求(可能是過載或維護)
38.cache-control
網頁的緩存是由HTTP消息頭中的“Cache-control”來控制的,常見的取值有private、no-cache、max-age、must-revalidate等,默認為private。
Expires頭部字段提供一個日期和時間,響應在該日期和時間后被認為失效。允許客戶端在這個時間之前不去檢查(發(fā)請求),等同max-age的效果。但是如果同時存在,則被Cache-Control的max-age覆蓋。
Expires = "Expires" ":" HTTP-date
例如:
Expires: Thu, 01 Dec 1994 16:00:00 GMT(必須是GMT格式)
如果把它設置為-1,則表示立即過期
Expires和max-age都可以用來指定文檔的過期時間,但是二者有一些細微差別
1. Expires在HTTP/1.0中已經定義,Cache-Control:max-age在HTTP/1.1中才有定義,為了向下兼容,僅使用max-age不夠
2. Expires指定一個絕對的過期時間(GMT格式),這么做會導致至少2個問題:
2.1客戶端和服務器時間不同步導致Expires的配置出現(xiàn)問題。
2.2很容易在配置后忘記具體的過期時間,導致過期來臨出現(xiàn)浪涌現(xiàn)象
3. max-age指定的是從文檔被訪問后的存活時間,這個時間是個相對值(比如:3600s),相對的是文檔第一次被請求時服務器記錄的Request_time(請求時間)
4. Expires指定的時間可以是相對文件的最后訪問時間(Atime)或者修改時間(MTime),而max-age相對對的是文檔的請求時間(Atime)
5.如果值為no-cache,那么每次都會訪問服務器。如果值為max-age,則在過期之前不會重復訪問服務器。
39.javascript操作獲取和設置cookie
//創(chuàng)建cookie
function setCookie(name, value, expires, path, domain, secure) {
var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value);
if (expires instanceof Date) {
cookieText += '; expires=' + expires;
}
if (path) {
cookieText += '; expires=' + expires;
}
if (domain) {
cookieText += '; domain=' + domain;
}
if (secure) {
cookieText += '; secure';
}
document.cookie = cookieText;
}
//獲取cookie
function getCookie(name) {
var cookieName = encodeURIComponent(name) + '=';
var cookieStart = document.cookie.indexOf(cookieName);
var cookieValue = null;
if (cookieStart > -1) {
var cookieEnd = document.cookie.indexOf(';', cookieStart);
if (cookieEnd == -1) {
cookieEnd = document.cookie.length;
}
cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
}
return cookieValue;
}
//刪除cookie
function unsetCookie(name) {
document.cookie = name + "= ; expires=" + new Date(0);
}
ps:在我搜集和整理面試題的時候發(fā)現(xiàn),有些內容我越來越能理解和接受,甚至明白是怎么回事,而且那些曾經感覺模棱兩可的東西 此刻越發(fā)清晰了,者應該就是學習過程中不斷刺激記憶的結果。