數(shù)組去重
indexOf()方法可返回某個(gè)指定的字符串值在字符串中首次出現(xiàn)的位置吏垮。
新建一新數(shù)組,遍歷傳入數(shù)組罐旗,值不在新數(shù)組就push進(jìn)該新數(shù)組中
```
function unip(array){
var team=[]
for(var i=0 ; i
if(team.indexOf(array[i])<0){
team.push(array[i]);
}
}
return team
}
var arr=[1,2,3,4,5,6,7,7,7,8,8,9]
console.log(unip(arr));
```
ES6里新添加了兩個(gè)很好用的東西膳汪,set和Array.from。
set是一種新的數(shù)據(jù)結(jié)構(gòu)九秀,它可以接收一個(gè)數(shù)組或者是類數(shù)組對(duì)象遗嗽,自動(dòng)去重其中的重復(fù)項(xiàng)目。
Array.from的作用鼓蜒,就是可以把類數(shù)組對(duì)象痹换、可迭代對(duì)象轉(zhuǎn)化為數(shù)組
```
var arr1=[1,2,3,4,4,5,5,6,7,7]
var arr2= new Set(arr1)
var arr3= Array.from(arr2)
console.log(arr3)
```
JavaScript中如何檢測(cè)一個(gè)變量是一個(gè)String類型征字?請(qǐng)寫出函數(shù)實(shí)現(xiàn)
```
typeof(obj) === "string"
typeof 37 === 'number';
typeof function(){} === 'function';
```
請(qǐng)用js去除字符串空格
1)去除所有空格: str = str.replace(/\s*/g,"");
?2)str.trim()局限性:無法去除中間的空格
var str = " ??xiao ?ming ??";
var str2 = str.trim();
console.log(str2); ??//xiao ?ming
str.trimLeft(),str.trimRight()分別用于去除字符串左右空格
?3)使用jquery,$.trim(str)方法
你如何獲取瀏覽器URL中查詢字符串中的參數(shù)娇豫?
split()方法用于把一個(gè)字符串分割成字符串?dāng)?shù)組匙姜。
function showWindowHref(){
????var s
????var args = sHref.split('?');
????if(args[0] == sHref){
????????return "";
????}
????var arr = args[1].split('&');
????var obj = {};
????for(var i = 0;i< arr.length;i++){
????????var arg = arr[i].split('=');
????????obj[arg[0]] = arg[1];
????}
????return obj;
}
var href = showWindowHref(); // obj
console.log(href); // xiaoming
js?字符串操作函數(shù)
concat() –將兩個(gè)或多個(gè)字符的文本組合起來,返回一個(gè)新的字符串冯痢。
indexOf() –返回字符串中一個(gè)子串第一處出現(xiàn)的索引氮昧。如果沒有匹配項(xiàng)展融,返回 -1 弄跌。
charAt() –返回指定位置的字符扭屁。
lastIndexOf() –返回字符串中一個(gè)子串最后一處出現(xiàn)的索引猜惋,如果沒有匹配項(xiàng)尽狠,返回 -1 晰骑。
match() –檢查一個(gè)字符串是否匹配一個(gè)正則表達(dá)式胀滚。
substr()函數(shù) -- 返回從string的startPos位置离陶,長(zhǎng)度為length的字符串
substring() –返回字符串的一個(gè)子串澎迎。傳入?yún)?shù)是起始位置和結(jié)束位置庐杨。
slice() –提取字符串的一部分,并返回一個(gè)新字符串夹供。
replace() –用來查找匹配一個(gè)正則表達(dá)式的字符串灵份,然后使用新字符串代替匹配的字符串。
search() –執(zhí)行一個(gè)正則表達(dá)式匹配查找哮洽。如果查找成功填渠,返回字符串中匹配的索引值。否則返回 -1 鸟辅。
split() –通過將字符串劃分成子串氛什,將一個(gè)字符串做成一個(gè)字符串?dāng)?shù)組。
length –返回字符串的長(zhǎng)度匪凉,所謂字符串的長(zhǎng)度是指其包含的字符的個(gè)數(shù)枪眉。
toLowerCase() –將整個(gè)字符串轉(zhuǎn)成小寫字母。
toUpperCase() –將整個(gè)字符串轉(zhuǎn)成大寫字母
怎樣添加再层、移除贸铜、移動(dòng)、復(fù)制聂受、創(chuàng)建和查找節(jié)點(diǎn)蒿秦?
1)創(chuàng)建新節(jié)
createDocumentFragment() //創(chuàng)建一個(gè)DOM片段
createElement() //創(chuàng)建一個(gè)具體的元素
createTextNode() //創(chuàng)建一個(gè)文本節(jié)點(diǎn)
2)添加、移除蛋济、替換渤早、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替換
insertBefore() //插入
3)查找
getElementsByTagName() //通過標(biāo)簽名稱
getElementsByName() //通過元素的Name屬性的值
getElementById() //通過元素Id,唯一性
js判斷字符是否為空的方法
function isEmpty(obj){
????if(typeof obj == "undefined" || obj == null || obj == ""){
????????return true;
????}else{
????????return false;
????}
}
如何理解閉包瘫俊?
由于在Javascript語言中鹊杖,只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,因此可以把閉包簡(jiǎn)單理解成"定義在一個(gè)函數(shù)內(nèi)部的函數(shù)"扛芽。
所以骂蓖,在本質(zhì)上,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來的一座橋梁川尖。
它的最大用處有兩個(gè)登下,一個(gè)是前面提到的可以讀取函數(shù)內(nèi)部的變量,另一個(gè)就是讓這些變量的值始終保持在內(nèi)存中叮喳。
根據(jù)作用域鏈的規(guī)則被芳,底層作用域沒有聲明的變量,會(huì)向上一級(jí)找馍悟,找到就返回畔濒,沒找到就一直找,直到window的變量锣咒,沒有就返回undefined侵状。這里明顯count 是函數(shù)內(nèi)部的flag2 的那個(gè)count 。
var?count=10; ??//全局作用域 標(biāo)記為flag1function add(){
????var?count=0; ???//函數(shù)全局作用域 標(biāo)記為flag2
????return?function(){
????????count+=1; ??//函數(shù)的內(nèi)部作用域????????alert(count);
????}
}var?s =?add()
s();//輸出1
s();//輸出2
變量的作用域
要理解閉包毅整,首先必須理解Javascript特殊的變量作用域趣兄。
變量的作用域分類:全局變量和局部變量。
特點(diǎn):
1悼嫉、函數(shù)內(nèi)部可以讀取函數(shù)外部的全局變量艇潭;在函數(shù)外部無法讀取函數(shù)內(nèi)的局部變量。
2戏蔑、函數(shù)內(nèi)部聲明變量的時(shí)候蹋凝,一定要使用var命令。如果不用的話辛臊,你實(shí)際上聲明了一個(gè)全局變量仙粱!
使用閉包的注意點(diǎn)
1)濫用閉包,會(huì)造成內(nèi)存泄漏:由于閉包會(huì)使得函數(shù)中的變量都被保存在內(nèi)存中彻舰,內(nèi)存消耗很大伐割,所以不能濫用閉包,否則會(huì)造成網(wǎng)頁(yè)的性能問題刃唤,在IE中可能導(dǎo)致內(nèi)存泄露隔心。解決方法是,在退出函數(shù)之前尚胞,將不使用的局部變量全部刪除硬霍。
2)會(huì)改變父函數(shù)內(nèi)部變量的值。所以笼裳,如果你把父函數(shù)當(dāng)作對(duì)象(object)使用唯卖,把閉包當(dāng)作它的公用方法(Public Method)粱玲,把內(nèi)部變量當(dāng)作它的私有屬性(private value),這時(shí)一定要小心拜轨,不要隨便改變父函數(shù)內(nèi)部變量的值抽减。
什么是跨域?
由于瀏覽器同源策略橄碾,凡是發(fā)送請(qǐng)求url的協(xié)議卵沉、域名、端口三者之間任意一與當(dāng)前頁(yè)面地址不同即為跨域法牲。存在跨域的情況:
網(wǎng)絡(luò)協(xié)議不同史汗,如http協(xié)議訪問https協(xié)議。
端口不同拒垃,如80端口訪問8080端口停撞。
域名不同,如qianduanblog.com訪問baidu.com恶复。
子域名不同怜森,如abc.qianduanblog.com訪問def.qianduanblog.com。
域名和域名對(duì)應(yīng)ip,如www.a.com訪問20.205.28.90.
跨域請(qǐng)求資源的方法:
porxy代理
定義和用法:proxy代理用于將請(qǐng)求發(fā)送給后臺(tái)服務(wù)器谤牡,通過服務(wù)器來發(fā)送請(qǐng)求副硅,然后將請(qǐng)求的結(jié)果傳遞給前端。
實(shí)現(xiàn)方法:通過nginx代理翅萤;
注意點(diǎn):1恐疲、如果你代理的是https協(xié)議的請(qǐng)求,那么你的proxy首先需要信任該證書(尤其是自定義證書)或者忽略證書檢查套么,否則你的請(qǐng)求無法成功培己。
CORS【Cross-Origin Resource Sharing】
定義和用法:是現(xiàn)代瀏覽器支持跨域資源請(qǐng)求的一種最常用的方式。
使用方法:一般需要后端人員在處理請(qǐng)求數(shù)據(jù)的時(shí)候胚泌,添加允許跨域的相關(guān)操作
jsonp
定義和用法:通過動(dòng)態(tài)插入一個(gè)script標(biāo)簽省咨。瀏覽器對(duì)script的資源引用沒有同源限制,同時(shí)資源加載到頁(yè)面后會(huì)立即執(zhí)行(沒有阻塞的情況下)玷室。
特點(diǎn):通過情況下零蓉,通過動(dòng)態(tài)創(chuàng)建script來讀取他域的動(dòng)態(tài)資源,獲取的數(shù)據(jù)一般為json格式
缺點(diǎn):1穷缤、這種方式無法發(fā)送post請(qǐng)求(這里)
[if !supportLists]2敌蜂、[endif]另外要確定jsonp的請(qǐng)求是否失敗并不容易,大多數(shù)框架的實(shí)現(xiàn)都是結(jié)合超時(shí)時(shí)間來判定津肛。
垃圾回收機(jī)制
垃圾收集器會(huì)定期(周期性)找出那些不在繼續(xù)使用的變量章喉,然后釋放其內(nèi)存。但是這個(gè)過程不是實(shí)時(shí)的,因?yàn)槠溟_銷比較大秸脱,所以垃圾回收器會(huì)按照固定的時(shí)間間隔周期性的執(zhí)行落包。
開發(fā)過程中遇到的內(nèi)存泄露情況,如何解決的撞反?
1妥色、定義和用法:
內(nèi)存泄露是指一塊被分配的內(nèi)存既不能使用,又不能回收遏片,直到瀏覽器進(jìn)程結(jié)束。C#和Java等語言采用了自動(dòng)垃圾回收方法管理內(nèi)存撮竿,幾乎不會(huì)發(fā)生內(nèi)存泄露吮便。我們知道,瀏覽器中也是采用自動(dòng)垃圾回收方法管理內(nèi)存幢踏,但由于瀏覽器垃圾回收方法有bug髓需,會(huì)產(chǎn)生內(nèi)存泄露。
2房蝉、內(nèi)存泄露的幾種情況:
(1)僚匆、當(dāng)頁(yè)面中元素被移除或替換時(shí),若元素綁定的事件仍沒被移除搭幻,在IE中不會(huì)作出恰當(dāng)處理咧擂,此時(shí)要先手工移除事件,不然會(huì)存在內(nèi)存泄露檀蹋。
????var?btn = document.getElementById("myBtn");
????btn.onclick =?function(){
????btn.onclick = null;
????????document.getElementById("myDiv").innerHTML = "Processing...";
????}
[if !supportLists](2)?[endif]松申、由于是函數(shù)內(nèi)定義函數(shù),并且內(nèi)部函數(shù)--事件回調(diào)的引用外暴了俯逾,形成了閉包贸桶。閉包可以維持函數(shù)內(nèi)局部變量,使其得不到釋放桌肴。
function bindEvent(){
????var?obj=document.createElement("XXX");
????obj.onclick=function(){
?????????//Even if it's a empty function????}
????obj=null;
}
JavaScript數(shù)組(Array)對(duì)象
Array對(duì)象屬性
constructor返回對(duì)創(chuàng)建此對(duì)象的數(shù)組函數(shù)的引用皇筛。
length設(shè)置或返回?cái)?shù)組中元素的數(shù)目。
prototype使您有能力向?qū)ο筇砑訉傩院头椒ā?/p>
Array對(duì)象方法
concat()連接兩個(gè)或更多的數(shù)組坠七,并返回結(jié)果水醋。
join()把數(shù)組的所有元素放入一個(gè)字符串。元素通過指定的分隔符進(jìn)行分隔灼捂。
pop()刪除并返回?cái)?shù)組的最后一個(gè)元素离例。 ?
shift()刪除并返回?cái)?shù)組的第一個(gè)元素
push()向數(shù)組的末尾添加一個(gè)或更多元素,并返回新的長(zhǎng)度悉稠。
unshift()向數(shù)組的開頭添加一個(gè)或更多元素宫蛆,并返回新的長(zhǎng)度。
reverse()顛倒數(shù)組中元素的順序。
slice()從某個(gè)已有的數(shù)組返回選定的元素
sort()對(duì)數(shù)組的元素進(jìn)行排序
splice()刪除元素耀盗,并向數(shù)組添加新元素想虎。
toSource()返回該對(duì)象的源代碼。
toString()把數(shù)組轉(zhuǎn)換為字符串叛拷,并返回結(jié)果舌厨。
toLocaleString()把數(shù)組轉(zhuǎn)換為本地?cái)?shù)組,并返回結(jié)果忿薇。
valueOf()返回?cái)?shù)組對(duì)象的原始值
jQuery庫(kù)中的 $() 是什么裙椭?
$()函數(shù)是 jQuery() 函數(shù)的別稱。$() 函數(shù)用于將任何對(duì)象包裹成 jQuery 對(duì)象署浩,接著你就被允許調(diào)用定義在 jQuery 對(duì)象上的多個(gè)不同方法揉燃。你可以將一個(gè)選擇器字符串傳入 $() 函數(shù),它會(huì)返回一個(gè)包含所有匹配的 DOM 元素?cái)?shù)組的 jQuery 對(duì)象筋栋。
如何找到所有HTML select標(biāo)簽的選中項(xiàng)炊汤?
$('[name=selectname] :selected')
$(this)和 this 關(guān)鍵字在 jQuery 中有何不同?
$(this)返回一個(gè) jQuery 對(duì)象弊攘,你可以對(duì)它調(diào)用多個(gè) jQuery 方法抢腐,比如用 text() 獲取文本,用val() 獲取值等等襟交。
而this代表當(dāng)前元素迈倍,它是 JavaScript 關(guān)鍵詞中的一個(gè),表示上下文中的當(dāng)前 DOM 元素婿着。你不能對(duì)它調(diào)用 jQuery 方法授瘦,直到它被 $() 函數(shù)包裹,例如 $(this)竟宋。
jquery怎么移除標(biāo)簽onclick屬性提完?
jQuery屬性操作 - attr() 方法
獲得a標(biāo)簽的onclick屬性: $("a").attr("onclick")
刪除onclick屬性:$("a").removeAttr("onclick");
設(shè)置onclick屬性:$("a").attr("onclick","test();");
jquery中addClass,removeClass,toggleClass的使用。
$(selector).addClass(class):為每個(gè)匹配的元素添加指定的類名
$(selector).removeClass(class):從所有匹配的元素中刪除全部或者指定的類丘侠,刪除class中某個(gè)值徒欣;
$(selector).toggleClass(class):如果存在(不存在)就刪除(添加)一個(gè)類
$(selector).removeAttr(class);刪除class這個(gè)屬性;
JQuery有幾種選擇器?
(1)蜗字、基本選擇器:#id打肝,class,element,*;
(2)、層次選擇器:parent > child挪捕,prev + next 粗梭,prev ~ siblings
(3)、基本過濾器選擇器::first级零,:last 断医,:not ,:even ,:odd 鉴嗤,:eq 斩启,:gt ,:lt
(4)醉锅、內(nèi)容過濾器選擇器: :contains 兔簇,:empty ,:has 硬耍,:parent
(5)垄琐、可見性過濾器選擇器::hidden ,:visible
(6)默垄、屬性過濾器選擇器:[attribute] 此虑,[attribute=value] ,[attribute!=value] 口锭,[attribute^=value] ,[attribute$=value] 介杆,[attribute*=value]
(7)鹃操、子元素過濾器選擇器::nth-child ,:first-child 春哨,:last-child 荆隘,:only-child
(8)、表單選擇器: :input 赴背,:text 椰拒,:password ,:radio 凰荚,:checkbox 燃观,:submit 等;
(9)便瑟、表單過濾器選擇器::enabled 缆毁,:disabled ,:checked 到涂,:selected
$(document).ready()方法和window.onload有什么區(qū)別脊框?
(1)、window.onload方法是在網(wǎng)頁(yè)中所有的元素(包括元素的所有關(guān)聯(lián)文件)完全加載到瀏覽器后才執(zhí)行的践啄。
(2)浇雹、$(document).ready()?方法可以在DOM載入就緒時(shí)就對(duì)其進(jìn)行操縱,并調(diào)用執(zhí)行綁定的函數(shù)屿讽。
如何用jQuery禁用瀏覽器的前進(jìn)后退按鈕昭灵?
$(document).ready(function() {
window.history.forward(1);
//OR window.history.forward(-1); });
jquery中$.get()提交和$.post()提交有區(qū)別嗎?
相同點(diǎn):都是異步請(qǐng)求的方式來獲取服務(wù)端的數(shù)據(jù);
異同點(diǎn):
1虎锚、請(qǐng)求方式不同:$.get()?方法使用GET方法來進(jìn)行異步請(qǐng)求的硫痰。$.post()?方法使用POST方法來進(jìn)行異步請(qǐng)求的。
2窜护、參數(shù)傳遞方式不同:get請(qǐng)求會(huì)將參數(shù)跟在URL后進(jìn)行傳遞效斑,而POST請(qǐng)求則是作為HTTP消息的實(shí)體內(nèi)容發(fā)送給Web服務(wù)器的,這種傳遞是對(duì)用戶不可見的柱徙。
3缓屠、數(shù)據(jù)傳輸大小不同:get方式傳輸?shù)臄?shù)據(jù)大小不能超過2KB?而POST要大的多
4、安全問題:?GET?方式請(qǐng)求的數(shù)據(jù)會(huì)被瀏覽器緩存起來护侮,因此有安全問題敌完。
寫出一個(gè)簡(jiǎn)單的$.ajax()的請(qǐng)求方式?
$.ajax({
????url:'http://www.baidu.com',
????type:'POST',
????data:data,
????cache:true,
????headers:{},
beforeSend:function(){},
????success:function(){},
????error:function(){},
????complete:function(){}
});
什么是盒子模型羊初?
在網(wǎng)頁(yè)中滨溉,一個(gè)元素占有空間的大小由幾個(gè)部分構(gòu)成,其中包括元素的內(nèi)容(content)长赞,元素的內(nèi)邊距(padding)晦攒,元素的邊框(border),元素的外邊距(margin)四個(gè)部分得哆。這四個(gè)部分占有的空間中脯颜,有的部分可以顯示相應(yīng)的內(nèi)容,而有的部分只用來分隔相鄰的區(qū)域或區(qū)域贩据。4個(gè)部分一起構(gòu)成了css中元素的盒模型栋操。
行內(nèi)元素有哪些?塊級(jí)元素有哪些饱亮?空(void)元素有那些矾芙?
行內(nèi)元素:a、b近尚、span蠕啄、img、input戈锻、strong歼跟、select、label格遭、em哈街、button、textarea塊級(jí)元素:div拒迅、ul骚秦、li她倘、dl、dt作箍、dd硬梁、p、h1-h6胞得、blockquote空元素:即系沒有內(nèi)容的HTML元素荧止,例如:br、meta阶剑、hr跃巡、link、input牧愁、img
簡(jiǎn)述一下src與href的區(qū)別
href是指向網(wǎng)絡(luò)資源所在位置素邪,建立和當(dāng)前元素(錨點(diǎn))或當(dāng)前文檔(鏈接)之間的鏈接,用于超鏈接猪半。
src是指向外部資源的位置兔朦,指向的內(nèi)容將會(huì)嵌入到文檔中當(dāng)前標(biāo)簽所在位置;在請(qǐng)求src資源時(shí)會(huì)將其指向的資源下載并應(yīng)用到文檔內(nèi)磨确,例如js腳本烘绽,img圖片和frame等元素。
簡(jiǎn)述同步和異步的區(qū)別
同步是阻塞模式俐填,異步是非阻塞模式。同步就是指一個(gè)進(jìn)程在執(zhí)行某個(gè)請(qǐng)求的時(shí)候翔忽,若該請(qǐng)求需要一段時(shí)間才能返回信息英融,那么這個(gè)進(jìn)程將會(huì)一直等待下去,直到收到返回信息才繼續(xù)執(zhí)行下去歇式;異步是指進(jìn)程不需要一直等下去驶悟,而是繼續(xù)執(zhí)行下面的操作,不管其他進(jìn)程的狀態(tài)材失。當(dāng)有消息返回時(shí)系統(tǒng)會(huì)通知進(jìn)程進(jìn)行處理痕鳍,這樣可以提高執(zhí)行的效率。
px和em的區(qū)別
相同點(diǎn):px和em都是長(zhǎng)度單位龙巨;
異同點(diǎn):px的值是固定的笼呆,指定是多少就是多少,計(jì)算比較容易旨别。em得值不是固定的诗赌,并且em會(huì)繼承父級(jí)元素的字體大小。瀏覽器的默認(rèn)字體高都是16px秸弛。所以未經(jīng)調(diào)整的瀏覽器都符合: 1em=16px铭若。那么12px=0.75em, 10px=0.625em洪碳。
瀏覽器的內(nèi)核分別是什么?
IE: trident內(nèi)核
Firefox:gecko內(nèi)核
Safari:webkit內(nèi)核
Opera:以前是presto內(nèi)核,Opera現(xiàn)已改用Google Chrome的Blink內(nèi)核
Chrome:Blink(基于webkit叼屠,Google與Opera Software共同開發(fā))
什么叫優(yōu)雅降級(jí)和漸進(jìn)增強(qiáng)瞳腌?
漸進(jìn)增強(qiáng)progressive enhancement:
針對(duì)低版本瀏覽器進(jìn)行構(gòu)建頁(yè)面,保證最基本的功能镜雨,然后再針對(duì)高級(jí)瀏覽器進(jìn)行效果嫂侍、交互等改進(jìn)和追加功能達(dá)到更好的用戶體驗(yàn)。
優(yōu)雅降級(jí)graceful degradation:
一開始就構(gòu)建完整的功能冷离,然后再針對(duì)低版本瀏覽器進(jìn)行兼容吵冒。
區(qū)別:
a.優(yōu)雅降級(jí)是從復(fù)雜的現(xiàn)狀開始,并試圖減少用戶體驗(yàn)的供給
b.漸進(jìn)增強(qiáng)則是從一個(gè)非澄靼基礎(chǔ)的痹栖,能夠起作用的版本開始,并不斷擴(kuò)充瞭空,以適應(yīng)未來環(huán)境的需要
c.降級(jí)(功能衰減)意味著往回看揪阿;而漸進(jìn)增強(qiáng)則意味著朝前看,同時(shí)保證其根基處于安全地帶
sessionStorage咆畏、localStorage 和?cookie 之間的區(qū)別
共同點(diǎn):用于瀏覽器端存儲(chǔ)的緩存數(shù)據(jù)
不同點(diǎn):
(1)南捂、存儲(chǔ)內(nèi)容是否發(fā)送到服務(wù)器端:當(dāng)設(shè)置了Cookie后,數(shù)據(jù)會(huì)發(fā)送到服務(wù)器端旧找,造成一定的寬帶浪費(fèi)溺健; web storage,會(huì)將數(shù)據(jù)保存到本地,不會(huì)造成寬帶浪費(fèi)钮蛛;
(2)鞭缭、數(shù)據(jù)存儲(chǔ)大小不同:Cookie數(shù)據(jù)不能超過4K,適用于會(huì)話標(biāo)識(shí);web storage數(shù)據(jù)存儲(chǔ)可以達(dá)到5M;
(3)魏颓、數(shù)據(jù)存儲(chǔ)的有效期限不同:cookie只在設(shè)置了Cookid過期時(shí)間之前一直有效岭辣,即使關(guān)閉窗口或者瀏覽器;sessionStorage,僅在關(guān)閉瀏覽器之前有效甸饱;localStorage,數(shù)據(jù)存儲(chǔ)永久有效沦童;
(4)、作用域不同:cookie和localStorage是在同源同窗口中都是共享的叹话;sessionStorage不在不同的瀏覽器窗口中共享偷遗,即使是同一個(gè)頁(yè)面;
Ajax的優(yōu)缺點(diǎn)及工作原理渣刷?
定義和用法:
AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)鹦肿。Ajax 是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)。Ajax 是一種在無需重新加載整個(gè)網(wǎng)頁(yè)的情況下辅柴,能夠更新部分網(wǎng)頁(yè)的技術(shù)箩溃。
傳統(tǒng)的網(wǎng)頁(yè)(不使用Ajax)如果需要更新內(nèi)容瞭吃,必須重載整個(gè)網(wǎng)頁(yè)頁(yè)面。
優(yōu)點(diǎn):
1.減輕服務(wù)器的負(fù)擔(dān),按需取數(shù)據(jù),最大程度的減少冗余請(qǐng)求
2.局部刷新頁(yè)面,減少用戶心理和實(shí)際的等待時(shí)間,帶來更好的用戶體驗(yàn)
3.基于xml標(biāo)準(zhǔn)化,并被廣泛支持,不需安裝插件等,進(jìn)一步促進(jìn)頁(yè)面和數(shù)據(jù)的分離
缺點(diǎn):
1.AJAX大量的使用了javascript和ajax引擎,這些取決于瀏覽器的支持.在編寫的時(shí)候考慮對(duì)瀏覽器的兼容性.
2.AJAX只是局部刷新,所以頁(yè)面的后退按鈕是沒有用的.
3.對(duì)流媒體還有移動(dòng)設(shè)備的支持不是太好等
AJAX的工作原理:
1.創(chuàng)建ajax對(duì)象(XMLHttpRequest/ActiveXObject(Microsoft.XMLHttp))
2.判斷數(shù)據(jù)傳輸方式(GET/POST)
3.打開鏈接 open()
4.發(fā)送 send()
5.當(dāng)ajax對(duì)象完成第四步(onreadystatechange)數(shù)據(jù)接收完成涣旨,判斷http響應(yīng)狀態(tài)(status)200-300之間或者304(緩存)執(zhí)行回調(diào)函數(shù)
請(qǐng)指出document load和document ready的區(qū)別歪架?
共同點(diǎn):這兩種事件都代表的是頁(yè)面文檔加載時(shí)觸發(fā)。
異同點(diǎn):
ready事件的觸發(fā)霹陡,表示文檔結(jié)構(gòu)已經(jīng)加載完成(不包含圖片等非文字媒體文件)和蚪。
onload事件的觸發(fā),表示頁(yè)面包含圖片等文件在內(nèi)的所有元素都加載完成
寫一個(gè)function烹棉,清除字符串前后的空格攒霹。(兼容所有瀏覽器)
function trim(str) {
????if?(str && typeof?str === "string") {
????????return?str.replace(/(^\s*)|(\s*)$/g,""); //去除前后空白符????}
}
使用正則表達(dá)式驗(yàn)證郵箱格式
?var?reg = /^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/;
?var?email = "example@qq.com";
?console.log(reg.test(email)); ?// true ?
規(guī)避javascript多人開發(fā)函數(shù)重名問題
命名空間
封閉空間
js模塊化mvc(數(shù)據(jù)層、表現(xiàn)層浆洗、控制層)
seajs
變量轉(zhuǎn)換成對(duì)象的屬性
對(duì)象化
請(qǐng)說出三種減低頁(yè)面加載時(shí)間的方法
壓縮css催束、js文件
合并js、css文件伏社,減少http請(qǐng)求
外部js抠刺、css文件放在最底下
減少dom操作,盡可能用變量替代不必要的dom操作
你所了解到的Web攻擊技術(shù)
[if !supportLists](1)[endif]XSS(Cross-Site Scripting摘昌,跨站腳本攻擊):指通過存在安全漏洞的Web網(wǎng)站注冊(cè)用戶的瀏覽器內(nèi)運(yùn)行非法的HTML標(biāo)簽或者JavaScript進(jìn)行的一種攻擊速妖。(2)SQL注入攻擊(3)CSRF(Cross-Site Request Forgeries,跨站點(diǎn)請(qǐng)求偽造):指攻擊者通過設(shè)置好的陷阱聪黎,強(qiáng)制對(duì)已完成的認(rèn)證用戶進(jìn)行非預(yù)期的個(gè)人信息或設(shè)定信息等某些狀態(tài)更新罕容。
web前端開發(fā),如何提高頁(yè)面性能優(yōu)化稿饰?
內(nèi)容方面:
1.減少 HTTP 請(qǐng)求 (Make Fewer HTTP Requests)
2.減少 DOM 元素?cái)?shù)量 (Reduce the Number of DOM Elements)
3.使得 Ajax 可緩存 (Make Ajax Cacheable)
針對(duì)CSS:
1.把 CSS 放到代碼頁(yè)上端 (Put Stylesheets at the Top)
2.從頁(yè)面中剝離 JavaScript 與 CSS (Make JavaScript and CSS External)
3.精簡(jiǎn) JavaScript 與 CSS (Minify JavaScript and CSS)
4.避免 CSS 表達(dá)式 (Avoid CSS Expressions)
針對(duì)JavaScript:
1.腳本放到 HTML 代碼頁(yè)底部 (Put Scripts at the Bottom)
2.從頁(yè)面中剝離 JavaScript 與 CSS (Make JavaScript and CSS External)
3.精簡(jiǎn) JavaScript 與 CSS (Minify JavaScript and CSS)
4.移除重復(fù)腳本 (Remove Duplicate Scripts)
面向圖片(Image):
1.優(yōu)化圖片
2不要在 HTML 中使用縮放圖片
3使用恰當(dāng)?shù)膱D片格式
4使用 CSS Sprites 技巧對(duì)圖片優(yōu)化
瀏覽器是如何渲染頁(yè)面的杀赢?
渲染的流程如下:
1.解析HTML文件,創(chuàng)建DOM樹湘纵。
自上而下,遇到任何樣式(link滤淳、style)與腳本(script)都會(huì)阻塞(外部樣式不阻塞后續(xù)外部腳本的加載)梧喷。
2.解析CSS。優(yōu)先級(jí):瀏覽器默認(rèn)設(shè)置<用戶設(shè)置<外部樣式<內(nèi)聯(lián)樣式
3.將CSS與DOM合并脖咐,構(gòu)建渲染樹(Render Tree)
4.布局和繪制铺敌,重繪(repaint)和重排(reflow)