HTML
1. 常用的瀏覽器內(nèi)核
IE(Trident);
Chrome/Safari(Webkit);
Firefox/Mozilla(Gecko);
Opera(Presto);
2. 對(duì)瀏覽器內(nèi)核的理解
瀏覽器的內(nèi)核主要分成兩個(gè)部分:渲染引擎和JS引擎。
渲染引擎:負(fù)責(zé)取得網(wǎng)頁(yè)內(nèi)容(HTML、XML胯府、圖像等等)罩句、整理訊息(例如加入CSS等),以及計(jì)算網(wǎng)頁(yè)的顯示方式帐姻,然後會(huì)輸出至顯示器或打印機(jī)。
瀏覽器內(nèi)核的不同導(dǎo)致了對(duì)網(wǎng)頁(yè)的語(yǔ)法解釋會(huì)有不同,所以渲染的效果也不相同蔚舀。所有網(wǎng)頁(yè)瀏覽器、電子郵件客戶端以及其他需要編輯锨络、顯示的網(wǎng)絡(luò)內(nèi)容的應(yīng)用程序都需要內(nèi)核赌躺。
2. Doctype作用?標(biāo)準(zhǔn)模式和兼容模式各有什麼區(qū)別羡儿?如何觸發(fā)礼患?
(1) <!DOCTYPE>告知瀏覽器的解析器用什麼文檔標(biāo)準(zhǔn)解析這個(gè)文檔。DOCTYPE不存在或格式不正確會(huì)導(dǎo)致文檔以兼容模式呈現(xiàn)掠归。
(2) 標(biāo)準(zhǔn)模式的排版和JS運(yùn)作模式都是以該瀏覽器支持的最高標(biāo)準(zhǔn)運(yùn)行缅叠。在兼容模式中,頁(yè)面以寬鬆的向後兼容的方式顯示虏冻,模擬老式瀏覽器的行爲(wèi)以防止站點(diǎn)無(wú)法工作肤粱。
(3)
/*HTML4.01嚴(yán)格模式*/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//en" "http://www.w3. org/TR/html4/strict.dtd">
/*XHTML 1.0嚴(yán)格模式*/
<!DOCTYPE html PUBLIC "-//W3C//DTD *XHTML 1.0* Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4.瀏覽器標(biāo)準(zhǔn)模式和怪異模式之間的區(qū)別是什麼?
由於歷史原因厨相,不同瀏覽器對(duì)頁(yè)面的渲染是不同的领曼,甚至同一瀏覽器的不同版本也是不一樣的鸥鹉。在W3C標(biāo)準(zhǔn)出臺(tái)之前,不同瀏覽器在頁(yè)面的渲染上沒(méi)有統(tǒng)一的規(guī)範(fàn)庶骄,產(chǎn)生了差異毁渗,即Quirks mode(怪異模式或兼容模式)。當(dāng)W3C標(biāo)準(zhǔn)出臺(tái)之後单刁,不同瀏覽器對(duì)頁(yè)面渲染有了統(tǒng)一的標(biāo)準(zhǔn)灸异,即Strict mode(標(biāo)準(zhǔn)模式或嚴(yán)格模式)。
在W3C標(biāo)準(zhǔn)推出前羔飞,舊的頁(yè)面都是根據(jù)舊的渲染方式對(duì)頁(yè)面進(jìn)行渲染的肺樟,因此在W3C標(biāo)準(zhǔn)推出后為了保證舊頁(yè)面的正常顯示,保持瀏覽器的兼容性逻淌,這樣瀏覽器上就產(chǎn)生了能夠兼容W3C標(biāo)準(zhǔn)渲染的嚴(yán)格模式和保證舊頁(yè)面顯示的怪異模式或標(biāo)準(zhǔn)兼容模式儡嘶。
在標(biāo)準(zhǔn)模式中,瀏覽器根據(jù)規(guī)範(fàn)呈現(xiàn)頁(yè)面恍风;在混雜模式中蹦狂,頁(yè)面以一種比較寬鬆的向後兼容的方式顯示。
如果XHTML文檔包含形式完整的DOCTYPE朋贬,那麼它一般以標(biāo)準(zhǔn)模式呈現(xiàn)凯楔。對(duì)於HTML4.01文檔,包含嚴(yán)格DTD的DOCTYPE常常導(dǎo)致頁(yè)面以標(biāo)準(zhǔn)模式呈現(xiàn)锦募。包含過(guò)渡DTD和URI的DOCTYPE也導(dǎo)致頁(yè)面以標(biāo)準(zhǔn)模式呈現(xiàn)摆屯,但是有過(guò)渡DTD而沒(méi)有URI會(huì)導(dǎo)致頁(yè)面以混雜模式呈現(xiàn)。DOCTYPE不存在或形式不正確會(huì)導(dǎo)致HTML和XHTML文檔以混雜模式呈現(xiàn)糠亩。
區(qū)別在於:
在嚴(yán)格模式中:width是內(nèi)容的寬度虐骑,元素真正的寬度 = magin-left + border-left-width + padding-left + width +padding-right + border-right-width + margin-right;
在怪異模式中:width則是元素的實(shí)際寬度赎线,內(nèi)容寬度 = width - (padding-left + padding-right + border-left+width + border-right-width)廷没;
5.DOCTYPE有多少種類型?
該標(biāo)籤可聲明三種DTD類型垂寥,分別表示嚴(yán)格版本颠黎、過(guò)渡版本以及基於框架的HTML文檔。
HTML 4.01規(guī)定了三種文檔類型:Strict滞项、Transitional狭归、Frameset;
XHTML 1.0規(guī)定了三種XML文檔類型:Strict文判、Transitional过椎、Frameset;
6. HTML5爲(wèi)什麼只需要寫<!DOCTYPE HTML>
因爲(wèi)HTML5不基於SGML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)戏仓,因此不需要對(duì)DTD(Document Type Definition 文檔類型定義)進(jìn)行引用疚宇,但是需要對(duì)DOCTYPE來(lái)規(guī)範(fàn)瀏覽器的行爲(wèi)竞惋。
而HTML4.01基於SGML,所以需要對(duì)DTD進(jìn)行引用灰嫉,才能告知瀏覽器文檔所使用的文檔類型。
7. 使用XHTML的局限有哪些嗓奢?
XHTML與HTML的區(qū)別為:
- XHTML元素必須被正確地嵌套讼撒;
- XHTML元素必須被關(guān)閉;
- XHTML標(biāo)籤名必須用小寫字母股耽;
- XHTML文檔必須擁有根元素根盒;
- XHTML文檔要求給所有屬性賦一個(gè)值;
- XHTML要求所有的屬性必須用引號(hào)""括起來(lái)物蝙;
- XHTML文檔要求要把所有
<
炎滞、>
、&
等特殊符號(hào)用編碼表示诬乞; - XHTML文檔不要在注釋中使用“--”册赛;
- XHTML圖片必須有說(shuō)明文字;
- XHTML文檔中用id屬性代替name屬性震嫉;
局限:
所有的XHTML元素都必須被正確地嵌套森瘪,XHTML必須擁有良好的結(jié)構(gòu),所有的標(biāo)籤必須小寫票堵,並且所有的XHTML元素必須被關(guān)閉扼睬,所有的XHTML文檔必須擁有DOCTYPE聲明,並且html悴势、head窗宇、title和body元素必須存在。雖然代碼更加優(yōu)雅特纤,但缺少容錯(cuò)性军俊,不利於快速開(kāi)發(fā)。
8.cookies捧存,sessionStorage和localStorage有什麼區(qū)別蝇完?
特性 | cookie | sessionStorage | localStorage |
---|---|---|---|
數(shù)據(jù)生命期 | 生成時(shí)就會(huì)被制定一個(gè)maxAge值,這就是cookie對(duì)的生存週期矗蕊,在這個(gè)週期內(nèi)cookie有效短蜕,默認(rèn)關(guān)係瀏覽器失效 | 頁(yè)面會(huì)話期間可用 | 除非數(shù)據(jù)被清除,否則一直存在 |
存放數(shù)據(jù)大小 | 4K左右(因?yàn)槊看蜨TTP請(qǐng)求都會(huì)攜帶cookie) | 一般5M或更大 | |
與服務(wù)器通信 | 由對(duì)服務(wù)器的請(qǐng)求來(lái)傳遞傻咖,都會(huì)攜帶在HTTP頭中朋魔,如果使用cookie保存過(guò)多數(shù)據(jù)將會(huì)帶來(lái)性能問(wèn)題 | 數(shù)據(jù)不是由每個(gè)服務(wù)器請(qǐng)求傳遞的,而是只有在請(qǐng)求時(shí)使用數(shù)據(jù)卿操,不參與和服務(wù)器的通信 | |
易用性 | cookie需要自己封裝setCookie警检、getCookie | 可以用原生接口孙援,也可再次封裝對(duì)Object和Array有更好的支持 | |
共同點(diǎn) | 都是保存在瀏覽器端,與服務(wù)器端的session機(jī)制不同 |
CSS
1. 行內(nèi)元素和塊級(jí)元素的區(qū)別扇雕?兼容性使用拓售?
行內(nèi)元素:
(1) 水平方向排列;
(2) 不能包含塊級(jí)元素;
(3) 設(shè)置width/height/margin/padding無(wú)效;
塊級(jí)元素:
(1) 各占據(jù)一行;
(2) 垂直方向排列;
(3) 從新行開(kāi)始結(jié)束接著一個(gè)斷行;
2. 清除浮動(dòng)的方式
.clearfix:after {
content: ".";
display: block;
clear: both;
visibility: hidden;
line-height: 0;
height: 0;
}
.clearfix {
display: inline-block;
}
.clearfix {
overflow: auto;
zoom: 1;
}
3. box-sizing常用屬性有哪些?
設(shè)置或檢索對(duì)象的盒模型組成模式镶奉。
box-sizing:content-box; 寬度和高度分別對(duì)應(yīng)到元素的內(nèi)容框础淤。在寬度和高度之外繪製元素的內(nèi)邊距和邊框(默認(rèn));
box-sizing:border-box; 元素制定的任何內(nèi)邊距和邊框都將在已設(shè)定的寬度和高度內(nèi)進(jìn)行繪製。通過(guò)從已設(shè)定的寬度和高度分別減去邊框和內(nèi)邊距才能得到內(nèi)容的寬度和高度哨苛。
4. 使用link和@import的區(qū)別
link:
(1) 屬於XHTML標(biāo)簽;
(2) 不僅可以加載CSS鸽凶,還能用於定義RSS、rel連接屬性等作用;
(3) 頁(yè)面加載時(shí)建峭,會(huì)被同時(shí)加載;
(4) 無(wú)兼容問(wèn)題;
@import
(1) CSS提供的玻侥,衹能用於加載CSS;
(2) 等到頁(yè)面被加載完才會(huì)加載;
(3) CSS2.1提出,IE5以上才能識(shí)別;
(4) 不利于後期修改和優(yōu)化;
5.解釋下浮動(dòng)和它的工作原理亿蒸。
關(guān)於浮動(dòng)凑兰,我們需要了解,浮動(dòng)的框可以向左或向右移動(dòng)边锁,直到它的外邊緣碰到包含框或另一個(gè)浮動(dòng)框的邊框?yàn)橹蛊币 R胧乖馗?dòng),必須為元素設(shè)置一個(gè)寬度砚蓬。雖然浮動(dòng)元素不是文檔流之中矢门,但是它浮動(dòng)后所處的位置依然是在浮動(dòng)之前的水平方向上。由於浮動(dòng)框不在文檔的普通流中灰蛙,所以文檔的普通流中的塊框表現(xiàn)得就像浮動(dòng)框不存在一樣祟剔,下面的元素填補(bǔ)原來(lái)的位置。有些元素會(huì)在浮動(dòng)元素的下方摩梧,但是這些元素的內(nèi)容并不一定會(huì)被浮動(dòng)元素所遮蓋物延。
對(duì)內(nèi)聯(lián)元素進(jìn)行定位時(shí),這些元素會(huì)考慮浮動(dòng)元素的邊界仅父,會(huì)圍繞著浮動(dòng)元素放置叛薯,可以把浮動(dòng)元素想象成被塊元素忽略的元素,而內(nèi)聯(lián)元素會(huì)關(guān)注浮動(dòng)元素笙纤。
JavaScript
1.事件委託是什麼耗溜?
事件委託就是利用事件冒泡,只指定一個(gè)事件處理程序省容,就可以管理某一類型的所有事件抖拴。
優(yōu)點(diǎn):減少DOM操作,優(yōu)化性能腥椒,減少內(nèi)存佔(zhàn)用阿宅。
2.閉包
簡(jiǎn)單地說(shuō)候衍,閉包就是一個(gè)函數(shù)在創(chuàng)建時(shí)允許該自身函數(shù)訪問(wèn)并操作該自身函數(shù)之外的變量時(shí)所創(chuàng)建的作用域。
3.阻止事件冒泡/默認(rèn)事件
event.stopPropagation()
這是阻止事件冒泡的方法洒放,不讓事件向document上蔓延蛉鹿,但是默認(rèn)事件仍然會(huì)執(zhí)行,當(dāng)你用這個(gè)方法的時(shí)候往湿,如果是點(diǎn)擊一個(gè)鏈接妖异,這個(gè)連接仍然會(huì)被打開(kāi)。
event.preventDefault()
這是阻止默認(rèn)事件的方法煌茴,調(diào)用此方法后,鏈接不會(huì)被打開(kāi)日川,但是會(huì)發(fā)生冒泡蔓腐,冒泡會(huì)傳遞到上一層父元素。
return false
這個(gè)方法將會(huì)同時(shí)阻止事件冒泡和默認(rèn)事件龄句,鏈接不會(huì)被打開(kāi)回论,事件也不會(huì)被傳遞到上一層。
4.解釋下JavaScript中的this是如何工作的
this永遠(yuǎn)指向函數(shù)運(yùn)行時(shí)所在的對(duì)象分歇,而不是函數(shù)被創(chuàng)建時(shí)所在的對(duì)象傀蓉。
匿名函數(shù)或不處?kù)度魏螌?duì)象中的函數(shù)指向window。
如果是call职抡、apply葬燎、with,指定的this是誰(shuí)缚甩,就是誰(shuí)谱净。
普通函數(shù)調(diào)用,函數(shù)被誰(shuí)調(diào)用擅威,this就是誰(shuí)壕探。
5.call和apply的區(qū)別是什麼?
call方法:
語(yǔ)法:call(thisObj郊丛,Object)
定義:調(diào)用一個(gè)對(duì)象的一個(gè)方法李请,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象。
說(shuō)明:call方法可以用來(lái)代替另一個(gè)對(duì)象調(diào)用一個(gè)方法厉熟。call方法可以將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛蓆hisObj指定的新對(duì)象导盅。如果沒(méi)有提供thisObj參數(shù),那麼Global對(duì)象被用作thisObj揍瑟。
apply方法:
語(yǔ)法:apply(thisObj认轨,[argArray])
定義:應(yīng)用某一對(duì)象的一個(gè)方法,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象月培。
說(shuō)明:如果argArray不是一個(gè)有效的數(shù)組或者不是arguments對(duì)象嘁字,那麼將導(dǎo)致一個(gè)TypeError恩急,如果沒(méi)有提供argArray和thisObj任何一個(gè)參數(shù),那麼Global對(duì)象將被用作thisObj纪蜒,並且無(wú)法被傳遞任何參數(shù)衷恭。
對(duì)於call和apply兩者在作用上是相同的,但兩者在參數(shù)上有以下區(qū)別:
對(duì)於第一個(gè)參數(shù)意義都一樣纯续,但對(duì)第二個(gè)參數(shù):apply傳入的是一個(gè)參數(shù)數(shù)組随珠,也就是將多個(gè)參數(shù)組合成為一個(gè)數(shù)組傳入,而call則作為call的參數(shù)傳入(從第二個(gè)參數(shù)開(kāi)始)猬错。如func.call(func1,var1,var2,var3)對(duì)應(yīng)的apply寫法為:func.apply(func1,[var1,var2,var3])窗看,同時(shí)使用apply的好處是可以直接將當(dāng)前函數(shù)的arguments對(duì)象作為apply的第二個(gè)參數(shù)傳入。
6.綜合題
function Foo() {
getName = function () { alert (1); };
return this;
}
Foo.getName = function () { alert (2);};
Foo.prototype.getName = function () { alert (3);};
getName = function () { alert (4);};
function getName() { alert (5); }
// 問(wèn):
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
// 正確執(zhí)行順序:
function Foo() {
getName = function () { alert (1); };
return this; // this 指向window
}
var getName;
function getName() { alert (5); }
Foo.getName = function () { alert (2);};
Foo.prototype.getName = function () { alert (3);};
getName = function () { alert (4);};
// 結(jié)果
Foo.getName(); //2
getName(); //4
Foo().getName(); //1
getName(); //1
new Foo.getName(); //2 new (Foo.getName)();
new Foo().getName(); //3 (new Foo()).getName()
new new Foo().getName(); //3 new ((new Foo()).getName)();
7.實(shí)現(xiàn)函數(shù)isInteger(x)來(lái)判斷x是否是整數(shù)倦炒?
可以將x轉(zhuǎn)換成10進(jìn)制显沈,判斷和本身是不是相等即可:
function isInteger(x) {
return parseInt(x, 10) === x;
}
8.寫一個(gè)少於80字符的函數(shù),判斷一個(gè)字符串是否是回文字符串
回文字符串:即字符串從前往後讀和從後往前讀字符順序是一致的逢唤。
function isPalindrome(str) {
str = str.replace(/\W/g, '').toLowerCase();
return (str == str.split('').reverse().join(''));
}
9.下面的代碼會(huì)輸出什麼拉讯?為什麼?
var arr1 = "john".split('');
var arr2 = arr1.reverse();
var arr3 = "jones".split('');
arr2.push(arr3);
console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));
console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));
MDN 上對(duì)於 reverse() 的解釋:
Description
The reverse method transposes the elements of the calling array object in place, mutating the array, and returning a reference to the array.
也就是說(shuō)鳖藕,reverse()會(huì)改變數(shù)組本身魔慷,並且返回原數(shù)組的引用。
所以在arr2 = arr1.reverse()時(shí)著恩,arr1已經(jīng)改變了院尔。
10.解釋下面代碼的輸出
var a={},
b={key:'b'},
c={key:'c'};
a[b]=123;
a[c]=456;
console.log(a[b]);
// 結(jié)果
無(wú)論是a[b]或a[c],都會(huì)打印出456
原文解釋是:
The reason for this is as follows: When setting an object property, JavaScript will implicitly stringify the parameter value. In this case, since b and c are both objects, they will both be converted to “[object Object]”. As a result, a[b] anda[c] are both equivalent to a[“[object Object]”] and can be used interchangeably. Therefore, setting or referencing a[c] is precisely the same as setting or referencing a[b].
簡(jiǎn)單來(lái)說(shuō)喉誊,就是對(duì)象屬性訪問(wèn)中召边,' [ ] '中括號(hào)的訪問(wèn)方式,會(huì)做一個(gè)隱式的toString()裹驰,這時(shí)候就把b轉(zhuǎn)化為[object object]隧熙,而c也被轉(zhuǎn)化為[object object],它們的鍵值都一樣幻林,所以a[b]和a[c]的結(jié)果都是一樣的贞盯。
11.IE和標(biāo)準(zhǔn)下有哪些兼容性的寫法?
var e = e || window.event
document.documentElement.clientWidth || document.body.clientWidth
var target = e.srcElement || e.target
12.Ajax請(qǐng)求時(shí)沪饺,如何解釋Json數(shù)據(jù)
有兩個(gè)方法躏敢,eval()方法和JSON.parse(),但推薦使用JSON.parse()整葡,因?yàn)閑val()方法解析的時(shí)候不會(huì)去判斷字符串是否合法件余,而且Json對(duì)象中的JS方法也會(huì)被執(zhí)行,這是非常危險(xiǎn)的。
eval的全稱是evaluate啼器,就是求值的意思旬渠。parse字義上就是解析,從方法名稱中就能看出區(qū)別端壳。
13.DOM結(jié)構(gòu)——兩個(gè)節(jié)點(diǎn)之間可能存在哪些關(guān)係以及如何在節(jié)點(diǎn)之間任意移動(dòng)
DOM中兩個(gè)節(jié)點(diǎn)存在的關(guān)係無(wú)非三種:
(1)包含與被包含的關(guān)係
- IE率先引入了
contains()
方法可檢測(cè)告丢,例如A.contains(B),即檢查節(jié)點(diǎn)B是否是節(jié)點(diǎn)A的子節(jié)點(diǎn)损谦,返回布爾值岖免。 - DOM3級(jí)規(guī)範(fàn)引入
compareDocumentPosition()
,確定節(jié)點(diǎn)之間的關(guān)係照捡,返回值為一個(gè)表示關(guān)係的位掩碼的合颅湘,通過(guò)按位操作符“&”可確定關(guān)係。
例如:節(jié)點(diǎn)A(<html>)在節(jié)點(diǎn)B(<body>)前——位掩碼為4栗精,且節(jié)點(diǎn)A包含節(jié)點(diǎn)B——位掩碼為16闯参,則返回值20,通過(guò)“!!(20&16)”這種方式即可返回一個(gè)布爾值术羔,“20&16”返回16證明節(jié)點(diǎn)A包含節(jié)點(diǎn)B(即:16)赢赊,通過(guò)!!取得16的布爾值true乙漓。
(2)父與子
獲取父節(jié)點(diǎn):node.parentNode
级历、node.parentElement
,兩者的區(qū)別在於後者只能獲取元素叭披。
(3)同輩(兄弟節(jié)點(diǎn))
nextSibling
寥殖、previousSibling
(4)Element Travel API給DOM添加的屬性
childElementCount
、firstElementChild
涩蜘、lastElementChild
嚼贡、nextElementSibling
、previousElementSibling
同诫,他們與之前的方法之間的區(qū)別在於多了Element粤策,保證只返回元素節(jié)點(diǎn),而之前的方法误窖,普通的文本節(jié)點(diǎn)及注釋節(jié)點(diǎn)也會(huì)被返回叮盘。
並且,之前的方法在非IE瀏覽器中還會(huì)把元素間的空白符當(dāng)文本節(jié)點(diǎn)返回霹俺。
(5)children屬性(IE9以後)
與childNodes不同的地方在於柔吼,children只包含元素子節(jié)點(diǎn)(IE8及之前的版本可能會(huì)包含注釋節(jié)點(diǎn))。
14.DOM操作——怎樣添加丙唧、移除愈魏、移動(dòng)、複製、創(chuàng)建和查找節(jié)點(diǎn)
(1)創(chuàng)建新節(jié)點(diǎn)
createDocumentFragment() // 創(chuàng)建一個(gè)DOM片段
createElement() // 創(chuàng)建一個(gè)具體的元素
-
createTextNode() //創(chuàng)建一個(gè)文本節(jié)點(diǎn)
(2)添加培漏、移除溪厘、替換、插入 -
appendChild()
用於向childNodes列表的末尾添加一個(gè)節(jié)點(diǎn)北苟,返回要添加的元素節(jié)點(diǎn)桩匪,appendChild()方法還可以添加已經(jīng)存在的元素,會(huì)將元素從原來(lái)的位置移到新的位置友鼻。 removeChild()
replaceChild()
-
insertBefore()
如果不是在末尾插入節(jié)點(diǎn)傻昙,而是想要放在特定的位置上,用這個(gè)方法即可彩扔,該方法接受兩個(gè)參數(shù)妆档,第一個(gè)是要插入的節(jié)點(diǎn),第二個(gè)是參照節(jié)點(diǎn)虫碉,返回要添加的元素節(jié)點(diǎn)贾惦。
(3)查找 getElementByTagName() // 通過(guò)標(biāo)籤名稱
getElementsByTagName() // Elements加了s,選出來(lái)是數(shù)組
getElementByName() // 通過(guò)元素的Name屬性的值
getElementsByName() // Elements加了s敦捧,選出來(lái)是數(shù)組
getElementByClassName() // 通過(guò)元素的類名
- ``getElementsByClassName() // Elements加了s须板,選出來(lái)是數(shù)組,IE9以下不支持
getElementById() // 通過(guò)元素ID兢卵,唯一性
15.事件——怎樣使用事件以及IE和DOM事件模型之間存在哪些主要差別
(1)關(guān)於事件
IE的事件流:事件冒泡
由事件的目標(biāo)(event.srcElement)接受事件习瑰,然後逐級(jí)向上,直到文檔節(jié)點(diǎn)document秽荤。
其他瀏覽器:事件捕獲
與事件冒泡正好相反甜奄,文檔節(jié)點(diǎn)document先監(jiān)聽(tīng)到事件,然後把事件逐級(jí)向下傳遞事件窃款,直到目標(biāo)節(jié)點(diǎn)event.target课兄。
(2)DOM事件流
DOM2級(jí)事件規(guī)範(fàn)的事件流綜合了以上兩種,把事件流分為了以下三個(gè)階段:
1.事件捕獲階段
不涉及事件目標(biāo)晨继,或者說(shuō)這個(gè)階段在目標(biāo)之前就結(jié)束了烟阐;
2.處?kù)赌繕?biāo)階段
被看做冒泡階段的一部分,所以可以在冒泡階段在目標(biāo)事件上操作事件紊扬;
3.事件冒泡階段
** 規(guī)範(fàn)和瀏覽器實(shí)現(xiàn)的差別:(1)DOM2級(jí)事件規(guī)範(fàn)的捕獲階段蜒茄,事件從文檔節(jié)點(diǎn)document開(kāi)始傳播,現(xiàn)代瀏覽器大多數(shù)都是從window對(duì)象開(kāi)始傳播事件珠月。(2)DOM2級(jí)事件規(guī)範(fàn)捕獲階段不涉及事件目標(biāo)扩淀,現(xiàn)代瀏覽器大多數(shù)在這個(gè)階段包含事件目標(biāo)。
16.XMLHttpRequest——這是什麼啤挎、怎樣完整地執(zhí)行一次GET請(qǐng)求驻谆、怎樣檢測(cè)錯(cuò)誤
https://segmentfault.com/a/1190000004322487
17.JSON——它是什麼卵凑、為什麼應(yīng)該使用它、到底該怎麼使用它胜臊,說(shuō)出實(shí)現(xiàn)細(xì)節(jié)來(lái)
是一種輕量級(jí)的數(shù)據(jù)交換格式勺卢,易於人的閱讀和編寫,同時(shí)也易於機(jī)器解析和生成象对。
JSON建構(gòu)于兩種結(jié)構(gòu):
- “名稱/值”對(duì)的集合(A collection of name/value pairs)黑忱。不同語(yǔ)言中,它被理解為對(duì)象(object)勒魔、記錄(record)甫煞、結(jié)構(gòu)(struct)、字典(dictionary)冠绢、哈希表(hash table)抚吠、有鍵列表(keyed list),或者關(guān)聯(lián)數(shù)組(associative array)弟胀。
- 值得有序列表(An ordered list of values)楷力。在大部分語(yǔ)言中,它被理解為數(shù)組(array)孵户。
以上是自己平時(shí)記不住的題目萧朝,存下來(lái)多看幾遍。
待補(bǔ)充.....