列舉三種強(qiáng)制類(lèi)型轉(zhuǎn)換和兩種隱式類(lèi)型轉(zhuǎn)換
強(qiáng)制(parseInt,parseFloat,number)
隱式(== – ===)
強(qiáng)制類(lèi)型轉(zhuǎn)換
Number(參數(shù))把任何類(lèi)型轉(zhuǎn)換成數(shù)值類(lèi)型
parseInt(參數(shù)1,參數(shù)2)將字符串轉(zhuǎn)換成整數(shù)
parseFloat()將字符串轉(zhuǎn)換成浮點(diǎn)數(shù)字
string(參數(shù)):可以將任何類(lèi)型轉(zhuǎn)換成字符串
Boolean()可以將任何類(lèi)型的值轉(zhuǎn)換成布爾值
隱式類(lèi)型轉(zhuǎn)換
(1).四則運(yùn)算
加法運(yùn)算符+是雙目運(yùn)算符,只要其中一個(gè)是string類(lèi)型,表達(dá)式的值便是一個(gè)String。
對(duì)于其他的四則運(yùn)算,只有其中一個(gè)是Number類(lèi)型,表達(dá)式的便是一個(gè)Number。
對(duì)于非法字符的情況通常會(huì)返回NaN:'1'*'a' ? ?// => NaN,這是因?yàn)閜arseInt(a)值為NaN,1*NaN還是NaN
(2).判斷語(yǔ)句
判斷語(yǔ)句中的判斷條件需要是 Boolean類(lèi)型,所以條件表達(dá)式會(huì)被隱式轉(zhuǎn)換為Boolean。其轉(zhuǎn)換規(guī)則則同Boolean的構(gòu)造函數(shù)。比如:
var obj = {};if(obj){
while(obj);
}
(3).Native代碼調(diào)用
JavaScript宿主環(huán)境都會(huì)提供大量的對(duì)象,它們往往不少通過(guò)JavaScript來(lái)實(shí)現(xiàn)的。JavaScript給這些函數(shù)傳入的參數(shù)也會(huì)進(jìn)行隱式轉(zhuǎn)換。例如BOM提供的alert方法接受String類(lèi)型的參數(shù):alert({a:1}); ?//=>[object Object]
JavaScript typeof返回哪些數(shù)據(jù)類(lèi)型
? ? ?undefined
string
boolean
number
symbol(ES6)
Object
Function
window.onload 和document.ready的區(qū)別
document.ready和window.onload都是在都是在頁(yè)面加載完執(zhí)行的函數(shù),大多數(shù)情況下差別不大,但也是有區(qū)別的。
document.ready是DOM結(jié)構(gòu)繪制完畢后就執(zhí)行,不必等到加載完畢。 意思就是DOM樹(shù)加載完畢,就執(zhí)行,不必等到頁(yè)面中圖片或其他外部文件都加載完畢。并且可以寫(xiě)多個(gè).ready。
window.onload:是頁(yè)面所有元素都加載完畢,包括圖片等所有元素。只能執(zhí)行一次。
怎樣添加、移除、復(fù)制、創(chuàng)建、查找節(jié)點(diǎn)
創(chuàng)建新節(jié)點(diǎn)
?????? createDocumentFragment()????//創(chuàng)建一個(gè)DOM片段
?????? createElement()???//創(chuàng)建一個(gè)具體的元素
?????? createTextNode()???//創(chuàng)建一個(gè)文本節(jié)點(diǎn)
添加、移除、替換、插入
?????? ?appendChild()
??????? removeChild()
??????? replaceChild()
??????? insertBefore()
查找
?????? getElementsByTagName()????//通過(guò)標(biāo)簽名稱(chēng)
??????? getElementsByName()????//通過(guò)元素的Name屬性的值
??????? getElementById()????//通過(guò)元素Id,唯一性
在JavaScript中什么是偽數(shù)組?如何將偽數(shù)組轉(zhuǎn)化為標(biāo)準(zhǔn)數(shù)組
偽數(shù)組:具有l(wèi)ength屬性,按索引方式存儲(chǔ)數(shù)據(jù),不具有數(shù)組的push,pop等方法
轉(zhuǎn)化:1.Array.prototype.slice.call(fakeArray)
? 2.Array.from(fakeArray)
jQuery的事件委托on、live、delegate之間有什么區(qū)別
live 把事件委托交給了document(根節(jié)點(diǎn)),document 向下去尋找符合條件的元素(), 不用等待document加載結(jié)束也可以生效。
delegate可指定事件委托對(duì)象,相比于live性能更優(yōu),直接鎖定指定選擇器;
on事件委托對(duì)象選填,如果不填,即給對(duì)象自身注冊(cè)事件,填了作用和delegate一致。
band只能給調(diào)用它的時(shí)候已經(jīng)存在的元素綁定事件,不能給未來(lái)新增的元素綁定事件,存在局限性。
描述一次完整的http請(qǐng)求過(guò)程(輸入url敲回車(chē)發(fā)生了什么)
在瀏覽器輸入地址時(shí),先從本地系統(tǒng)下hosts文件里尋找對(duì)應(yīng)ip,如果有就直接使用,沒(méi)有就進(jìn)行DNS解析,DNS解析域名后會(huì)得到服務(wù)器的ip地址,瀏覽器向web服務(wù)器發(fā)送http請(qǐng)求,就開(kāi)始建立連接,由TCP協(xié)議完成,通過(guò)三次握手連接,連接后瀏覽器向服務(wù)器發(fā)送http請(qǐng)求,服務(wù)器返回一個(gè)http響應(yīng),瀏覽器接受響應(yīng)后,如果響應(yīng)內(nèi)容為html文檔,就由瀏覽器解析,渲染呈現(xiàn)給用戶,渲染頁(yè)面前,需要構(gòu)建DOM樹(shù)和CSSOM樹(shù),最后關(guān)閉TCP連接或繼續(xù)保持連接,通過(guò)四次揮手關(guān)閉連接
擴(kuò)展1.DNS服務(wù)器怎么進(jìn)行域名解析?
www.168.com
客服端向本地DNS服務(wù)器詢問(wèn)ip,本地DNS服務(wù)器查找自身緩存,沒(méi)有就向根服務(wù)器詢問(wèn),根服務(wù)器會(huì)告知本地DNS服務(wù)器這個(gè)域名由.com管理,本地DNS服務(wù)器會(huì)向.com域服務(wù)器詢問(wèn)ip,.com域服務(wù)器會(huì)告知在168.com服務(wù)器中,本地DNS服務(wù)器向168.com詢問(wèn)ip,168.com域服務(wù)器返回ip給本地DNS服務(wù)器,本地DNS服務(wù)器將ip地址給客戶端并緩存
擴(kuò)展2.三次握手
1.客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn)
2.?服務(wù)器收到syn包,確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);
3.客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài),完成三次握手
擴(kuò)展3.四次揮手
1.瀏覽器發(fā)完數(shù)據(jù)后,發(fā)送FIN請(qǐng)求斷開(kāi)連接
2.服務(wù)器發(fā)送ACK表示同意
3.服務(wù)器發(fā)送FIN請(qǐng)求斷開(kāi)連接
4.瀏覽器發(fā)送ACK表示同意
http狀態(tài)碼有哪些
1**信息,服務(wù)器收到請(qǐng)求,需要請(qǐng)求者繼續(xù)執(zhí)行操作
2**成功,操作被成功接收并處理
3**重定向,需要進(jìn)一步的操作以完成請(qǐng)求
4**客戶端錯(cuò)誤,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求
5**服務(wù)器錯(cuò)誤,服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤
后臺(tái)管理系統(tǒng)權(quán)限你是如何實(shí)現(xiàn)的?
定義路由表的時(shí)候要定義兩張表,靜態(tài)路由表(無(wú)需權(quán)限的使用)和權(quán)限路由表(與后臺(tái)返回的權(quán)限匹配用),然后登錄,如果登錄成功,我就用路由全局守衛(wèi)攔截,判斷是否已有用戶權(quán)限列表,如果沒(méi)有就調(diào)用接口重新獲取,如果有就將權(quán)限數(shù)據(jù)存在vuex中,方便我們?cè)诟鱾€(gè)組件中使用,vuex中的權(quán)限數(shù)據(jù)和需要訪問(wèn)權(quán)限的路由表比對(duì),生成當(dāng)前賬戶對(duì)應(yīng)的權(quán)限路由表,用過(guò)addRoutes方法來(lái)動(dòng)態(tài)添加路由規(guī)則,最后生成可訪問(wèn)的側(cè)邊欄菜單