值類型的類型判斷用typeof,引用類型的類型判斷用instanceof
一切(引用類型)都是對象弄抬,對象是屬性的集合
對象都是通過函數(shù)來創(chuàng)建的
1、關(guān)于閉包
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
主要有兩種形式
①函數(shù)作為返回值
②函數(shù)作為參數(shù)被傳遞
要到創(chuàng)建這個函數(shù)的那個作用域中取值——是“創(chuàng)建”掸驱,而不是“調(diào)用”
2、js捕獲異常
try {
throw new Error("Whoops!");
} catch (e) {
alert(e.name + ": " + e.message);
}
3肋层、原型對象與原型鏈
prototype:
每個函數(shù)都有一個屬性叫做prototype翎承。
這個prototype的屬性值是一個對象(屬性的集合,再次強(qiáng)調(diào)!)祈坠,默認(rèn)的只有一個叫做constructor的屬性害碾,指向這個函數(shù)本身
每個函數(shù)function都有一個prototype,即原型赦拘。每個對象都有一個proto慌随,可成為隱式原型。
每個對象都有一個proto屬性躺同,指向創(chuàng)建該對象的函數(shù)的prototype
函數(shù)在定義的時候(不是調(diào)用的時候)阁猜,就已經(jīng)確定了函數(shù)體內(nèi)部自由變量的作用域
在函數(shù)中this到底取何值,是在函數(shù)真正被調(diào)用執(zhí)行的時候確定的蹋艺,函數(shù)定義的時候確定不了剃袍。
4、阻止冒泡和默認(rèn)事件
①阻止冒泡:
e.stopPropagation()捎谨,IE則是使用e.cancelBubble = true
②阻止默認(rèn)事件:
e.preventDefault()民效,IE則是使用e.returnValue = false;
javascript的return false只會阻止默認(rèn)行為,而是用jQuery的話則既阻止默認(rèn)行為又防止對象冒泡
5侍芝、瀏覽器解析渲染過程
① 解析HTML生成DOM樹研铆。
② 解析CSS生成CSSOM規(guī)則樹。
③ 將DOM樹與CSSOM規(guī)則樹合并在一起生成渲染樹州叠。
④ 遍歷渲染樹開始布局棵红,計(jì)算每個節(jié)點(diǎn)的位置大小信息。
⑤ 將渲染樹每個節(jié)點(diǎn)繪制到屏幕咧栗。
6逆甜、ajax如何解析json數(shù)據(jù),get與post方法的區(qū)別
JQ中的Ajax可以使用數(shù)據(jù)類型dataType:“JSON”定義來接收需要的數(shù)據(jù)類型原生的AJAX可以使用JSON.parse()來或者JSON.stringify()轉(zhuǎn)換接收的數(shù)據(jù)類型
get和post都是向服務(wù)器發(fā)送一種請求致板,只是發(fā)送機(jī)制不同
① GET請求會將參數(shù)跟在URL后進(jìn)行傳遞
POST請求則是作為HTTP消息的實(shí)體內(nèi)容發(fā)送給WEB服務(wù)器交煞。
② 首先是”GET方式提交的數(shù)據(jù)最多只能是1024字節(jié)”
Post傳輸?shù)臄?shù)據(jù)量大,可以達(dá)到2M斟或。
③ get方式請求數(shù)據(jù)會被瀏覽器緩存起來素征,因此其他人就可以從瀏覽器的歷史記錄中讀取到這些數(shù)據(jù),例如賬號密碼等萝挤。在某種情況下御毅,get方式會帶來嚴(yán)重的安全問題。而post方式相對來說就可以避免這些問題怜珍。
④ Post請求必須設(shè)置Content-Type值為application/x-form-www-urlencoded端蛆;
⑤ 發(fā)送請求時,因?yàn)镚et請求的參數(shù)都在url里,所以send函數(shù)發(fā)送的參數(shù)為null,而Post請求在使用send方法時,卻需賦予其參數(shù);
7酥泛、js變量范圍
在函數(shù)內(nèi)部今豆,一般用var聲明的為局部變量嫌拣,沒用var聲明的一般為全局變量
① 全局變量 -> 在全局范圍內(nèi)都是可以訪問的。
② 局部變量 -> 只能在當(dāng)前作用域進(jìn)行訪問呆躲。
全局變量:當(dāng)前頁面內(nèi)有效
局部變量:方法內(nèi)有效
8异逐、form中的disable與readonly的區(qū)別
共同點(diǎn):都不能編輯和獲取焦點(diǎn)。
①readonly只針對input(text / password)和textarea有效插掂,而disabled對于所有的表單元素都有效应役,包括select, radio, checkbox, button等。
②readonly:使用表單post或get傳遞時會被傳遞出去燥筷。
disable:使用表單post或get傳遞時不會被傳遞出去箩祥。
③readonly的顯示效果是沒有灰化的
所有控件都有disabled 屬性,但是不一定有readonly屬性肆氓;
9袍祖、css為什么要放在js上面:
當(dāng)瀏覽器遇到一個 script 標(biāo)記時,DOM 構(gòu)建將暫停谢揪,直至腳本完成執(zhí)行蕉陋,然后繼續(xù)構(gòu)建DOM。
每次去執(zhí)行JavaScript腳本都會嚴(yán)重地阻塞DOM樹的構(gòu)建拨扶,如果JavaScript腳本還操作了CSSOM凳鬓,而正好這個CSSOM還沒有下載和構(gòu)建,瀏覽器甚至?xí)舆t腳本執(zhí)行和構(gòu)建DOM患民,直至完成其CSSOM的下載和構(gòu)建缩举。
CSS 優(yōu)先:引入順序上,CSS 資源先于 JavaScript 資源匹颤。
JS置后:我們通常把JS代碼放到頁面底部仅孩,且JavaScript 應(yīng)盡量少影響 DOM 的構(gòu)建。
10印蓖、什么是跨域辽慕?怎么解決?
跨域是指一個域下的文檔或腳本試圖去請求另一個域下的資源
同源策略:
請求的url地址,必須與瀏覽器上的url地址處于同域上,也就是域名,端口,協(xié)議相同.
① 通過jsonp跨域(動態(tài)創(chuàng)建script)
② document.domain + iframe跨域
③ location.hash + iframe
④ window.name + iframe跨域
⑤ postMessage跨域
⑥ 跨域資源共享(CORS)
⑦ nginx代理跨域
⑧ nodejs中間件代理跨域
⑨ WebSocket協(xié)議跨域