面试问题答案综合版
å¨çº¿é¢è§ http://blog.poetries.top/FE-Interview-Questions
- 第ä¸é¨åï¼åºç¡ç¯
- 第äºé¨åï¼è¿é¶ç¯
- 第ä¸é¨åï¼é«çº§ç¯
- 第åé¨åï¼éè¯ç¯
- 第äºé¨åï¼ç²¾åç¯
- 第å é¨åï¼ç²¾ç®ç¯
- 第ä¸é¨åï¼ç»¼åç¯

第ä¸é¨åï¼åºç¡ç¯
ä¸ãHTMLãHTTPãweb综åé®é¢
1 å端éè¦æ³¨æåªäºSEO
- åçç
titleãdescriptionãkeywordsï¼æç´¢å¯¹çä¸é¡¹çæéé个åå°ï¼titleå¼å¼ºè°éç¹å³å¯ï¼éè¦å ³é®è¯åºç°ä¸è¦è¶ è¿2次ï¼èä¸è¦é åï¼ä¸å页é¢titleè¦ææä¸åï¼descriptionæé¡µé¢å 容é«åº¦æ¦æ¬ï¼é¿åº¦åéï¼ä¸å¯è¿åå ç å ³é®è¯ï¼ä¸å页é¢descriptionææä¸åï¼keywordså举åºéè¦å ³é®è¯å³å¯ - è¯ä¹åç
HTML代ç ï¼ç¬¦åW3Cè§èï¼è¯ä¹å代ç 让æç´¢å¼æå®¹æçè§£ç½é¡µ - éè¦å
容
HTMLä»£ç æ¾å¨æåï¼æç´¢å¼ææåHTMLé¡ºåºæ¯ä»ä¸å°ä¸ï¼æçæç´¢å¼æå¯¹æåé¿åº¦æéå¶ï¼ä¿è¯éè¦å 容ä¸å®ä¼è¢«æå - éè¦å
容ä¸è¦ç¨
jsè¾åºï¼ç¬è«ä¸ä¼æ§è¡jsè·åå 容 - å°ç¨
iframeï¼æç´¢å¼æä¸ä¼æåiframeä¸çå 容 - éè£
饰æ§å¾çå¿
é¡»å
alt - æé«ç½ç«é度ï¼ç½ç«éåº¦æ¯æç´¢å¼ææåºçä¸ä¸ªéè¦ææ
2 <img>çtitleåaltæä»ä¹åºå«
- é常å½é¼ æ æ»å¨å°å ç´ ä¸çæ¶åæ¾ç¤º
altæ¯<img>çç¹æå±æ§ï¼æ¯å¾çå 容ççä»·æè¿°ï¼ç¨äºå¾çæ æ³å è½½æ¶æ¾ç¤ºã读å±å¨é 读å¾çã坿å¾çé«å¯è®¿é®æ§ï¼é¤äºçº¯è£ 饰å¾çå¤é½å¿ 须设置ææä¹çå¼ï¼æç´¢å¼æä¼éç¹åæã
3 HTTPçå ç§è¯·æ±æ¹æ³ç¨é
-
GETæ¹æ³- åéä¸ä¸ªè¯·æ±æ¥å徿å¡å¨ä¸çæä¸èµæº
-
POSTæ¹æ³- å
URLæå®çèµæºæäº¤æ°æ®æéå æ°çæ°æ®
- å
-
PUTæ¹æ³- è·
POSTæ¹æ³å¾åï¼ä¹æ¯æ³æå¡å¨æäº¤æ°æ®ã使¯ï¼å®ä»¬ä¹é´æä¸åãPUTæå®äºèµæºå¨æå¡å¨ä¸çä½ç½®ï¼èPOST没æ
- è·
-
HEADæ¹æ³- åªè¯·æ±é¡µé¢çé¦é¨
-
DELETEæ¹æ³- å 餿å¡å¨ä¸çæèµæº
-
OPTIONSæ¹æ³- å®ç¨äºè·åå½å
URLææ¯æçæ¹æ³ãå¦æè¯·æ±æåï¼ä¼æä¸ä¸ªAllowç头å å«ç±»ä¼¼âGET,POSTâè¿æ ·çä¿¡æ¯
- å®ç¨äºè·åå½å
-
TRACEæ¹æ³TRACEæ¹æ³è¢«ç¨äºæ¿åä¸ä¸ªè¿ç¨çï¼åºç¨å±çè¯·æ±æ¶æ¯åè·¯
-
CONNECTæ¹æ³- æè¯·æ±è¿æ¥è½¬æ¢å°éæç
TCP/IPéé
- æè¯·æ±è¿æ¥è½¬æ¢å°éæç
4 仿µè§å¨å°åæ è¾å ¥urlå°æ¾ç¤ºé¡µé¢çæ¥éª¤
åºç¡çæ¬
- æµè§å¨æ ¹æ®è¯·æ±ç
URL交ç»DNSååè§£æï¼æ¾å°çå®IPï¼åæå¡å¨å起请æ±ï¼ - æå¡å¨äº¤ç»åå°å¤ç宿åè¿åæ°æ®ï¼æµè§å¨æ¥æ¶æä»¶ï¼
HTMLãJSãCSSãå¾è±¡çï¼ï¼ - æµè§å¨å¯¹å è½½å°çèµæºï¼
HTMLãJSãCSSçï¼è¿è¡è¯æ³è§£æï¼å»ºç«ç¸åºçå 鍿°æ®ç»æï¼å¦HTMLçDOMï¼ï¼ - è½½å ¥è§£æå°çèµæºæä»¶ï¼æ¸²æé¡µé¢ï¼å®æã
详ç»ç
- 卿µè§å¨å°åæ è¾å ¥URL
- æµè§å¨æ¥çç¼åï¼å¦æè¯·æ±èµæºå¨ç¼åä¸å¹¶ä¸æ°é²ï¼è·³è½¬å°è½¬ç æ¥éª¤
- å¦æèµæºæªç¼åï¼åèµ·æ°è¯·æ±
- 妿已ç¼åï¼æ£éªæ¯å¦è¶³å¤æ°é²ï¼è¶³å¤æ°é²ç´æ¥æä¾ç»å®¢æ·ç«¯ï¼å¦å䏿å¡å¨è¿è¡éªè¯ã
- æ£éªæ°é²é常æä¸¤ä¸ªHTTP头è¿è¡æ§å¶
ExpiresåCache-Controlï¼- HTTP1.0æä¾Expiresï¼å¼ä¸ºä¸ä¸ªç»å¯¹æ¶é´è¡¨ç¤ºç¼åæ°é²æ¥æ
- HTTP1.1å¢å äºCache-Control: max-age=,å¼ä¸ºä»¥ç§ä¸ºåä½çæå¤§æ°é²æ¶é´
- æµè§å¨è§£æURLè·ååè®®ï¼ä¸»æºï¼ç«¯å£ï¼path
- æµè§å¨ç»è£ ä¸ä¸ªHTTPï¼GETï¼è¯·æ±æ¥æ
- æµè§å¨è·å主æºipå°åï¼è¿ç¨å¦ä¸ï¼
- æµè§å¨ç¼å
- æ¬æºç¼å
- hostsæä»¶
- è·¯ç±å¨ç¼å
- ISP DNSç¼å
- DNSé彿¥è¯¢ï¼å¯è½åå¨è´è½½åè¡¡å¯¼è´æ¯æ¬¡IPä¸ä¸æ ·ï¼
- æå¼ä¸ä¸ªsocketä¸ç®æ IPå°åï¼ç«¯å£å»ºç«TCP龿¥ï¼ä¸æ¬¡æ¡æå¦ä¸ï¼
- 客æ·ç«¯åéä¸ä¸ªTCPçSYN=1ï¼Seq=Xçå å°æå¡å¨ç«¯å£
- æå¡å¨ååSYN=1ï¼ ACK=X+1ï¼ Seq=Yçååºå
- 客æ·ç«¯åéACK=Y+1ï¼ Seq=Z
- TCP龿¥å»ºç«ååéHTTP请æ±
- æå¡å¨æ¥å请æ±å¹¶è§£æï¼å°è¯·æ±è½¬åå°æå¡ç¨åºï¼å¦èæä¸»æºä½¿ç¨HTTP Host头é¨å¤æè¯·æ±çæå¡ç¨åº
- æå¡å¨æ£æ¥HTTP请æ±å¤´æ¯å¦å å«ç¼åéªè¯ä¿¡æ¯å¦æéªè¯ç¼åæ°é²ï¼è¿å304ç对åºç¶æç
- å¤çç¨åºè¯»å宿´è¯·æ±å¹¶åå¤HTTPååºï¼å¯è½éè¦æ¥è¯¢æ°æ®åºçæä½
- æå¡å¨å°ååºæ¥æéè¿TCPè¿æ¥åéåæµè§å¨
- æµè§å¨æ¥æ¶HTTPååºï¼ç¶åæ ¹æ®æ
åµéæ©å
³éTCPè¿æ¥æè
ä¿çéç¨ï¼å
³éTCPè¿æ¥ç忬¡æ¡æå¦ä¸ï¼
- 䏻卿¹åéFin=1ï¼ Ack=Zï¼ Seq= Xæ¥æ
- è¢«å¨æ¹åéACK=X+1ï¼ Seq=Zæ¥æ
- è¢«å¨æ¹åéFin=1ï¼ ACK=Xï¼ Seq=Yæ¥æ
- 䏻卿¹åéACK=Yï¼ Seq=Xæ¥æ
- æµè§å¨æ£æ¥ååºç¶æåï¼æ¯å¦ä¸º1XXï¼3XXï¼ 4XXï¼ 5XXï¼è¿äºæ åµå¤çä¸2XXä¸å
- å¦æèµæºå¯ç¼åï¼è¿è¡ç¼å
- 对ååºè¿è¡è§£ç ï¼ä¾å¦gzipå缩ï¼
- æ ¹æ®èµæºç±»åå³å®å¦ä½å¤çï¼åè®¾èµæºä¸ºHTMLææ¡£ï¼
- è§£æHTMLææ¡£ï¼æä»¶DOMæ ï¼ä¸è½½èµæºï¼æé CSSOMæ ï¼æ§è¡jsèæ¬ï¼è¿äºæä½æ²¡æä¸¥æ ¼çå å顺åºï¼ä»¥ä¸åå«è§£é
- æå»ºDOMæ ï¼
- Tokenizingï¼æ ¹æ®HTMLè§èå°å符æµè§£æä¸ºæ è®°
- Lexingï¼è¯æ³åæå°æ 记转æ¢ä¸ºå¯¹è±¡å¹¶å®ä¹å±æ§åè§å
- DOM constructionï¼æ ¹æ®HTMLæ è®°å ³ç³»å°å¯¹è±¡ç»æDOMæ
- è§£æè¿ç¨ä¸éå°å¾çãæ ·å¼è¡¨ãjsæä»¶ï¼å¯å¨ä¸è½½
- æå»ºCSSOMæ ï¼
- Tokenizingï¼å符æµè½¬æ¢ä¸ºæ è®°æµ
- Nodeï¼æ ¹æ®æ è®°å建èç¹
- CSSOMï¼èç¹å建CSSOMæ
- æ ¹æ®DOMæ åCSSOMæ æå»ºæ¸²ææ :
- ä»DOMæ çæ ¹èç¹éåææå¯è§èç¹ï¼ä¸å¯è§èç¹å
æ¬ï¼1ï¼
script,metaè¿æ ·æ¬èº«ä¸å¯è§çæ ç¾ã2)被csséèçèç¹ï¼å¦display: none - 对æ¯ä¸ä¸ªå¯è§èç¹ï¼æ¾å°æ°å½çCSSOMè§åå¹¶åºç¨
- åå¸å¯è§èç¹çå 容åè®¡ç®æ ·å¼
- ä»DOMæ çæ ¹èç¹éåææå¯è§èç¹ï¼ä¸å¯è§èç¹å
æ¬ï¼1ï¼
- jsè§£æå¦ä¸ï¼
- æµè§å¨å建Document对象并解æHTMLï¼å°è§£æå°çå ç´ åææ¬èç¹æ·»å å°ææ¡£ä¸ï¼æ¤æ¶document.readystate为loading
- HTMLè§£æå¨éå°æ²¡æasyncådeferçscriptæ¶ï¼å°ä»ä»¬æ·»å å°ææ¡£ä¸ï¼ç¶åæ§è¡è¡å æå¤é¨èæ¬ãè¿äºèæ¬ä¼åæ¥æ§è¡ï¼å¹¶ä¸å¨èæ¬ä¸è½½åæ§è¡æ¶è§£æå¨ä¼æåãè¿æ ·å°±å¯ä»¥ç¨document.write()æææ¬æå ¥å°è¾å ¥æµä¸ãåæ¥èæ¬ç»å¸¸ç®åå®ä¹å½æ°å注åäºä»¶å¤çç¨åºï¼ä»ä»¬å¯ä»¥éååæä½scriptåä»ä»¬ä¹åçææ¡£å 容
- å½è§£æå¨éå°è®¾ç½®äºasync屿§çscriptæ¶ï¼å¼å§ä¸è½½èæ¬å¹¶ç»§ç»è§£æææ¡£ãèæ¬ä¼å¨å®ä¸è½½å®æå尽快æ§è¡ï¼ä½æ¯è§£æå¨ä¸ä¼å䏿¥çå®ä¸è½½ã弿¥èæ¬ç¦æ¢ä½¿ç¨document.write()ï¼å®ä»¬å¯ä»¥è®¿é®èªå·±scriptåä¹åçææ¡£å ç´
- å½ææ¡£å®æè§£æï¼document.readStateåæinteractive
- æædeferèæ¬ä¼æç §å¨ææ¡£åºç°çé¡ºåºæ§è¡ï¼å»¶è¿èæ¬è½è®¿é®å®æ´ææ¡£æ ï¼ç¦æ¢ä½¿ç¨document.write()
- æµè§å¨å¨Document对象ä¸è§¦åDOMContentLoadedäºä»¶
- æ¤æ¶ææ¡£å®å ¨è§£æå®æï¼æµè§å¨å¯è½è¿å¨çå¾ å¦å¾ççå 容å è½½ï¼çè¿äºå å®¹å®æè½½å ¥å¹¶ä¸ææå¼æ¥èæ¬å®æè½½å ¥åæ§è¡ï¼document.readStateå为complete,window触åloadäºä»¶
- æ¾ç¤ºé¡µé¢ï¼HTMLè§£æè¿ç¨ä¸ä¼éæ¥æ¾ç¤ºé¡µé¢ï¼
详ç»ç®ç
-
仿µè§å¨æ¥æ¶
urlå°å¼å¯ç½ç»è¯·æ±çº¿ç¨ï¼è¿ä¸é¨åå¯ä»¥å±å¼æµè§å¨çæºå¶ä»¥åè¿ç¨ä¸çº¿ç¨ä¹é´çå ³ç³»ï¼ -
å¼å¯ç½ç»çº¿ç¨å°ååºä¸ä¸ªå®æ´ç
http请æ±ï¼è¿ä¸é¨åæ¶åå°dnsæ¥è¯¢ï¼tcp/ip请æ±ï¼äºå±å ç¹ç½åè®®æ çç¥è¯ï¼ -
仿å¡å¨æ¥æ¶å°è¯·æ±å°å¯¹åºåå°æ¥æ¶å°è¯·æ±ï¼è¿ä¸é¨åå¯è½æ¶åå°è´è½½åè¡¡ï¼å®å ¨æ¦æªä»¥ååå°å é¨çå¤çççï¼
-
åå°ååå°ç
http交äºï¼è¿ä¸é¨åå æ¬http头é¨ãååºç ãæ¥æç»æãcookieçç¥è¯ï¼å¯ä»¥æä¸éæèµæºçcookieä¼åï¼ä»¥åç¼ç è§£ç ï¼å¦gzipå缩çï¼ -
åç¬æåºæ¥çç¼åé®é¢ï¼
httpçç¼åï¼è¿é¨åå æ¬httpç¼å头é¨ï¼etagï¼catch-controlçï¼ -
æµè§å¨æ¥æ¶å°
httpæ°æ®å åçè§£ææµç¨ï¼è§£æhtml-è¯æ³åæç¶åè§£æædomæ ãè§£æcssçæcssè§åæ ãåå¹¶ærenderæ ï¼ç¶ålayoutãpainting渲æãå¤åå¾å±çåæãGPUç»å¶ãå¤é¾èµæºçå¤çãloadedådomcontentloadedçï¼ -
CSSçå¯è§åæ ¼å¼æ¨¡åï¼å ç´ çæ¸²æè§åï¼å¦å å«åï¼æ§å¶æ¡ï¼BFCï¼IFCçæ¦å¿µï¼ -
JSå¼æè§£æè¿ç¨ï¼JSçè§£éé¶æ®µï¼é¢å¤çé¶æ®µï¼æ§è¡é¶æ®µçææ§è¡ä¸ä¸æï¼VOï¼ä½ç¨åé¾ãåæ¶æºå¶ççï¼ -
å ¶å®ï¼å¯ä»¥æå±ä¸åçç¥è¯æ¨¡åï¼å¦è·¨åï¼webå®å ¨ï¼
hybrid模å¼ççå 容ï¼
5 å¦ä½è¿è¡ç½ç«æ§è½ä¼å
-
contentæ¹é¢- åå°
HTTP请æ±ï¼åå¹¶æä»¶ãCSSç²¾çµãinline Image - åå°
DNSæ¥è¯¢ï¼DNSç¼åãå°èµæºåå¸å°æ°å½æ°éç主æºå - åå°
DOMå ç´ æ°é
- åå°
-
Serveræ¹é¢- 使ç¨
CDN - é
ç½®
ETag - 对ç»ä»¶ä½¿ç¨
Gzipå缩
- 使ç¨
-
Cookieæ¹é¢- åå°
cookie大å°
- åå°
-
cssæ¹é¢- å°æ ·å¼è¡¨æ¾å°é¡µé¢é¡¶é¨
- ä¸ä½¿ç¨
CSSè¡¨è¾¾å¼ - 使ç¨
<link>ä¸ä½¿ç¨@import
-
Javascriptæ¹é¢- å°èæ¬æ¾å°é¡µé¢åºé¨
- å°
javascriptåcssä»å¤é¨å¼å ¥ - å缩
javascriptåcss - å é¤ä¸éè¦çèæ¬
- åå°
DOM访é®
-
å¾çæ¹é¢
- ä¼åå¾çï¼æ ¹æ®å®é é¢è²éè¦éæ©è²æ·±ãå缩
- ä¼å
cssç²¾çµ - ä¸è¦å¨
HTML䏿伏å¾ç
6 HTTPç¶æç åå ¶å«ä¹
1XXï¼ä¿¡æ¯ç¶æç 100 Continueç»§ç»ï¼ä¸è¬å¨åépostè¯·æ±æ¶ï¼å·²åéäºhttp headerä¹åæå¡ç«¯å°è¿åæ¤ä¿¡æ¯ï¼è¡¨ç¤ºç¡®è®¤ï¼ä¹ååéå ·ä½åæ°ä¿¡æ¯
2XXï¼æåç¶æç 200 OKæ£å¸¸è¿åä¿¡æ¯201 Createdè¯·æ±æå并䏿å¡å¨åå»ºäºæ°çèµæº202 Acceptedæå¡å¨å·²æ¥å请æ±ï¼ä½å°æªå¤ç
3XXï¼éå®å301 Moved Permanently请æ±çç½é¡µå·²æ°¸ä¹ ç§»å¨å°æ°ä½ç½®ã302 Foundä¸´æ¶æ§éå®åã303 See Otherä¸´æ¶æ§éå®åï¼ä¸æ»æ¯ä½¿ç¨GETè¯·æ±æ°çURIã304 Not Modifiedèªä»ä¸æ¬¡è¯·æ±åï¼è¯·æ±çç½é¡µæªä¿®æ¹è¿ã
4XXï¼å®¢æ·ç«¯é误400 Bad Requestæå¡å¨æ æ³ç解请æ±çæ ¼å¼ï¼å®¢æ·ç«¯ä¸åºå½å°è¯å次使ç¨ç¸åçå 容å起请æ±ã401 Unauthorizedè¯·æ±æªææã403 Forbiddenç¦æ¢è®¿é®ã404 Not Foundæ¾ä¸å°å¦ä½ä¸URIç¸å¹é çèµæºã
5XX:æå¡å¨é误500 Internal Server Erroræå¸¸è§çæå¡å¨ç«¯é误ã503 Service Unavailableæå¡å¨ç«¯ææ¶æ æ³å¤ç请æ±ï¼å¯è½æ¯è¿è½½æç»´æ¤ï¼ã
7 è¯ä¹åççè§£
- ç¨æ£ç¡®çæ ç¾åæ£ç¡®çäºæ ï¼
htmlè¯ä¹åå°±æ¯è®©é¡µé¢çå å®¹ç»æåï¼ä¾¿äºå¯¹æµè§å¨ãæç´¢å¼æè§£æï¼- 卿²¡ææ ·å¼
CSSæ åµä¸ä¹ä»¥ä¸ç§ææ¡£æ ¼å¼æ¾ç¤ºï¼å¹¶ä¸æ¯å®¹æé 读çã - æç´¢å¼æçç¬è«ä¾èµäºæ è®°æ¥ç¡®å®ä¸ä¸æåå个å
³é®åçæéï¼å©äº
SEOã - 使é 读æºä»£ç ç人对ç½ç«æ´å®¹æå°ç½ç«ååï¼ä¾¿äºé 读维æ¤çè§£
8 ä»ç»ä¸ä¸ä½ 对æµè§å¨å æ ¸ççè§£ï¼
-
主è¦åæä¸¤é¨åï¼æ¸²æå¼æ(
layout engineeræRendering Engine)åJS弿 -
渲æå¼æï¼è´è´£åå¾ç½é¡µçå 容ï¼
HTMLãXMLãå¾åççï¼ãæ´ç讯æ¯ï¼ä¾å¦å å ¥CSSçï¼ï¼ä»¥å计ç®ç½é¡µçæ¾ç¤ºæ¹å¼ï¼ç¶åä¼è¾åºè³æ¾ç¤ºå¨ææå°æºãæµè§å¨çå æ ¸çä¸å对äºç½é¡µçè¯æ³è§£é伿ä¸åï¼æä»¥æ¸²æçææä¹ä¸ç¸åãææç½é¡µæµè§å¨ãçµåé®ä»¶å®¢æ·ç«¯ä»¥åå ¶å®éè¦ç¼è¾ãæ¾ç¤ºç½ç»å 容çåºç¨ç¨åºé½éè¦å æ ¸ -
JS弿åï¼è§£æåæ§è¡javascriptæ¥å®ç°ç½é¡µçå¨æææ -
æå¼å§æ¸²æå¼æå
JSå¼æå¹¶æ²¡æåºåçå¾æç¡®ï¼åæ¥JSå¼æè¶æ¥è¶ç¬ç«ï¼å æ ¸å°±å¾åäºåªææ¸²æå¼æ
9 html5æåªäºæ°ç¹æ§ãç§»é¤äºé£äºå ç´ ï¼
-
HTML5ç°å¨å·²ç»ä¸æ¯SGMLçåéï¼ä¸»è¦æ¯å ³äºå¾åï¼ä½ç½®ï¼åå¨ï¼å¤ä»»å¡çåè½çå¢å- ç»ç»
canvas - ç¨äºåªä»åæ¾ç
videoåaudioå ç´ - æ¬å°ç¦»çº¿åå¨
localStorageé¿æå卿°æ®ï¼æµè§å¨å ³éåæ°æ®ä¸ä¸¢å¤± sessionStorageçæ°æ®å¨æµè§å¨å ³éåèªå¨å é¤- è¯æåæ´å¥½çå
容å
ç´ ï¼æ¯å¦
articleãfooterãheaderãnavãsection - è¡¨åæ§ä»¶ï¼
calendarãdateãtimeãemailãurlãsearch - æ°çææ¯
webworker,websocket,Geolocation
- ç»ç»
-
ç§»é¤çå ç´ ï¼
- 纯表ç°çå
ç´ ï¼
basefontï¼bigï¼centerï¼font,sï¼strikeï¼ttï¼u` - 对å¯ç¨æ§äº§çè´é¢å½±åçå
ç´ ï¼
frameï¼framesetï¼noframes
- 纯表ç°çå
ç´ ï¼
-
æ¯æ
HTML5æ°æ ç¾ï¼IE8/IE7/IE6æ¯æéè¿document.createElementæ¹æ³äº§ççæ ç¾- å¯ä»¥å©ç¨è¿ä¸ç¹æ§è®©è¿äºæµè§å¨æ¯
æHTML5æ°æ ç¾ - æµè§å¨æ¯ææ°æ ç¾åï¼è¿éè¦æ·»å æ ç¾é»è®¤çæ ·å¼
-
å½ç¶ä¹å¯ä»¥ç´æ¥ä½¿ç¨æççæ¡æ¶ãæ¯å¦
html5shim
10 HTML5ç离线å¨åæä¹ä½¿ç¨ï¼å·¥ä½åçè½ä¸è½è§£éä¸ä¸ï¼
-
å¨ç¨æ·æ²¡æä¸å ç¹ç½è¿æ¥æ¶ï¼å¯ä»¥æ£å¸¸è®¿é®ç«ç¹æåºç¨ï¼å¨ç¨æ·ä¸å ç¹ç½è¿æ¥æ¶ï¼æ´æ°ç¨æ·æºå¨ä¸çç¼åæä»¶
-
åçï¼
HTML5ç离线å卿¯åºäºä¸ä¸ªæ°å»ºç.appcacheæä»¶çç¼åæºå¶(䏿¯å卿æ¯)ï¼éè¿è¿ä¸ªæä»¶ä¸çè§£ææ¸ å离线åå¨èµæºï¼è¿äºèµæºå°±ä¼åcookie䏿 ·è¢«åå¨äºä¸æ¥ãä¹åå½ç½ç»å¨å¤äºç¦»çº¿ç¶æä¸æ¶ï¼æµè§å¨ä¼éè¿è¢«ç¦»çº¿åå¨çæ°æ®è¿è¡é¡µé¢å±ç¤º -
å¦ä½ä½¿ç¨ï¼
- 页é¢å¤´é¨åä¸é¢ä¸æ ·å å
¥ä¸ä¸ª
manifestç屿§ï¼ - å¨
cache.manifestæä»¶çç¼å离线åå¨çèµæº - å¨ç¦»çº¿ç¶ææ¶ï¼æä½
window.applicationCacheè¿è¡éæ±å®ç°
- 页é¢å¤´é¨åä¸é¢ä¸æ ·å å
¥ä¸ä¸ª
CACHE MANIFEST
#v0.11
CACHE:
js/app.js
css/style.css
NETWORK:
resourse/logo.png
FALLBACK:
/ /offline.html
11 æµè§å¨æ¯æä¹å¯¹HTML5ç离线å¨åèµæºè¿è¡ç®¡çåå è½½çå¢
-
å¨çº¿çæ åµä¸ï¼æµè§å¨åç°
html头鍿manifest屿§ï¼å®ä¼è¯·æ±manifestæä»¶ï¼å¦ææ¯ç¬¬ä¸æ¬¡è®¿é®appï¼é£ä¹æµè§å¨å°±ä¼æ ¹æ®manifestæä»¶çå 容ä¸è½½ç¸åºçèµæºå¹¶ä¸è¿è¡ç¦»çº¿åå¨ã妿已ç»è®¿é®è¿appå¹¶ä¸èµæºå·²ç»ç¦»çº¿åå¨äºï¼é£ä¹æµè§å¨å°±ä¼ä½¿ç¨ç¦»çº¿çèµæºå 载页é¢ï¼ç¶åæµè§å¨ä¼å¯¹æ¯æ°çmanifestæä»¶ä¸æ§çmanifestæä»¶ï¼å¦ææä»¶æ²¡æåçæ¹åï¼å°±ä¸å任使ä½ï¼å¦ææä»¶æ¹åäºï¼é£ä¹å°±ä¼éæ°ä¸è½½æä»¶ä¸çèµæºå¹¶è¿è¡ç¦»çº¿åå¨ã -
ç¦»çº¿çæ åµä¸ï¼æµè§å¨å°±ç´æ¥ä½¿ç¨ç¦»çº¿åå¨çèµæºã
12 请æè¿°ä¸ä¸ cookiesï¼sessionStorage å localStorage çåºå«ï¼
-
cookieæ¯ç½ç«ä¸ºäºæ ç¤ºç¨æ·èº«ä»½èå¨åå¨ç¨æ·æ¬å°ç»ç«¯ï¼Client Sideï¼ä¸çæ°æ®ï¼é常ç»è¿å å¯ï¼ -
cookieæ°æ®å§ç»å¨åæºçhttp请æ±ä¸æºå¸¦ï¼å³ä½¿ä¸éè¦ï¼ï¼è®°ä¼å¨æµè§å¨åæå¡å¨é´æ¥åä¼ é
-
sessionStorageålocalStorageä¸ä¼èªå¨ææ°æ®åç»æå¡å¨ï¼ä» 卿¬å°ä¿å -
åå¨å¤§å°ï¼
cookieæ°æ®å¤§å°ä¸è½è¶ è¿4ksessionStorageålocalStorageè½ç¶ä¹æåå¨å¤§å°çéå¶ï¼ä½æ¯cookie大å¾å¤ï¼å¯ä»¥è¾¾å°5Mææ´å¤§
-
æææ¶é´ï¼
localStorageåå¨æä¹ æ°æ®ï¼æµè§å¨å ³éåæ°æ®ä¸ä¸¢å¤±é¤é主å¨å 餿°æ®sessionStorageæ°æ®å¨å½åæµè§å¨çªå£å ³éåèªå¨å é¤cookie设置çcookieè¿ææ¶é´ä¹åä¸ç´ææï¼å³ä½¿çªå£ææµè§å¨å ³é
13 iframeæé£äºç¼ºç¹ï¼
iframeä¼é»å¡ä¸»é¡µé¢çOnloadäºä»¶- æç´¢å¼æçæ£ç´¢ç¨åºæ æ³è§£è¯»è¿ç§é¡µé¢ï¼ä¸å©äº
SEO iframeå主页é¢å ±äº«è¿æ¥æ± ï¼èæµè§å¨å¯¹ç¸ååçè¿æ¥æéå¶ï¼æä»¥ä¼å½±å页é¢çå¹¶è¡å è½½- 使ç¨
iframeä¹åéè¦èèè¿ä¸¤ä¸ªç¼ºç¹ã妿éè¦ä½¿ç¨iframeï¼æå¥½æ¯éè¿javascript卿ç»iframeæ·»åsrc屿§å¼ï¼è¿æ ·å¯ä»¥ç»å¼ä»¥ä¸ä¸¤ä¸ªé®é¢
14 WEBæ å以åW3Cæ 忝ä»ä¹?
- æ ç¾éåãæ ç¾å°åãä¸ä¹±åµå¥ã使ç¨å¤é¾
cssåjsãç»æè¡ä¸ºè¡¨ç°çå离
15 xhtmlåhtmlæä»ä¹åºå«?
-
ä¸ä¸ªæ¯åè½ä¸çå·®å«
- ä¸»è¦æ¯
XHTMLå¯å ¼å®¹å大æµè§å¨ãææºä»¥åPDAï¼å¹¶ä¸æµè§å¨ä¹è½å¿«éæ£ç¡®å°ç¼è¯ç½é¡µ
- ä¸»è¦æ¯
-
å¦å¤æ¯ä¹¦åä¹ æ¯çå·®å«
XHTMLå ç´ å¿ é¡»è¢«æ£ç¡®å°åµå¥ï¼éåï¼åºå大å°åï¼ææ¡£å¿ é¡»æ¥ææ ¹å ç´
16 Doctypeä½ç¨? ä¸¥æ ¼æ¨¡å¼ä¸æ··ææ¨¡å¼å¦ä½åºåï¼å®ä»¬æä½æä¹?
- 页é¢è¢«å è½½çæ¶ï¼
linkä¼åæ¶è¢«å è½½ï¼è@imort页é¢è¢«å è½½çæ¶ï¼linkä¼åæ¶è¢«å è½½ï¼è@importå¼ç¨çCSSä¼çå°é¡µé¢è¢«å è½½å®åå è½½importåªå¨IE5以䏿è½è¯å«ï¼èlinkæ¯XHTMLæ ç¾ï¼æ å ¼å®¹é®é¢linkæ¹å¼çæ ·å¼çæé é«äº@importçæé <!DOCTYPE>声æä½äºææ¡£ä¸çæåé¢ï¼å¤äº<html>æ ç¾ä¹åãåç¥æµè§å¨çè§£æå¨ï¼ ç¨ä»ä¹ææ¡£ç±»å è§èæ¥è§£æè¿ä¸ªææ¡£- ä¸¥æ ¼æ¨¡å¼çæçå
JSè¿ä½æ¨¡å¼æ¯ 以该æµè§å¨æ¯æçæé«æ åè¿è¡ - 卿··ææ¨¡å¼ä¸ï¼é¡µé¢ä»¥å®½æ¾çååå
¼å®¹çæ¹å¼æ¾ç¤ºã模æè弿µè§å¨çè¡ä¸ºä»¥é²æ¢ç«ç¹æ æ³å·¥ä½ã
DOCTYPEä¸åå¨ææ ¼å¼ä¸æ£ç¡®ä¼å¯¼è´ææ¡£ä»¥æ··ææ¨¡å¼åç°
17 è¡å å ç´ æåªäºï¼å级å ç´ æåªäºï¼ 空(void)å ç´ æé£äºï¼è¡å å ç´ åå级å ç´ æä»ä¹åºå«ï¼
- è¡å
å
ç´ æï¼
a b span img input select strong - å级å
ç´ æï¼
div ul ol li dl dt dd h1 h2 h3 h4â¦p - 空å
ç´ ï¼
<br> <hr> <img> <input> <link> <meta> - è¡å å ç´ ä¸å¯ä»¥è®¾ç½®å®½é«ï¼ä¸ç¬å ä¸è¡
- å级å ç´ å¯ä»¥è®¾ç½®å®½é«ï¼ç¬å ä¸è¡
18 HTMLå ¨å±å±æ§(global attribute)æåªäº
class:为å ç´ è®¾ç½®ç±»æ è¯data-*: 为å ç´ å¢å èªå®ä¹å±æ§draggable: 设置å ç´ æ¯å¦å¯ææ½id: å ç´idï¼ææ¡£å å¯ä¸lang: å ç´ å 容ççè¯è¨style: è¡åcssæ ·å¼title: å ç´ ç¸å ³ç建议信æ¯
19 CanvasåSVGæä»ä¹åºå«ï¼
svgç»å¶åºæ¥çæ¯ä¸ä¸ªå¾å½¢çå ç´ é½æ¯ç¬ç«çDOMèç¹ï¼è½å¤æ¹ä¾¿çç»å®äºä»¶æç¨æ¥ä¿®æ¹ãcanvasè¾åºçæ¯ä¸æ´å¹ ç»å¸svgè¾åºçå¾å½¢æ¯ç¢éå¾å½¢ï¼åæå¯ä»¥ä¿®æ¹åæ°æ¥èªç±æ¾å¤§ç¼©å°ï¼ä¸ä¼æ¯çåé¯é½¿ãècanvasè¾åºæ éç»å¸ï¼å°±åä¸å¼ å¾ç䏿 ·ï¼æ¾å¤§ä¼å¤±çæè é¯é½¿
20 HTML5 为ä»ä¹åªéè¦å
HTML5 ä¸åºäº SGMLï¼å æ¤ä¸éè¦å¯¹DTDè¿è¡å¼ç¨ï¼ä½æ¯éè¦doctypeæ¥è§èæµè§å¨çè¡ä¸º
- è
HTML4.01åºäºSGML,æä»¥éè¦å¯¹DTDè¿è¡å¼ç¨ï¼æè½åç¥æµè§å¨ææ¡£æä½¿ç¨çææ¡£ç±»å
21 å¦ä½å¨é¡µé¢ä¸å®ç°ä¸ä¸ªåå½¢çå¯ç¹å»åºåï¼
svg
border-radius
- 纯
jså®ç° éè¦æ±ä¸ä¸ªç¹å¨ä¸å¨åä¸ç®åç®æ³ãè·åé¼ æ åæ çç
22 ç½é¡µéªè¯ç æ¯å¹²åçï¼æ¯ä¸ºäºè§£å³ä»ä¹å®å
¨é®é¢
- åºåç¨æ·æ¯è®¡ç®æºè¿æ¯äººçå
Œ
±å
¨èªå¨ç¨åºãå¯ä»¥é²æ¢æ¶æç ´è§£å¯ç ãå·ç¥¨ã论åçæ°´
- ææé²æ¢é»å®¢å¯¹æä¸ä¸ªç¹å®æ³¨åç¨æ·ç¨ç¹å®ç¨åºæ´åç ´è§£æ¹å¼è¿è¡ä¸æçç»éå°è¯
23 viewport
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
// width 设置viewport宽度ï¼ä¸ºä¸ä¸ªæ£æ´æ°ï¼æå符串âdevice-widthâ
// device-width 设å¤å®½åº¦
// height 设置viewporté«åº¦ï¼ä¸è¬è®¾ç½®äºå®½åº¦ï¼ä¼èªå¨è§£æåºé«åº¦ï¼å¯ä»¥ä¸ç¨è®¾ç½®
// initial-scale é»è®¤ç¼©æ¾æ¯ä¾ï¼åå§ç¼©æ¾æ¯ä¾ï¼ï¼ä¸ºä¸ä¸ªæ°åï¼å¯ä»¥å¸¦å°æ°
// minimum-scale å
è®¸ç¨æ·æå°ç¼©æ¾æ¯ä¾ï¼ä¸ºä¸ä¸ªæ°åï¼å¯ä»¥å¸¦å°æ°
// maximum-scale å
è®¸ç¨æ·æå¤§ç¼©æ¾æ¯ä¾ï¼ä¸ºä¸ä¸ªæ°åï¼å¯ä»¥å¸¦å°æ°
// user-scalable æ¯å¦å
许æå¨ç¼©æ¾
- 延伸æé®
- ææ ·å¤ç ç§»å¨ç«¯
1px 被 æ¸²ææ 2px é®é¢
HTML5 ä¸åºäº SGMLï¼å æ¤ä¸éè¦å¯¹DTDè¿è¡å¼ç¨ï¼ä½æ¯éè¦doctypeæ¥è§èæµè§å¨çè¡ä¸ºHTML4.01åºäºSGML,æä»¥éè¦å¯¹DTDè¿è¡å¼ç¨ï¼æè½åç¥æµè§å¨ææ¡£æä½¿ç¨çææ¡£ç±»åsvgborder-radiusjså®ç° éè¦æ±ä¸ä¸ªç¹å¨ä¸å¨åä¸ç®åç®æ³ãè·åé¼ æ åæ çç <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
// width 设置viewport宽度ï¼ä¸ºä¸ä¸ªæ£æ´æ°ï¼æå符串âdevice-widthâ
// device-width 设å¤å®½åº¦
// height 设置viewporté«åº¦ï¼ä¸è¬è®¾ç½®äºå®½åº¦ï¼ä¼èªå¨è§£æåºé«åº¦ï¼å¯ä»¥ä¸ç¨è®¾ç½®
// initial-scale é»è®¤ç¼©æ¾æ¯ä¾ï¼åå§ç¼©æ¾æ¯ä¾ï¼ï¼ä¸ºä¸ä¸ªæ°åï¼å¯ä»¥å¸¦å°æ°
// minimum-scale å
è®¸ç¨æ·æå°ç¼©æ¾æ¯ä¾ï¼ä¸ºä¸ä¸ªæ°åï¼å¯ä»¥å¸¦å°æ°
// maximum-scale å
è®¸ç¨æ·æå¤§ç¼©æ¾æ¯ä¾ï¼ä¸ºä¸ä¸ªæ°åï¼å¯ä»¥å¸¦å°æ°
// user-scalable æ¯å¦å
许æå¨ç¼©æ¾
- ææ ·å¤ç ç§»å¨ç«¯
1px被 渲ææ2pxé®é¢
å±é¨å¤ç
mateæ ç¾ä¸çviewport屿§ ï¼initial-scale设置为1remæç §è®¾è®¡ç¨¿æ åèµ°ï¼å¤å å©ç¨transfromeçscale(0.5)缩å°ä¸åå³å¯ï¼
å ¨å±å¤ç
mateæ ç¾ä¸çviewport屿§ ï¼initial-scale设置为0.5remæç §è®¾è®¡ç¨¿æ åèµ°å³å¯
24 渲æä¼å
-
ç¦æ¢ä½¿ç¨
iframeï¼é»å¡ç¶ææ¡£onloadäºä»¶ï¼iframeä¼é»å¡ä¸»é¡µé¢çOnloadäºä»¶- æç´¢å¼æçæ£ç´¢ç¨åºæ æ³è§£è¯»è¿ç§é¡µé¢ï¼ä¸å©äºSEO
iframeå主页é¢å ±äº«è¿æ¥æ± ï¼èæµè§å¨å¯¹ç¸ååçè¿æ¥æéå¶ï¼æä»¥ä¼å½±å页é¢çå¹¶è¡å è½½- 使ç¨
iframeä¹åéè¦èèè¿ä¸¤ä¸ªç¼ºç¹ã妿éè¦ä½¿ç¨iframeï¼æå¥½æ¯éè¿javascript - 卿ç»
iframeæ·»åsrc屿§å¼ï¼è¿æ ·å¯ä»¥ç»å¼ä»¥ä¸ä¸¤ä¸ªé®é¢
-
ç¦æ¢ä½¿ç¨
gifå¾çå®ç°loadingææï¼éä½CPUæ¶èï¼æåæ¸²ææ§è½ï¼ -
使ç¨
CSS3代ç 代æ¿JSå¨ç»ï¼å°½å¯è½é¿å éç»éæä»¥ååæµï¼ -
对äºä¸äºå°å¾æ ï¼å¯ä»¥ä½¿ç¨base64ä½ç¼ç ï¼ä»¥åå°ç½ç»è¯·æ±ãä½ä¸å»ºè®®å¤§å¾ä½¿ç¨ï¼æ¯è¾èè´¹
CPU- å°å¾æ ä¼å¿å¨äº
- åå°
HTTPè¯·æ± - é¿å æä»¶è·¨å
- ä¿®æ¹åæ¶çæ
- åå°
- å°å¾æ ä¼å¿å¨äº
-
页é¢å¤´é¨ç
<style></style><script</script>ä¼é»å¡é¡µé¢ï¼ï¼å 为Rendererè¿ç¨ä¸JS线ç¨å渲æçº¿ç¨æ¯äºæ¥çï¼ -
页é¢ä¸ç©ºç
hrefåsrcä¼é»å¡é¡µé¢å ¶ä»èµæºçå è½½ (é»å¡ä¸è½½è¿ç¨) -
ç½é¡µ
Gzipï¼CDNæç®¡ï¼dataç¼å ï¼å¾çæå¡å¨ -
åç«¯æ¨¡æ¿ JS+æ°æ®ï¼åå°ç±äº
HTMLæ ç¾å¯¼è´ç带宽浪费ï¼å端ç¨åéä¿åAJAX请æ±ç»æï¼æ¯æ¬¡æä½æ¬å°åéï¼ä¸ç¨è¯·æ±ï¼åå°è¯·æ±æ¬¡æ° -
ç¨
innerHTML代æ¿DOMæä½ï¼åå°DOMæä½æ¬¡æ°ï¼ä¼åjavascriptæ§è½ -
å½éè¦è®¾ç½®çæ ·å¼å¾å¤æ¶è®¾ç½®
classNameè䏿¯ç´æ¥æä½style -
å°ç¨å ¨å±åéãç¼å
DOMèç¹æ¥æ¾çç»æãåå°IO读åæä½ -
å¾çé¢å è½½ï¼å°æ ·å¼è¡¨æ¾å¨é¡¶é¨ï¼å°èæ¬æ¾å¨åºé¨ å 䏿¶é´æ³
-
对æ®éçç½ç«æä¸ä¸ªç»ä¸çæè·¯ï¼å°±æ¯å°½éåå端ä¼åãåå°æ°æ®åºæä½ãåå°ç£ç
IO
25 meta viewportç¸å ³
<!DOCTYPE html> <!--H5æ å声æï¼ä½¿ç¨ HTML5 doctypeï¼ä¸åºå大å°å-->
<head lang=âenâ> <!--æ åç lang 屿§åæ³-->
<meta charset=âutf-8â²> <!--å£°æææ¡£ä½¿ç¨çå符ç¼ç -->
<meta http-equiv=âX-UA-Compatibleâ content=âIE=edge,chrome=1â³/> <!--ä¼å
ä½¿ç¨ IE ææ°çæ¬å Chrome-->
<meta name=âdescriptionâ content=âä¸è¶
è¿150个å符â/> <!--é¡µé¢æè¿°-->
<meta name=âkeywordsâ content=ââ/> <!-- 页é¢å
³é®è¯-->
<meta name=âauthorâ content=âname, [email protected]â/> <!--ç½é¡µä½è
-->
<meta name=ârobotsâ content=âindex,followâ/> <!--æç´¢å¼ææå-->
<meta name=âviewportâ content=âinitial-scale=1, maximum-scale=3, minimum-scale=1, user-scalable=noâ> <!--为移å¨è®¾å¤æ·»å viewport-->
<meta name=âapple-mobile-web-app-titleâ content=âæ é¢â> <!--iOS è®¾å¤ begin-->
<meta name=âapple-mobile-web-app-capableâ content=âyesâ/> <!--æ·»å å°ä¸»å±åçæ é¢ï¼iOS 6 æ°å¢ï¼
æ¯å¦å¯ç¨ WebApp å
¨å±æ¨¡å¼ï¼å é¤è¹æé»è®¤çå·¥å
·æ åèåæ -->
<meta name=âapple-itunes-appâ content=âapp-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURLâ>
<!--æ·»å æºè½ App å¹¿åæ¡ Smart App Bannerï¼iOS 6+ Safariï¼-->
<meta name=âapple-mobile-web-app-status-bar-styleâ content=âblackâ/>
<meta name=âformat-detectionâ content=âtelphone=no, email=noâ/> <!--è®¾ç½®è¹æå·¥å
·æ é¢è²-->
<meta name=ârendererâ content=âwebkitâ> <!-- å¯ç¨360æµè§å¨çæé模å¼(webkit)-->
<meta http-equiv=âX-UA-Compatibleâ content=âIE=edgeâ> <!--é¿å
IE使ç¨å
¼å®¹æ¨¡å¼-->
<meta http-equiv=âCache-Controlâ content=âno-siteappâ /> <!--ä¸è®©ç¾åº¦è½¬ç -->
<meta name=âHandheldFriendlyâ content=âtrueâ> <!--é对ææè®¾å¤ä¼åï¼ä¸»è¦æ¯é对ä¸äºèçä¸è¯å«viewportçæµè§å¨ï¼æ¯å¦é»è-->
<meta name=âMobileOptimizedâ content=â320â³> <!--微软çè弿µè§å¨-->
<meta name=âscreen-orientationâ content=âportraitâ> <!--uc强å¶ç«å±-->
<meta name=âx5-orientationâ content=âportraitâ> <!--QQ强å¶ç«å±-->
<meta name=âfull-screenâ content=âyesâ> <!--UC强å¶å
¨å±-->
<meta name=âx5-fullscreenâ content=âtrueâ> <!--QQ强å¶å
¨å±-->
<meta name=âbrowsermodeâ content=âapplicationâ> <!--UCåºç¨æ¨¡å¼-->
<meta name=âx5-page-modeâ content=âappâ> <!-- QQåºç¨æ¨¡å¼-->
<meta name=âmsapplication-tap-highlightâ content=ânoâ> <!--windows phone ç¹å»æ é«å
设置页é¢ä¸ç¼å-->
<meta http-equiv=âpragmaâ content=âno-cacheâ>
<meta http-equiv=âcache-controlâ content=âno-cacheâ>
<meta http-equiv=âexpiresâ content=â0â³>
26 ä½ åç页é¢å¨åªäºæµè§å¨æµè¯è¿ï¼è¿äºæµè§å¨çå æ ¸å嫿¯ä»ä¹?
IE:tridentå æ ¸Firefoxï¼geckoå æ ¸Safari:webkitå æ ¸Opera:以忝prestoå æ ¸ï¼Operaç°å·²æ¹ç¨Google -ChromeçBlinkå æ ¸Chrome:Blink(åºäºwebkitï¼Googleä¸Opera Softwareå ±åå¼å)
27 div+cssçå¸å±è¾tableå¸å±æä»ä¹ä¼ç¹ï¼
- æ¹ççæ¶åæ´æ¹ä¾¿ åªè¦æ¹
cssæä»¶ã - 页é¢å è½½é度æ´å¿«ãç»æåæ¸ æ°ã页颿¾ç¤ºç®æ´ã
- 表ç°ä¸ç»æç¸å离ã
- æäºä¼åï¼
seoï¼æç´¢å¼ææ´åå¥½ï¼æåæ´å®¹æé åã
28 aï¼imgçaltä¸titleæä½å¼åï¼bï¼strongä¸emçå¼åï¼
-
alt(alt text):为ä¸è½æ¾ç¤ºå¾åãçªä½æappletsçç¨æ·ä»£çï¼UAï¼ï¼alt屿§ç¨æ¥æå®æ¿æ¢æåãæ¿æ¢æåçè¯è¨ç±lang屿§æå®ã(å¨IEæµè§å¨ä¸ä¼å¨æ²¡ætitleæ¶æalt彿tool tipæ¾ç¤º) -
title(tool tip):è¯¥å±æ§ä¸ºè®¾ç½®è¯¥å±æ§çå ç´ æä¾å»ºè®®æ§çä¿¡æ¯ -
strong:ç²ä½å¼ºè°æ ç¾ï¼å¼ºè°ï¼è¡¨ç¤ºå 容çéè¦æ§ -
em:æä½å¼ºè°æ ç¾ï¼æ´å¼ºç强è°ï¼è¡¨ç¤ºå 容ç强è°ç¹
29 ä½ è½æè¿°ä¸ä¸æ¸è¿å¢å¼ºåä¼é é级ä¹é´çä¸åå
- æ¸è¿å¢å¼ºï¼é对ä½çæ¬æµè§å¨è¿è¡æå»ºé¡µé¢ï¼ä¿è¯æåºæ¬çåè½ï¼ç¶ååé对é«çº§æµè§å¨è¿è¡ææã交äºçæ¹è¿å追å åè½è¾¾å°æ´å¥½çç¨æ·ä½éªã
- ä¼é é级ï¼ä¸å¼å§å°±æå»ºå®æ´çåè½ï¼ç¶ååé对ä½çæ¬æµè§å¨è¿è¡å ¼å®¹ã
åºå«ï¼ä¼é é级æ¯ä»å¤æçç°ç¶å¼å§ï¼å¹¶è¯å¾åå°ç¨æ·ä½éªçä¾ç»ï¼èæ¸è¿å¢å¼ºåæ¯ä»ä¸ä¸ªé常åºç¡çï¼è½å¤èµ·ä½ç¨ççæ¬å¼å§ï¼å¹¶ä¸ææ©å ï¼ä»¥éåºæªæ¥ç¯å¢çéè¦ãé级ï¼åè½è¡°åï¼æå³çå¾åçï¼èæ¸è¿å¢å¼ºåæå³çæåçï¼åæ¶ä¿è¯å ¶æ ¹åºå¤äºå®å ¨å°å¸¦
30 为ä»ä¹å©ç¨å¤ä¸ªå忥åå¨ç½ç«èµæºä¼æ´ææï¼
CDNç¼åæ´æ¹ä¾¿- çªç ´æµè§å¨å¹¶åéå¶
- è约
cookie带宽 - è约主ååçè¿æ¥æ°ï¼ä¼å页é¢ååºé度
- 鲿¢ä¸å¿ è¦çå®å ¨é®é¢
31 ç®è¿°ä¸ä¸srcä¸hrefçåºå«
srcç¨äºæ¿æ¢å½åå ç´ ï¼hrefç¨äºå¨å½åææ¡£åå¼ç¨èµæºä¹é´ç¡®ç«èç³»ãsrcæ¯sourceç缩åï¼æåå¤é¨èµæºçä½ç½®ï¼æåçå 容å°ä¼åµå ¥å°ææ¡£ä¸å½åæ ç¾æå¨ä½ç½®ï¼å¨è¯·æ±srcèµæºæ¶ä¼å°å ¶æåçèµæºä¸è½½å¹¶åºç¨å°ææ¡£å ï¼ä¾å¦jsèæ¬ï¼imgå¾çåframeçå ç´
<script src ="js.js"></script>彿µè§å¨è§£æå°è¯¥å ç´ æ¶ï¼ä¼æåå ¶ä»èµæºçä¸è½½åå¤çï¼ç´å°å°è¯¥èµæºå è½½ãç¼è¯ãæ§è¡å®æ¯ï¼å¾çåæ¡æ¶çå ç´ ä¹å¦æ¤ï¼ç±»ä¼¼äºå°ææåèµæºåµå ¥å½åæ ç¾å ãè¿ä¹æ¯ä¸ºä»ä¹å°jsèæ¬æ¾å¨åºé¨è䏿¯å¤´é¨
hrefæ¯Hypertext Referenceç缩åï¼æåç½ç»èµæºæå¨ä½ç½®ï¼å»ºç«åå½åå ç´ ï¼éç¹ï¼æå½åææ¡£ï¼é¾æ¥ï¼ä¹é´ç龿¥ï¼å¦ææä»¬å¨ææ¡£ä¸æ·»å<link href="common.css" rel="stylesheet"/>é£ä¹æµè§å¨ä¼è¯å«è¯¥ææ¡£ä¸ºcssæä»¶ï¼å°±ä¼å¹¶è¡ä¸è½½èµæºå¹¶ä¸ä¸ä¼åæ¢å¯¹å½åææ¡£çå¤çãè¿ä¹æ¯ä¸ºä»ä¹å»ºè®®ä½¿ç¨linkæ¹å¼æ¥å è½½cssï¼è䏿¯ä½¿ç¨@importæ¹å¼
32 ç¥éçç½é¡µå¶ä½ä¼ç¨å°çå¾çæ ¼å¼æåªäºï¼
png-8ï¼png-24ï¼jpegï¼gifï¼svg
使¯ä¸é¢çé£äºé½ä¸æ¯é¢è¯å®æ³è¦çæåçæ¡ãé¢è¯å®å¸æå¬å°æ¯
Webp,Apngãï¼æ¯å¦æå ³æ³¨æ°ææ¯ï¼æ°é²äºç©ï¼
- Webpï¼
WebPæ ¼å¼ï¼è°·æï¼googleï¼å¼åçä¸ç§æ¨å¨å å¿«å¾çå è½½é度çå¾çæ ¼å¼ãå¾çå缩ä½ç§¯å¤§çº¦åªæJPEGç2/3ï¼å¹¶è½èç大éçæå¡å¨å¸¦å®½èµæºåæ°æ®ç©ºé´ãFacebook Ebayçç¥åç½ç«å·²ç»å¼å§æµè¯å¹¶ä½¿ç¨WebPæ ¼å¼ã - å¨è´¨éç¸åçæ
åµä¸ï¼WebPæ ¼å¼å¾åçä½ç§¯è¦æ¯JPEGæ ¼å¼å¾åå°
40%ã - Apngï¼å
¨ç§°æ¯
âAnimated Portable Network Graphicsâ, æ¯PNGçä½å¾å¨ç»æ©å±ï¼å¯ä»¥å®ç°pngæ ¼å¼ç卿å¾çææã04å¹´è¯çï¼ä½ä¸ç´å¾ä¸å°å大æµè§å¨ååçæ¯æï¼ç´å°æ¥åå¾å°iOS safari 8çæ¯æï¼ææä»£æ¿GIFæä¸ºä¸ä¸ä»£å¨æå¾æ å
33 å¨css/js代ç ä¸çº¿ä¹åå¼å人åç»å¸¸ä¼ä¼åæ§è½ï¼ä»ç¨æ·å·æ°ç½é¡µå¼å§ï¼ä¸æ¬¡js请æ±ä¸è¬æ åµä¸æåªäºå°æ¹ä¼æç¼åå¤çï¼
dnsç¼åï¼cdnç¼åï¼æµè§å¨ç¼åï¼æå¡å¨ç¼å
33 ä¸ä¸ªé¡µé¢ä¸æå¤§éçå¾çï¼å¤§åçµåç½ç«ï¼ï¼å è½½å¾æ ¢ï¼ä½ æåªäºæ¹æ³ä¼åè¿äºå¾ççå è½½ï¼ç»ç¨æ·æ´å¥½çä½éªã
- å¾çæå è½½ï¼å¨é¡µé¢ä¸çæªå¯è§åºåå¯ä»¥æ·»å ä¸ä¸ªæ»å¨æ¡äºä»¶ï¼å¤æå¾çä½ç½®ä¸æµè§å¨é¡¶ç«¯çè·ç¦»ä¸é¡µé¢çè·ç¦»ï¼å¦æåè å°äºåè ï¼ä¼å å è½½ã
- å¦æä¸ºå¹»ç¯çãç¸åçï¼å¯ä»¥ä½¿ç¨å¾çé¢å è½½ææ¯ï¼å°å½åå±ç¤ºå¾ççåä¸å¼ ååä¸å¼ ä¼å ä¸è½½ã
- 妿å¾ç为csså¾çï¼å¯ä»¥ä½¿ç¨
CSSspriteï¼SVGspriteï¼IconfontãBase64çææ¯ã - 妿å¾çè¿å¤§ï¼å¯ä»¥ä½¿ç¨ç¹æ®ç¼ç çå¾çï¼å è½½æ¶ä¼å å è½½ä¸å¼ å缩çç¹å«å害ç缩ç¥å¾ï¼ä»¥æé«ç¨æ·ä½éªã
- 妿å¾çå±ç¤ºåºåå°äºå¾çççå®å¤§å°ï¼åå 卿å¡å¨ç«¯æ ¹æ®ä¸å¡éè¦å è¡è¿è¡å¾çå缩ï¼å¾çå缩å大å°ä¸å±ç¤ºä¸è´ã
34 å¸¸è§æåºç®æ³çæ¶é´å¤æåº¦,空é´å¤æåº¦

35 webå¼åä¸ä¼è¯è·è¸ªçæ¹æ³æåªäº
cookiesessionurléå- éè
input ipå°å
36 HTTP requestæ¥æç»ææ¯ææ ·ç
- é¦è¡æ¯Request-Lineå æ¬ï¼è¯·æ±æ¹æ³ï¼è¯·æ±URIï¼åè®®çæ¬ï¼CRLF
- é¦è¡ä¹åæ¯è¥å¹²è¡è¯·æ±å¤´ï¼å æ¬general-headerï¼request-headeræè entity-headerï¼æ¯ä¸ªä¸è¡ä»¥CRLFç»æ
- 请æ±å¤´åæ¶æ¯å®ä½ä¹é´æä¸ä¸ªCRLFåé
- æ ¹æ®å®é 请æ±éè¦å¯è½å å«ä¸ä¸ªæ¶æ¯å®ä½ ä¸ä¸ªè¯·æ±æ¥æä¾åå¦ä¸ï¼
GET /Protocols/rfc2616/rfc2616-sec5.html HTTP/1.1
Host: www.w3.org
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
Referer: https://www.google.com.hk/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: authorstyle=yes
If-None-Match: "2cc8-3e3073913b100"
If-Modified-Since: Wed, 01 Sep 2004 13:24:52 GMT
name=qiu&age=25
37 HTTP responseæ¥æç»ææ¯ææ ·ç
- é¦è¡æ¯ç¶æè¡å æ¬ï¼HTTPçæ¬ï¼ç¶æç ï¼ç¶ææè¿°ï¼åé¢è·ä¸ä¸ªCRLF
- é¦è¡ä¹åæ¯è¥å¹²è¡ååºå¤´ï¼å æ¬ï¼éç¨å¤´é¨ï¼ååºå¤´é¨ï¼å®ä½å¤´é¨
- ååºå¤´é¨åååºå®ä½ä¹é´ç¨ä¸ä¸ªCRLF空è¡åé
- æåæ¯ä¸ä¸ªå¯è½çæ¶æ¯å®ä½ ååºæ¥æä¾åå¦ä¸ï¼
HTTP/1.1 200 OK
Date: Tue, 08 Jul 2014 05:28:43 GMT
Server: Apache/2
Last-Modified: Wed, 01 Sep 2004 13:24:52 GMT
ETag: "40d7-3e3073913b100"
Accept-Ranges: bytes
Content-Length: 16599
Cache-Control: max-age=21600
Expires: Tue, 08 Jul 2014 11:28:43 GMT
P3P: policyref="http://www.w3.org/2001/05/P3P/p3p.xml"
Content-Type: text/html; charset=iso-8859-1
{"name": "qiu", "age": 25}
äºãCSSé¨å
1 css spriteæ¯ä»ä¹,æä»ä¹ä¼ç¼ºç¹
-
æ¦å¿µï¼å°å¤ä¸ªå°å¾çæ¼æ¥å°ä¸ä¸ªå¾çä¸ãéè¿
background-positionåå ç´ å°ºå¯¸è°èéè¦æ¾ç¤ºçèæ¯å¾æ¡ã -
ä¼ç¹ï¼
- åå°
HTTPè¯·æ±æ°ï¼æå¤§å°æé«é¡µé¢å è½½é度 - å¢å å¾çä¿¡æ¯éå¤åº¦ï¼æé«å缩æ¯ï¼åå°å¾ç大å°
- æ´æ¢é£æ ¼æ¹ä¾¿ï¼åªéå¨ä¸å¼ æå å¼ å¾çä¸ä¿®æ¹é¢è²ææ ·å¼å³å¯å®ç°
- åå°
-
缺ç¹ï¼
- å¾çå并麻ç¦
- ç»´æ¤éº»ç¦ï¼ä¿®æ¹ä¸ä¸ªå¾çå¯è½éè¦ä»æ°å¸å±æ´ä¸ªå¾çï¼æ ·å¼
2 display: none;ä¸visibility: hidden;çåºå«
-
èç³»ï¼å®ä»¬é½è½è®©å ç´ ä¸å¯è§
-
åºå«ï¼
display:none;ä¼è®©å ç´ å®å ¨ä»æ¸²ææ 䏿¶å¤±ï¼æ¸²æçæ¶åä¸å æ®ä»»ä½ç©ºé´ï¼visibility: hidden;ä¸ä¼è®©å ç´ ä»æ¸²ææ æ¶å¤±ï¼æ¸²æå¸å ç´ ç»§ç»å æ®ç©ºé´ï¼åªæ¯å 容ä¸å¯è§display: none;æ¯éç»§æ¿å±æ§ï¼ååèç¹æ¶å¤±ç±äºå ç´ ä»æ¸²ææ æ¶å¤±é æï¼éè¿ä¿®æ¹ååèç¹å±æ§æ æ³æ¾ç¤ºï¼visibility: hidden;æ¯ç»§æ¿å±æ§ï¼ååèç¹æ¶å¤±ç±äºç»§æ¿äºhiddenï¼éè¿è®¾ç½®visibility: visible;å¯ä»¥è®©ååèç¹æ¾å¼- ä¿®æ¹å¸¸è§æµä¸å
ç´ ç
displayé常ä¼é æææ¡£éæãä¿®æ¹visibility屿§åªä¼é ææ¬å ç´ çéç»ã - 读å±å¨ä¸ä¼è¯»å
display: none;å ç´ å 容ï¼ä¼è¯»åvisibility: hidden;å ç´ å 容
3 linkä¸@importçåºå«
linkæ¯HTMLæ¹å¼ï¼@importæ¯CSSæ¹å¼linkæå¤§éåº¦æ¯æå¹¶è¡ä¸è½½ï¼@importè¿å¤åµå¥å¯¼è´ä¸²è¡ä¸è½½ï¼åºç°FOUClinkå¯ä»¥éè¿rel="alternate stylesheet"æå®åéæ ·å¼- æµè§å¨å¯¹
linkæ¯ææ©äº@importï¼å¯ä»¥ä½¿ç¨@importå¯¹èæµè§å¨éèæ ·å¼ @importå¿ é¡»å¨æ ·å¼è§åä¹åï¼å¯ä»¥å¨cssæä»¶ä¸å¼ç¨å ¶ä»æä»¶- æ»ä½æ¥è¯´ï¼
linkä¼äº@import
4 ä»ä¹æ¯FOUC?å¦ä½é¿å
Flash Of Unstyled Contentï¼ç¨æ·å®ä¹æ ·å¼è¡¨å è½½ä¹åæµè§å¨ä½¿ç¨é»è®¤æ ·å¼æ¾ç¤ºææ¡£ï¼ç¨æ·æ ·å¼å 载渲æä¹åå仿°æ¾ç¤ºææ¡£ï¼é æé¡µé¢éªçã- è§£å³æ¹æ³ï¼ææ ·å¼è¡¨æ¾å°ææ¡£ç
head
5 å¦ä½å建åçº§æ ¼å¼åä¸ä¸æ(block formatting context),BFCæä»ä¹ç¨
-
å建è§åï¼
- æ ¹å ç´
- æµ®å¨å
ç´ ï¼
float䏿¯noneï¼ - ç»å¯¹å®ä½å
ç´ ï¼
positionåå¼ä¸ºabsoluteæfixedï¼ displayåå¼ä¸ºinline-block,table-cell,table-caption,flex,inline-flexä¹ä¸çå ç´overflow䏿¯visibleçå ç´
-
ä½ç¨ï¼
- å¯ä»¥å 嫿µ®å¨å ç´
- ä¸è¢«æµ®å¨å ç´ è¦ç
- 黿¢ç¶åå
ç´ ç
marginæå
6 display,float,positionçå ³ç³»
- 妿
display为noneï¼é£ä¹positionåfloaté½ä¸èµ·ä½ç¨ï¼è¿ç§æ åµä¸å ç´ ä¸äº§çæ¡ - å¦åï¼å¦æ
positionå¼ä¸ºabsoluteæèfixedï¼æ¡å°±æ¯ç»å¯¹å®ä½çï¼floatç计ç®å¼ä¸ºnoneï¼displayæ ¹æ®ä¸é¢çè¡¨æ ¼è¿è¡è°æ´ã - å¦åï¼å¦æ
float䏿¯noneï¼æ¡æ¯æµ®å¨çï¼displayæ ¹æ®ä¸è¡¨è¿è¡è°æ´ - å¦åï¼å¦æå
ç´ æ¯æ ¹å
ç´ ï¼
displayæ ¹æ®ä¸è¡¨è¿è¡è°æ´ - å
¶ä»æ
åµä¸
displayçå¼ä¸ºæå®å¼ - æ»ç»èµ·æ¥ï¼ç»å¯¹å®ä½ãæµ®å¨ãæ ¹å
ç´ é½éè¦è°æ´
display
7 æ¸ é¤æµ®å¨çå ç§æ¹å¼ï¼åèªçä¼ç¼ºç¹
- ç¶çº§
divå®ä¹height - ç»å°¾å¤å 空
divæ ç¾clear:both - ç¶çº§
divå®ä¹ä¼ªç±»:afteråzoom - ç¶çº§
divå®ä¹overflow:hidden - ç¶çº§
div乿µ®å¨ï¼éè¦å®ä¹å®½åº¦ - ç»å°¾å¤å
bræ ç¾clear:both - æ¯è¾å¥½çæ¯ç¬¬3ç§æ¹å¼ï¼å¥½å¤ç½ç«é½è¿ä¹ç¨
8 为ä»ä¹è¦åå§åCSSæ ·å¼?
- å 为æµè§å¨çå
¼å®¹é®é¢ï¼ä¸åæµè§å¨å¯¹æäºæ ç¾çé»è®¤å¼æ¯ä¸åçï¼å¦ææ²¡å¯¹
CSSåå§åå¾å¾ä¼åºç°æµè§å¨ä¹é´ç页颿¾ç¤ºå·®å¼ã - å½ç¶ï¼åå§åæ ·å¼ä¼å¯¹
SEOæä¸å®çå½±åï¼ä½é±¼åçæä¸å¯å ¼å¾ï¼ä½åæ±å½±åæå°çæ åµä¸åå§å
9 css3æåªäºæ°ç¹æ§
- æ°å¢åç§
csséæ©å¨ - åè§
border-radius - å¤åå¸å±
- é´å½±ååå°
- æåç¹æ
text-shadow - çº¿æ§æ¸å
- æè½¬
transform
CSS3æ°å¢ä¼ªç±»æé£äºï¼
p:first-of-typeéæ©å±äºå ¶ç¶å ç´ çé¦ä¸ª<p>å ç´ çæ¯ä¸ª<p>å ç´ ãp:last-of-typeéæ©å±äºå ¶ç¶å ç´ çæå<p>å ç´ çæ¯ä¸ª<p>å ç´ ãp:only-of-typeéæ©å±äºå ¶ç¶å ç´ å¯ä¸ç<p>å ç´ çæ¯ä¸ª<p>å ç´ ãp:only-childéæ©å±äºå ¶ç¶å ç´ çå¯ä¸åå ç´ çæ¯ä¸ª<p>å ç´ ãp:nth-child(2)éæ©å±äºå ¶ç¶å ç´ ç第äºä¸ªåå ç´ çæ¯ä¸ª<p>å ç´ ã:afterå¨å ç´ ä¹åæ·»å å 容,ä¹å¯ä»¥ç¨æ¥åæ¸ é¤æµ®å¨ã:beforeå¨å ç´ ä¹åæ·»å å 容:enabled:disabledæ§å¶è¡¨åæ§ä»¶çç¦ç¨ç¶æã:checkedåéæ¡æå¤éæ¡è¢«éä¸
10 displayæåªäºå¼ï¼è¯´æä»ä»¬çä½ç¨
block象åç±»åå ç´ ä¸æ ·æ¾ç¤ºãnone缺çå¼ã象è¡å å ç´ ç±»å䏿 ·æ¾ç¤ºãinline-block象è¡å å ç´ ä¸æ ·æ¾ç¤ºï¼ä½å ¶å 容象åç±»åå ç´ ä¸æ ·æ¾ç¤ºãlist-item象åç±»åå ç´ ä¸æ ·æ¾ç¤ºï¼å¹¶æ·»å æ ·å¼å表æ è®°ãtableæ¤å ç´ ä¼ä½ä¸ºåçº§è¡¨æ ¼æ¥æ¾ç¤ºinheritè§å®åºè¯¥ä»ç¶å ç´ ç»§æ¿display屿§çå¼
11 ä»ç»ä¸ä¸æ åçCSSçç忍¡åï¼ä½çæ¬IEçç忍¡åæä»ä¹ä¸åçï¼
- æä¸¤ç§ï¼
IEç忍¡åãW3Cç忍¡åï¼ - çæ¨¡åï¼ å
容(content)ãå¡«å
(
padding)ãè¾¹ç(margin)ã è¾¹æ¡(border)ï¼ - åº å«ï¼
IEçcontenté¨åæborderåpadding计ç®äºè¿å»;
12 CSSä¼å çº§ç®æ³å¦ä½è®¡ç®ï¼
- ä¼å 级就è¿ååï¼åæéæ åµä¸æ ·å¼å®ä¹æè¿è 为å
- è½½å ¥æ ·å¼ä»¥æåè½½å ¥çå®ä½ä¸ºå
- ä¼å
级为:
!important > id > class > tagimportantæ¯ å èä¼å 级é«
13 对BFCè§èççè§£ï¼
- å®å³å®äºå ç´ å¦ä½å¯¹å ¶å 容è¿è¡å®ä½,以åä¸å ¶ä»å ç´ çå ³ç³»åç¸äºä½ç¨
14 è°è°æµ®å¨åæ¸ é¤æµ®å¨
- æµ®å¨çæ¡å¯ä»¥åå·¦æåå³ç§»å¨ï¼ç´å°ä»çå¤è¾¹ç¼ç¢°å°å 嫿¡æå¦ä¸ä¸ªæµ®å¨æ¡çè¾¹æ¡ä¸ºæ¢ãç±äºæµ®å¨æ¡ä¸å¨ææ¡£çæ®éæµä¸ï¼æä»¥ææ¡£çæ®éæµçåæ¡è¡¨ç°å¾å°±åæµ®å¨æ¡ä¸åå¨ä¸æ ·ãæµ®å¨ç忡伿¼æµ®å¨ææ¡£æ®éæµçåæ¡ä¸
15 positionçå¼ï¼ relativeåabsoluteå®ä½åç¹æ¯
absoluteï¼çæç»å¯¹å®ä½çå ç´ ï¼ç¸å¯¹äºstaticå®ä½ä»¥å¤ç第ä¸ä¸ªç¶å ç´ è¿è¡å®ä½fixedï¼çæç»å¯¹å®ä½çå ç´ ï¼ç¸å¯¹äºæµè§å¨çªå£è¿è¡å®ä½relativeï¼çæç¸å¯¹å®ä½çå ç´ ï¼ç¸å¯¹äºå ¶æ£å¸¸ä½ç½®è¿è¡å®ä½staticé»è®¤å¼ã没æå®ä½ï¼å ç´ åºç°å¨æ£å¸¸çæµä¸inheritè§å®ä»ç¶å ç´ ç»§æ¿position屿§çå¼
16 display:inline-block ä»ä¹æ¶åä¸ä¼æ¾ç¤ºé´éï¼(æºç¨)
- ç§»é¤ç©ºæ ¼
- 使ç¨
marginè´å¼ - 使ç¨
font-size:0 letter-spacingword-spacing
17 PNG,GIF,JPGçåºå«åå¦ä½é
-
GIF8ä½åç´ ï¼256è²- æ æå缩
- æ¯æç®åå¨ç»
- æ¯æ
booleanéæ - éåç®åå¨ç»
-
JPEG- é¢è²éäº
256 - ææå缩
- 坿§å¶å缩质é
- 䏿¯æéæ
- éåç §ç
- é¢è²éäº
-
PNG- æ
PNG8åtruecolor PNG PNG8类似GIFé¢è²ä¸é为256ï¼æä»¶å°ï¼æ¯æalphaéæåº¦ï¼æ å¨ç»- éå徿 ãèæ¯ãæé®
- æ
18 è¡å å ç´ float:left忝å¦å为å级å ç´ ï¼
- æµ®å¨åï¼è¡å
å
ç´ ä¸ä¼æä¸ºåç¶å
ç´ ï¼ä½æ¯å¯ä»¥è®¾ç½®å®½é«ãè¡å
å
ç´ è¦æ³åæåç¶å
ç´ ï¼å ä¸è¡ï¼ç´æ¥è®¾ç½®
display:block;ãä½å¦æå ç´ è®¾ç½®äºæµ®å¨åå设置display:block;é£å°±ä¸ä¼å ä¸è¡ã
19 å¨ç½é¡µä¸çåºè¯¥ä½¿ç¨å¥æ°è¿æ¯å¶æ°çåä½ï¼ä¸ºä»ä¹å¢ï¼
- å¶æ°åå·ç¸å¯¹æ´å®¹æå web 设计çå ¶ä»é¨åæææ¯ä¾å ³ç³»
20 ::before å :afterä¸ååå·åååå· æä»ä¹åºå«ï¼è§£éä¸ä¸è¿2个伪å ç´ çä½ç¨
- ååå·(
:)ç¨äºCSS3伪类ï¼ååå·(::)ç¨äºCSS3伪å ç´ - ç¨äºåºå伪类å伪å ç´
21 妿éè¦æå¨åå¨ç»ï¼ä½ 认为æå°æ¶é´é´éæ¯å¤ä¹ ï¼ä¸ºä»ä¹ï¼ï¼é¿éï¼
- 夿°æ¾ç¤ºå¨é»è®¤é¢çæ¯
60Hzï¼å³1ç§å·æ°60æ¬¡ï¼æä»¥çè®ºä¸æå°é´é为1/60ï¼1000ms ï¼ 16.7ms
22 CSSåå¹¶æ¹æ³
- é¿å
使ç¨
@importå¼å ¥å¤ä¸ªcssæä»¶ï¼å¯ä»¥ä½¿ç¨CSSå·¥å ·å°CSSå并为ä¸ä¸ªCSSæä»¶ï¼ä¾å¦ä½¿ç¨Sass\Compassç
23 CSSä¸åéæ©å¨çæé(CSSå±å çè§å)
ï¼importantè§åæéè¦ï¼å¤§äºå ¶å®è§å- è¡å
æ ·å¼è§åï¼å
1000 - 对äºéæ©å¨ä¸ç»å®çå个
ID屿§å¼ï¼å100 - 对äºéæ©å¨ä¸ç»å®çåä¸ªç±»å±æ§ã屿§éæ©å¨æè
ä¼ªç±»éæ©å¨ï¼å
10 - 对äºéæ©å ¶ä¸ç»å®çå个å ç´ æ ç¾éæ©å¨ï¼å 1
- 妿æå¼ä¸æ ·ï¼åæç §æ ·å¼è§åçå åé¡ºåºæ¥åºç¨ï¼é¡ºåºé åçè¦çé åçè§å
24 ååºä½ æç¥éå¯ä»¥æ¹å页é¢å¸å±ç屿§
positionãdisplayãfloatãwidthãheightãmarginãpaddingãtopãleftãrightã`
25 CSS卿§è½ä¼åæ¹é¢çå®è·µ
csså缩ä¸åå¹¶ãGzipå缩cssæä»¶æ¾å¨headéãä¸è¦ç¨@import- å°½éç¨ç¼©åãé¿å ç¨æ»¤éãåç使ç¨éæ©å¨
26 CSS3å¨ç»ï¼ç®åå¨ç»çå®ç°ï¼å¦æè½¬çï¼
- ä¾é
CSS3䏿åºçä¸ä¸ªå±æ§ï¼transitionãtransformãanimation transitionï¼å®ä¹äºå ç´ å¨ååè¿ç¨ä¸æ¯æä¹æ ·çï¼å å«transition-propertyãtransition-durationãtransition-timing-functionãtransition-delayãtransformï¼å®ä¹å ç´ çååç»æï¼å å«rotateãscaleãskewãtranslateãanimationï¼å¨ç»å®ä¹äºå¨ä½çæ¯ä¸å¸§ï¼@keyframesï¼æä»ä¹ææï¼å æ¬animation-nameï¼animation-durationãanimation-timing-functionãanimation-delayãanimation-iteration-countãanimation-direction
27 base64çåçåä¼ç¼ºç¹
- ä¼ç¹å¯ä»¥å å¯ï¼åå°äº
httpè¯·æ± - ç¼ºç¹æ¯éè¦æ¶è
CPUè¿è¡ç¼è§£ç
28 å ç§å¸¸è§çCSSå¸å±
æµä½å¸å±
.left {
float: left;
width: 100px;
height: 200px;
background: red;
}
.right {
float: right;
width: 200px;
height: 200px;
background: blue;
}
.main {
margin-left: 120px;
margin-right: 220px;
height: 200px;
background: green;
}
<div class="container">
<div class="left"></div>
<div class="right"></div>
<div class="main"></div>
</div>
壿¯å¸å±
.container {
margin-left: 120px;
margin-right: 220px;
}
.main {
float: left;
width: 100%;
height:300px;
background: green;
}
.left {
position: relative;
left: -120px;
float: left;
height: 300px;
width: 100px;
margin-left: -100%;
background: red;
}
.right {
position: relative;
right: -220px;
float: right;
height: 300px;
width: 200px;
margin-left: -200px;
background: blue;
}
<div class="container">
<div class="main"></div>
<div class="left"></div>
<div class="right"></div>
</div>
åé£ç¿¼å¸å±
.content {
float: left;
width: 100%;
}
.main {
height: 200px;
margin-left: 110px;
margin-right: 220px;
background: green;
}
.main::after {
content: '';
display: block;
font-size:0;
height: 0;
zoom: 1;
clear: both;
}
.left {
float:left;
height: 200px;
width: 100px;
margin-left: -100%;
background: red;
}
.right {
float: right;
height: 200px;
width: 200px;
margin-left: -200px;
background: blue;
}
<div class="content">
<div class="main"></div>
</div>
<div class="left"></div>
<div class="right"></div>
29 stylus/sass/lessåºå«
- åå ·æâåéâãâæ··åâãâåµå¥âãâç»§æ¿âãâé¢è²æ··åâäºå¤§åºæ¬ç¹æ§
ScssåLESSè¯æ³è¾ä¸ºä¸¥è°¨ï¼LESSè¦æ±ä¸å®è¦ä½¿ç¨å¤§æ¬å·â{}âï¼ScssåStyluså¯ä»¥éè¿ç¼©è¿è¡¨ç¤ºå±æ¬¡ä¸åµå¥å ³ç³»Scssæ å ¨å±åéçæ¦å¿µï¼LESSåStylusæç±»ä¼¼äºå ¶å®è¯è¨çä½ç¨åæ¦å¿µSassæ¯åºäºRubyè¯è¨çï¼èLESSåStyluså¯ä»¥åºäºNodeJSNPMä¸è½½ç¸åºåºåè¿è¡ç¼è¯ï¼
30 postcssçä½ç¨
- å¯ä»¥ç´è§çç解为ï¼å®å°±æ¯ä¸ä¸ªå¹³å°ã为ä»ä¹è¯´å®æ¯ä¸ä¸ªå¹³å°å¢ï¼å 为æä»¬ç´æ¥ç¨å®ï¼æè§ä¸è½å¹²ä»ä¹äºæ ï¼ä½æ¯å¦æè®©ä¸äºæä»¶å¨å®ä¸é¢è·ï¼é£ä¹å°ä¼å¾å¼ºå¤§
PostCSSæä¾äºä¸ä¸ªè§£æå¨ï¼å®è½å¤å°CSSè§£æææ½è±¡è¯æ³æ - éè¿å¨
PostCSSè¿ä¸ªå¹³å°ä¸ï¼æä»¬è½å¤å¼åä¸äºæä»¶ï¼æ¥å¤çæä»¬çCSSï¼æ¯å¦çé¨çï¼autoprefixer postcsså¯ä»¥å¯¹sasså¤çè¿åçcssåå¤ç æå¸¸è§çå°±æ¯autoprefixer
31 cssæ ·å¼ï¼éæ©å¨ï¼çä¼å 级
- è®¡ç®æéç¡®å®
!important- å èæ ·å¼
- ååçä¼å 级é«
32 èªå®ä¹åä½ç使ç¨åºæ¯
- å®£ä¼ /åç/
bannerçåºå®ææ¡ - åä½å¾æ
33 å¦ä½ç¾åCheckBox
labelï¼forï¼åid- éèåçç
input :checked + label
34 伪类å伪å ç´ çåºå«
- ä¼ªç±»è¡¨ç¶æ
- 伪å ç´ æ¯ççæå ç´
- åè ååå·ï¼åè ååå·
35 base64ç使ç¨
- ç¨äºåå°
HTTPè¯·æ± - éç¨äºå°å¾ç
base64çä½ç§¯çº¦ä¸ºåå¾ç4/3
36 èªéåºå¸å±
æè·¯ï¼
- å·¦ä¾§æµ®å¨æè
ç»å¯¹å®ä½ï¼ç¶åå³ä¾§
marginæå¼ - 使ç¨
divå å«ï¼ç¶åé è´marginå½¢æbfc - 使ç¨
flex
37 请ç¨Cssåä¸ä¸ªç®åçå¹»ç¯çææé¡µé¢
ç¥éæ¯è¦ç¨
css3ã使ç¨animationå¨ç»å®ç°ä¸ä¸ªç®åçå¹»ç¯çææ
/**css**/
.ani{
width:480px;
height:320px;
margin:50px auto;
overflow: hidden;
box-shadow:0 0 5px rgba(0,0,0,1);
background-size: cover;
background-position: center;
-webkit-animation-name: "loops";
-webkit-animation-duration: 20s;
-webkit-animation-iteration-count: infinite;
}
@-webkit-keyframes "loops" {
0% {
background:url(http://d.hiphotos.baidu.com/image/w%3D400/sign=c01e6adca964034f0fcdc3069fc27980/e824b899a9014c08e5e38ca4087b02087af4f4d3.jpg) no-repeat;
}
25% {
background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=edee1572e9f81a4c2632edc9e72b6029/30adcbef76094b364d72bceba1cc7cd98c109dd0.jpg) no-repeat;
}
50% {
background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=937dace2552c11dfded1be2353266255/d8f9d72a6059252d258e7605369b033b5bb5b912.jpg) no-repeat;
}
75% {
background:url(http://g.hiphotos.baidu.com/image/w%3D400/sign=7d37500b8544ebf86d71653fe9f9d736/0df431adcbef76095d61f0972cdda3cc7cd99e4b.jpg) no-repeat;
}
100% {
background:url(http://c.hiphotos.baidu.com/image/w%3D400/sign=cfb239ceb0fb43161a1f7b7a10a54642/3b87e950352ac65ce2e73f76f9f2b21192138ad1.jpg) no-repeat;
}
}
38 ä»ä¹æ¯å¤è¾¹è·éå ï¼éå çç»ææ¯ä»ä¹ï¼
å¤è¾¹è·éå å°±æ¯margin-collapse
- å¨CSSå½ä¸ï¼ç¸é»ç两个çåï¼å¯è½æ¯å å¼å ³ç³»ä¹å¯è½æ¯ç¥å å ³ç³»ï¼çå¤è¾¹è·å¯ä»¥ç»åæä¸ä¸ªåç¬çå¤è¾¹è·ãè¿ç§åå¹¶å¤è¾¹è·çæ¹å¼è¢«ç§°ä¸ºæå ï¼å¹¶ä¸å èæç»åæçå¤è¾¹è·ç§°ä¸ºæå å¤è¾¹è·ã
æå ç»æéµå¾ªä¸å计ç®è§åï¼
- 两个ç¸é»çå¤è¾¹è·é½æ¯æ£æ°æ¶ï¼æå ç»ææ¯å®ä»¬ä¸¤è ä¹é´è¾å¤§çå¼ã
- 两个ç¸é»çå¤è¾¹è·é½æ¯è´æ°æ¶ï¼æå ç»ææ¯ä¸¤è ç»å¯¹å¼çè¾å¤§å¼ã
- 两个å¤è¾¹è·ä¸æ£ä¸è´æ¶ï¼æå ç»ææ¯ä¸¤è çç¸å çåã
39 rgba()åopacityçéææææä»ä¹ä¸åï¼
rgba()åopacityé½è½å®ç°éæææï¼ä½æå¤§çä¸åæ¯opacityä½ç¨äºå ç´ ï¼ä»¥åå ç´ å çææå 容çéæåº¦ï¼- è
rgba()åªä½ç¨äºå ç´ çé¢è²æå ¶èæ¯è²ãï¼è®¾ç½®rgbaéæçå ç´ çåå ç´ ä¸ä¼ç»§æ¿éæææï¼ï¼
40 cssä¸å¯ä»¥è®©æåå¨åç´åæ°´å¹³æ¹åä¸éå çä¸¤ä¸ªå±æ§æ¯ä»ä¹ï¼
- åç´æ¹åï¼
line-height - æ°´å¹³æ¹åï¼
letter-spacing
41 å¦ä½åç´å± ä¸ä¸ä¸ªæµ®å¨å ç´ ï¼
/**æ¹æ³ä¸ï¼å·²ç¥å
ç´ çé«å®½**/
#div1{
background-color:#6699FF;
width:200px;
height:200px;
position: absolute; //ç¶å
ç´ éè¦ç¸å¯¹å®ä½
top: 50%;
left: 50%;
margin-top:-100px ; //äºåä¹ä¸çheightï¼width
margin-left: -100px;
}
/**æ¹æ³äº:**/
#div1{
width: 200px;
height: 200px;
background-color: #6699FF;
margin:auto;
position: absolute; //ç¶å
ç´ éè¦ç¸å¯¹å®ä½
left: 0;
top: 0;
right: 0;
bottom: 0;
}
å¦ä½åç´å±
ä¸ä¸ä¸ª<img>?ï¼ç¨æ´ç®ä¾¿çæ¹æ³ãï¼
#container /**<img>ç容å¨è®¾ç½®å¦ä¸**/
{
display:table-cell;
text-align:center;
vertical-align:middle;
}
42 pxåemçåºå«
pxåem齿¯é¿åº¦åä½ï¼åºå«æ¯ï¼pxç弿¯åºå®çï¼æå®æ¯å¤å°å°±æ¯å¤å°ï¼è®¡ç®æ¯è¾å®¹æãemå¾å¼ä¸æ¯åºå®çï¼å¹¶ä¸emä¼ç»§æ¿ç¶çº§å ç´ çåä½å¤§å°ã- æµè§å¨çé»è®¤åä½é«é½æ¯
16pxãæä»¥æªç»è°æ´çæµè§å¨é½ç¬¦å:1em=16pxãé£ä¹12px=0.75em,10px=0.625emã
43 SassãLESSæ¯ä»ä¹ï¼å¤§å®¶ä¸ºä»ä¹è¦ä½¿ç¨ä»ä»¬ï¼
- ä»ä»¬æ¯
CSSé¢å¤çå¨ã仿¯CSSä¸çä¸ç§æ½è±¡å±ãä»ä»¬æ¯ä¸ç§ç¹æ®çè¯æ³/è¯è¨ç¼è¯æCSSã - ä¾å¦Lessæ¯ä¸ç§å¨ææ ·å¼è¯è¨. å°CSSèµäºäºå¨æè¯è¨çç¹æ§ï¼å¦åéï¼ç»§æ¿ï¼è¿ç®ï¼ 彿°.
LESSæ¢å¯ä»¥å¨å®¢æ·ç«¯ä¸è¿è¡ (æ¯æIE 6+,Webkit,Firefox)ï¼ä¹å¯ä¸å¨æå¡ç«¯è¿è¡ (åå©Node.js)
为ä»ä¹è¦ä½¿ç¨å®ä»¬ï¼
- ç»ææ¸ æ°ï¼ä¾¿äºæ©å±ã
- å¯ä»¥æ¹ä¾¿å°å±è½æµè§å¨ç§æè¯æ³å·®å¼ãè¿ä¸ªä¸ç¨å¤è¯´ï¼å°è£ 对- æµè§å¨è¯æ³å·®å¼çéå¤å¤çï¼åå°æ æä¹çæºæ¢°å³å¨ã
- å¯ä»¥è½»æ¾å®ç°å¤éç»§æ¿ã
- å®å ¨å ¼å®¹ CSS 代ç ï¼å¯ä»¥æ¹ä¾¿å°åºç¨å°è项ç®ä¸ãLESS åª- æ¯å¨ CSS è¯æ³ä¸åäºæ©å±ï¼æä»¥èç CSS 代ç ä¹å¯ä»¥ä¸ LESS 代ç ä¸åç¼è¯
44 ç¥écssæä¸ªcontent屿§åï¼æä»ä¹ä½ç¨ï¼æä»ä¹åºç¨ï¼
cssç
content屿§ä¸é¨åºç¨å¨before/after伪å ç´ ä¸ï¼ç¨äºæ¥æå ¥çæå 容ãæå¸¸è§çåºç¨æ¯å©ç¨ä¼ªç±»æ¸ 餿µ®å¨ã
/**ä¸ç§å¸¸è§å©ç¨ä¼ªç±»æ¸
餿µ®å¨ç代ç **/
.clearfix:after {
content:"."; //è¿éå©ç¨å°äºcontent屿§
display:block;
height:0;
visibility:hidden;
clear:both; }
.clearfix {
*zoom:1;
}
45 æ°´å¹³å± ä¸çæ¹æ³
- å
ç´ ä¸ºè¡å
å
ç´ ï¼è®¾ç½®ç¶å
ç´
text-align:center - 妿å
ç´ å®½åº¦åºå®ï¼å¯ä»¥è®¾ç½®å·¦å³
margin为auto; - 妿å
ç´ ä¸ºç»å¯¹å®ä½ï¼è®¾ç½®ç¶å
ç´
position为relativeï¼å ç´ è®¾left:0;right:0;margin:auto; - 使ç¨
flex-boxå¸å±ï¼æå®justify-content屿§ä¸ºcenter display设置为tabel-ceil
46 åç´å± ä¸çæ¹æ³
- å°æ¾ç¤ºæ¹å¼è®¾ç½®ä¸ºè¡¨æ ¼ï¼
display:table-cell,åæ¶è®¾ç½®vertial-alignï¼middle - 使ç¨
flexå¸å±ï¼è®¾ç½®ä¸ºalign-itemï¼center - ç»å¯¹å®ä½ä¸è®¾ç½®
bottom:0,top:0,并设置margin:auto - ç»å¯¹å®ä½ä¸åºå®é«åº¦æ¶è®¾ç½®
top:50%ï¼margin-topå¼ä¸ºé«åº¦ä¸åçè´å¼ - ææ¬åç´å±
ä¸è®¾ç½®
line-height为heightå¼
47 å¦ä½ä½¿ç¨CSSå®ç°ç¡¬ä»¶å éï¼
硬件å 鿝æéè¿å建ç¬ç«çå¤åå¾å±ï¼è®©GPUæ¥æ¸²æè¿ä¸ªå¾å±ï¼ä»èæé«æ§è½ï¼
- ä¸è¬è§¦å硬件å éç
CSS屿§ætransformãopacityãfilterï¼ä¸ºäºé¿å 2Då¨ç»å¨ å¼å§åç»æçæ¶åçrepaintæä½ï¼ä¸è¬ä½¿ç¨tranform:translateZ(0)
48 éç»ååæµï¼éæï¼æ¯ä»ä¹ï¼å¦ä½é¿å ï¼
- DOMçååå½±åå°äºå ç´ çå ä½å±æ§ï¼å®½é«ï¼,æµè§å¨éæ°è®¡ç®å ç´ çå ä½å±æ§ï¼å ¶ä»å ç´ çå ä½
- 屿§åä½ç½®ä¹ä¼åå°å½±åï¼æµè§å¨éè¦éæ°æé æ¸²ææ ï¼è¿ä¸ªè¿ç¨ç§°ä¸ºéæï¼æµè§å¨å°åå°å½±åçé¨å
- éæ°ç»å¶å°å±å¹ä¸çè¿ç¨ç§°ä¸ºéç»ãå¼èµ·éæçåå æ
- æ·»å æè å é¤å¯è§çDOMå ç´ ï¼
- å ç´ ä½ç½®ã尺寸ãå 容æ¹åï¼
- æµè§å¨é¡µé¢åå§åï¼
- æµè§å¨çªå£å°ºå¯¸æ¹åï¼éæä¸å®éç»ï¼éç»ä¸ä¸å®éæï¼
åå°éç»åéæçæ¹æ³ï¼
- ä¸å¨å¸å±ä¿¡æ¯æ¹åæ¶å
DOMæ¥è¯¢ - 使ç¨
cssTextæèclassName䏿¬¡æ§æ¹å屿§ - 使ç¨
fragment - 对äºå¤æ¬¡éæçå ç´ ï¼å¦å¨ç»ï¼ä½¿ç¨ç»å¯¹å®ä½è±ç¦»ææ¡£æµï¼è®©ä»çæ¹åä¸å½±åå°å ¶ä»å ç´
49 说ä¸è¯´css3çanimation
- css3ç
animationæ¯css3æ°å¢çå¨ç»å±æ§ï¼è¿ä¸ªcss3å¨ç»çæ¯ä¸å¸§æ¯éè¿@keyframesæ¥å£°æçï¼keyframes声æäºå¨ç»çåç§°ï¼éè¿fromãtoæè æ¯ç¾åæ¯æ¥å®ä¹ - æ¯ä¸å¸§å¨ç»å
ç´ çç¶æï¼éè¿
animation-nameæ¥å¼ç¨è¿ä¸ªå¨ç»ï¼åæ¶css3å¨ç»ä¹å¯ä»¥å®ä¹å¨ç»è¿è¡çæ¶é¿ãå¨ç»å¼å§æ¶é´ãå¨ç»ææ¾æ¹åãå¨ç»å¾ªç¯æ¬¡æ°ãå¨ç»ææ¾çæ¹å¼ï¼ - è¿äºç¸å
³çå¨ç»å屿§æï¼
animation-nameå®ä¹å¨ç»åãanimation-durationå®ä¹å¨ç»ææ¾çæ¶é¿ãanimation-delayå®ä¹å¨ç»å»¶è¿ææ¾çæ¶é´ãanimation-directionå®ä¹ å¨ç»çææ¾æ¹åãanimation-iteration-countå®ä¹ææ¾æ¬¡æ°ãanimation-fill-modeå®ä¹å¨ç»ææ¾ä¹åçç¶æãanimation-play-stateå®ä¹ææ¾ç¶æï¼å¦æåè¿è¡çãanimation-timing-function - å®ä¹ææ¾çæ¹å¼ï¼å¦æéææ¾ãè°æ¶©ææ¾çã
50 左边宽度åºå®ï¼å³è¾¹èªéåº
左侧åºå®å®½åº¦ï¼å³ä¾§èªéåºå®½åº¦ç两åå¸å±å®ç°
htmlç»æ
<div class="outer">
<div class="left">åºå®å®½åº¦</div>
<div class="right">èªéåºå®½åº¦</div>
</div>
å¨å¤å±
divï¼ç±»å为outerï¼çdivä¸ï¼æä¸¤ä¸ªådivï¼ç±»ååå«ä¸ºleftårightï¼å ¶ä¸left为åºå®å®½åº¦ï¼èright为èªéåºå®½åº¦
æ¹æ³1ï¼å·¦ä¾§divè®¾ç½®ææµ®å¨ï¼float: leftï¼å³ä¾§div宽度ä¼èªæåéåº
.outer {
width: 100%;
height: 500px;
background-color: yellow;
}
.left {
width: 200px;
height: 200px;
background-color: red;
float: left;
}
.right {
height: 200px;
background-color: blue;
}
æ¹æ³2ï¼å¯¹å³ä¾§:divè¿è¡ç»å¯¹å®ä½ï¼ç¶åå设置right=0ï¼å³å¯ä»¥å®ç°å®½åº¦èªéåº
ç»å¯¹å®ä½å ç´ ç第ä¸ä¸ªé«çº§ç¹æ§å°±æ¯å ¶å ·æèªå¨ä¼¸ç¼©çåè½ï¼å½æä»¬å°
width设置为autoçæ¶åï¼æè ä¸è®¾ç½®ï¼é»è®¤ä¸ºautoï¼ï¼ç»å¯¹å®ä½å ç´ ä¼æ ¹æ®å ¶leftårightèªå¨ä¼¸ç¼©å ¶å¤§å°
.outer {
width: 100%;
height: 500px;
background-color: yellow;
position: relative;
}
.left {
width: 200px;
height: 200px;
background-color: red;
}
.right {
height: 200px;
background-color: blue;
position: absolute;
left: 200px;
top:0;
right: 0;
}
æ¹æ³3ï¼å°å·¦ä¾§divè¿è¡ç»å¯¹å®ä½ï¼ç¶åå³ä¾§div设置margin-left: 200px
.outer {
width: 100%;
height: 500px;
background-color: yellow;
position: relative;
}
.left {
width: 200px;
height: 200px;
background-color: red;
position: absolute;
}
.right {
height: 200px;
background-color: blue;
margin-left: 200px;
}
æ¹æ³4ï¼ä½¿ç¨flexå¸å±
.outer {
width: 100%;
height: 500px;
background-color: yellow;
display: flex;
flex-direction: row;
}
.left {
width: 200px;
height: 200px;
background-color: red;
}
.right {
height: 200px;
background-color: blue;
flex: 1;
}
ä¸ãJavaScript
1 éå
-
éå å°±æ¯è½å¤è¯»åå ¶ä»å½æ°å é¨åéç彿°
-
éå æ¯æææè®¿é®å¦ä¸ä¸ªå½æ°ä½ç¨åä¸åéç彿°ï¼å建éå çæå¸¸è§çæ¹å¼å°±æ¯å¨ä¸ä¸ªå½æ°å å建å¦ä¸ä¸ªå½æ°ï¼éè¿å¦ä¸ä¸ªå½æ°è®¿é®è¿ä¸ªå½æ°çå±é¨åé,å©ç¨éå å¯ä»¥çªç ´ä½ç¨é¾å
-
éå çç¹æ§ï¼
- 彿°å ååµå¥å½æ°
- å é¨å½æ°å¯ä»¥å¼ç¨å¤å±çåæ°ååé
- åæ°ååéä¸ä¼è¢«åå¾åæ¶æºå¶åæ¶
è¯´è¯´ä½ å¯¹éå ççè§£
-
使ç¨éå ä¸»è¦æ¯ä¸ºäºè®¾è®¡ç§æçæ¹æ³ååéãéå çä¼ç¹æ¯å¯ä»¥é¿å å ¨å±åéçæ±¡æï¼ç¼ºç¹æ¯éå ä¼å¸¸é©»å åï¼ä¼å¢å¤§å å使ç¨éï¼ä½¿ç¨ä¸å½å¾å®¹æé æå åæ³é²ãå¨jsä¸ï¼å½æ°å³éå ï¼åªæå½æ°æä¼äº§çä½ç¨åçæ¦å¿µ
-
éå çæå¤§ç¨å¤æä¸¤ä¸ªï¼ä¸ä¸ªæ¯å¯ä»¥è¯»å彿°å é¨çåéï¼å¦ä¸ä¸ªå°±æ¯è®©è¿äºåéå§ç»ä¿æå¨å åä¸
-
éå çå¦ä¸ä¸ªç¨å¤ï¼æ¯å°è£ 对象çç§æå±æ§åç§ææ¹æ³
-
好å¤ï¼è½å¤å®ç°å°è£ åç¼åçï¼
-
åå¤ï¼å°±æ¯æ¶èå åã䏿£å½ä½¿ç¨ä¼é æå åæº¢åºçé®é¢
使ç¨éå çæ³¨æç¹
- ç±äºéå ä¼ä½¿å¾å½æ°ä¸çåéé½è¢«ä¿åå¨å åä¸ï¼å åæ¶èå¾å¤§ï¼æä»¥ä¸è½æ»¥ç¨éå ï¼å¦åä¼é æç½é¡µçæ§è½é®é¢ï¼å¨IEä¸å¯è½å¯¼è´å åæ³é²
- è§£å³æ¹æ³æ¯ï¼å¨éåºå½æ°ä¹åï¼å°ä¸ä½¿ç¨çå±é¨åéå ¨é¨å é¤
2 è¯´è¯´ä½ å¯¹ä½ç¨åé¾ççè§£
- ä½ç¨åé¾çä½ç¨æ¯ä¿è¯æ§è¡ç¯å¢éææè®¿é®çåéå彿°æ¯æåºçï¼ä½ç¨åé¾çåéåªè½åä¸è®¿é®ï¼åé访é®å°
window对象å³è¢«ç»æ¢ï¼ä½ç¨åé¾åä¸è®¿é®å鿝ä¸è¢«å 许ç - ç®åç说ï¼ä½ç¨åå°±æ¯åéä¸å½æ°çå¯è®¿é®èå´ï¼å³ä½ç¨åæ§å¶çåéä¸å½æ°çå¯è§æ§åçå½å¨æ
3 JavaScriptååï¼ååé¾ ? æä»ä¹ç¹ç¹ï¼
-
æ¯ä¸ªå¯¹è±¡é½ä¼å¨å ¶å é¨åå§åä¸ä¸ªå±æ§ï¼å°±æ¯
prototype(åå)ï¼å½æä»¬è®¿é®ä¸ä¸ªå¯¹è±¡ç屿§æ¶ -
妿è¿ä¸ªå¯¹è±¡å é¨ä¸åå¨è¿ä¸ªå±æ§ï¼é£ä¹ä»å°±ä¼å»
prototypeéæ¾è¿ä¸ªå±æ§ï¼è¿ä¸ªprototypeå伿èªå·±çprototypeï¼äºæ¯å°±è¿æ ·ä¸ç´æ¾ä¸å»ï¼ä¹å°±æ¯æä»¬å¹³æ¶æè¯´çååé¾çæ¦å¿µ -
å ³ç³»ï¼
instance.constructor.prototype = instance.__proto__ -
ç¹ç¹ï¼
JavaScript对象æ¯éè¿å¼ç¨æ¥ä¼ éçï¼æä»¬åå»ºçæ¯ä¸ªæ°å¯¹è±¡å®ä½ä¸å¹¶æ²¡æä¸ä»½å±äºèªå·±çåå坿¬ãå½æä»¬ä¿®æ¹ååæ¶ï¼ä¸ä¹ç¸å ³ç对象ä¹ä¼ç»§æ¿è¿ä¸æ¹å
-
彿们éè¦ä¸ä¸ªå±æ§çæ¶ï¼
Javascript弿ä¼å çå½åå¯¹è±¡ä¸æ¯å¦æè¿ä¸ªå±æ§ï¼ å¦ææ²¡æç -
就伿¥æ¾ä»ç
Prototype对象æ¯å¦æè¿ä¸ªå±æ§ï¼å¦æ¤éæ¨ä¸å»ï¼ä¸ç´æ£ç´¢å°Objectå 建对象
4 请解éä»ä¹æ¯äºä»¶ä»£ç
- äºä»¶ä»£çï¼
Event Delegationï¼ï¼åç§°ä¹ä¸ºäºä»¶å§æãæ¯JavaScriptä¸å¸¸ç¨ç»å®äºä»¶çå¸¸ç¨æå·§ã顾åæä¹ï¼âäºä»¶ä»£çâ峿¯æåæ¬éè¦ç»å®çäºä»¶å§æç»ç¶å ç´ ï¼è®©ç¶å ç´ æ å½äºä»¶çå¬çèå¡ãäºä»¶ä»£ççåçæ¯DOMå ç´ çäºä»¶å泡ã使ç¨äºä»¶ä»£çç好夿¯å¯ä»¥æé«æ§è½ - å¯ä»¥å¤§éèçå
åå ç¨ï¼åå°äºä»¶æ³¨åï¼æ¯å¦å¨
tableä¸ä»£çæætdçclickäºä»¶å°±éå¸¸æ£ - å¯ä»¥å®ç°å½æ°å¢åå¯¹è±¡æ¶æ é忬¡å¯¹å ¶ç»å®
5 Javascriptå¦ä½å®ç°ç»§æ¿ï¼
-
æé ç»§æ¿
-
ååç»§æ¿
-
å®ä¾ç»§æ¿
-
æ·è´ç»§æ¿
-
åå
prototypeæºå¶æapplyåcallæ¹æ³å»å®ç°è¾ç®åï¼å»ºè®®ä½¿ç¨æé 彿°ä¸ååæ··åæ¹å¼
function Parent(){
this.name = 'wang';
}
function Child(){
this.age = 28;
}
Child.prototype = new Parent();//ç»§æ¿äºParentï¼éè¿åå
var demo = new Child();
alert(demo.age);
alert(demo.name);//å¾å°è¢«ç»§æ¿ç屿§
}
6 è°è°This对象ççè§£
thisæ»æ¯æå彿°çç´æ¥è°ç¨è ï¼èéé´æ¥è°ç¨è ï¼- 妿æ
newå ³é®åï¼thisæånewåºæ¥çé£ä¸ªå¯¹è±¡ - å¨äºä»¶ä¸ï¼
thisæå触åè¿ä¸ªäºä»¶ç对象ï¼ç¹æ®çæ¯ï¼IEä¸çattachEventä¸çthisæ»æ¯æåå ¨å±å¯¹è±¡Window
7 äºä»¶æ¨¡å
W3Cä¸å®ä¹äºä»¶çåçç»åä¸ä¸ªé¶æ®µï¼æè·é¶æ®µï¼capturingï¼ãç®æ é¶æ®µï¼targetinï¼ãåæ³¡é¶æ®µï¼bubblingï¼
- åæ³¡åäºä»¶ï¼å½ä½ 使ç¨äºä»¶å泡æ¶ï¼å级å ç´ å 触åï¼ç¶çº§å ç´ å触å
- æè·åäºä»¶ï¼å½ä½ 使ç¨äºä»¶æè·æ¶ï¼ç¶çº§å ç´ å 触åï¼å级å ç´ å触å
DOMäºä»¶æµï¼åæ¶æ¯æä¸¤ç§äºä»¶æ¨¡åï¼æè·åäºä»¶ååæ³¡åäºä»¶- 黿¢å泡ï¼å¨
W3cä¸ï¼ä½¿ç¨stopPropagationï¼ï¼æ¹æ³ï¼å¨IEä¸è®¾ç½®cancelBubble = true - 黿¢æè·ï¼é»æ¢äºä»¶çé»è®¤è¡ä¸ºï¼ä¾å¦
click - <a>åç跳转ãå¨W3cä¸ï¼ä½¿ç¨preventDefaultï¼ï¼æ¹æ³ï¼å¨IEä¸è®¾ç½®window.event.returnValue = false
8 newæä½ç¬¦å ·ä½å¹²äºä»ä¹å¢?
- å建ä¸ä¸ªç©ºå¯¹è±¡ï¼å¹¶ä¸
thisåéå¼ç¨è¯¥å¯¹è±¡ï¼åæ¶è¿ç»§æ¿äºè¯¥å½æ°çåå - 屿§åæ¹æ³è¢«å å
¥å°
thiså¼ç¨çå¯¹è±¡ä¸ - æ°å建ç对象ç±
thisæå¼ç¨ï¼å¹¶ä¸æåéå¼çè¿åthis
9 Ajaxåç
Ajaxçåçç®åæ¥è¯´æ¯å¨ç¨æ·åæå¡å¨ä¹é´å äºâ个ä¸é´å±(AJAX弿)ï¼éè¿XmlHttpRequest对象æ¥åæå¡å¨å弿¥è¯·æ±ï¼ä»æå¡å¨è·å¾æ°æ®ï¼ç¶åç¨javascriptæ¥æä½DOMèæ´æ°é¡µé¢ãä½¿ç¨æ·æä½ä¸æå¡å¨ååºå¼æ¥åãè¿å ¶ä¸æå ³é®ç䏿¥å°±æ¯ä»æå¡å¨è·å¾è¯·æ±æ°æ®Ajaxçè¿ç¨åªæ¶åJavaScriptãXMLHttpRequeståDOMãXMLHttpRequestæ¯ajaxçæ ¸å¿æºå¶
// 1. åå»ºè¿æ¥
var xhr = null;
xhr = new XMLHttpRequest()
// 2. è¿æ¥æå¡å¨
xhr.open('get', url, true)
// 3. åé请æ±
xhr.send(null);
// 4. æ¥å请æ±
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
success(xhr.responseText);
} else { // fail
fail && fail(xhr.status);
}
}
}
ajax æé£äºä¼ç¼ºç¹?
- ä¼ç¹ï¼
- éè¿å¼æ¥æ¨¡å¼ï¼æåäºç¨æ·ä½éª.
- ä¼åäºæµè§å¨åæå¡å¨ä¹é´çä¼ è¾ï¼åå°ä¸å¿ è¦çæ°æ®å¾è¿ï¼åå°äºå¸¦å®½å ç¨.
Ajaxå¨å®¢æ·ç«¯è¿è¡ï¼æ¿æ äºä¸é¨åæ¬æ¥ç±æå¡å¨æ¿æ çå·¥ä½ï¼åå°äºå¤§ç¨æ·éä¸çæå¡å¨è´è½½ãAjaxå¯ä»¥å®ç°å¨æä¸å·æ°ï¼å±é¨å·æ°ï¼
- 缺ç¹ï¼
- å®å
¨é®é¢
AJAXæ´é²äºä¸æå¡å¨äº¤äºçç»èã - 对æç´¢å¼æçæ¯ææ¯è¾å¼±ã
- ä¸å®¹æè°è¯ã
- å®å
¨é®é¢
10 å¦ä½è§£å³è·¨åé®é¢?
é¦å äºè§£ä¸æµè§å¨çåæºçç¥ åæºçç¥
/SOPï¼Same origin policyï¼æ¯ä¸ç§çº¦å®ï¼ç±Netscapeå ¬å¸1995å¹´å¼å ¥æµè§å¨ï¼å®æ¯æµè§å¨ææ ¸å¿ä¹æåºæ¬çå®å ¨åè½ï¼å¦æç¼ºå°äºåæºçç¥ï¼æµè§å¨å¾å®¹æåå°XSSãCSFRçæ»å»ãæè°åæºæ¯æ"åè®®+åå+端å£"ä¸è ç¸åï¼å³ä¾¿ä¸¤ä¸ªä¸åçååæååä¸ä¸ªipå°åï¼ä¹éåæº
é£ä¹ææ ·è§£å³è·¨åé®é¢çå¢ï¼
- éè¿jsonpè·¨å
var script = document.createElement('script');
script.type = 'text/javascript';
// ä¼ åå¹¶æå®åè°æ§è¡å½æ°ä¸ºonBack
script.src = 'http://www.....:8080/login?user=admin&callback=onBack';
document.head.appendChild(script);
// åè°æ§è¡å½æ°
function onBack(res) {
alert(JSON.stringify(res));
}
- document.domain + iframeè·¨å
æ¤æ¹æ¡ä» é主åç¸åï¼ååä¸åçè·¨ååºç¨åºæ¯
1.ï¼ç¶çªå£ï¼(http://www.domain.com/a.html)
<iframe id="iframe" src="http://child.domain.com/b.html"></iframe>
<script>
document.domain = 'domain.com';
var user = 'admin';
</script>
2.ï¼åçªå£ï¼(http://child.domain.com/b.html)
document.domain = 'domain.com';
// è·åç¶çªå£ä¸åé
alert('get js data from parent ---> ' + window.parent.user);
- nginx代çè·¨å
- nodejsä¸é´ä»¶ä»£çè·¨å
- å端å¨å¤´é¨ä¿¡æ¯éé¢è®¾ç½®å®å ¨åå
11 模ååå¼åæä¹åï¼
- ç«å³æ§è¡å½æ°,䏿´é²ç§ææå
var module1 = (function(){
ããããvar _count = 0;
ããããvar m1 = function(){
ãããããã//...
ãããã};
ããããvar m2 = function(){
ãããããã//...
ãããã};
ããããreturn {
ããããããm1 : m1,
ããããããm2 : m2
ãããã};
ãã})();
12 弿¥å è½½JSçæ¹å¼æåªäºï¼
- deferï¼åªæ¯æ
IE asyncï¼- å建
scriptï¼æå ¥å°DOMä¸ï¼å è½½å®æ¯åcallBack
13 é£äºæä½ä¼é æå åæ³æ¼ï¼
- å åæ³æ¼æä»»ä½å¯¹è±¡å¨æ¨ä¸åæ¥ææéè¦å®ä¹åä»ç¶åå¨
setTimeoutç第ä¸ä¸ªåæ°ä½¿ç¨å符串èé彿°çè¯ï¼ä¼å¼åå åæ³æ¼- éå 使ç¨ä¸å½
14 XMLåJSONçåºå«ï¼
-
æ°æ®ä½ç§¯æ¹é¢
JSONç¸å¯¹äºXMLæ¥è®²ï¼æ°æ®çä½ç§¯å°ï¼ä¼ éçé度æ´å¿«äºã
-
æ°æ®äº¤äºæ¹é¢
JSONä¸JavaScriptçäº¤äºæ´å æ¹ä¾¿ï¼æ´å®¹æè§£æå¤çï¼æ´å¥½çæ°æ®äº¤äº
-
æ°æ®æè¿°æ¹é¢
JSONå¯¹æ°æ®çæè¿°æ§æ¯XMLè¾å·®
-
ä¼ è¾é度æ¹é¢
JSONçé度è¦è¿è¿å¿«äºXML
15 è°è°ä½ 对webpackççæ³
WebPackæ¯ä¸ä¸ªæ¨¡åæå å·¥å ·ï¼ä½ å¯ä»¥ä½¿ç¨WebPack管çä½ çæ¨¡åä¾èµï¼å¹¶ç¼ç»è¾åºæ¨¡å们æéçéææä»¶ãå®è½å¤å¾å¥½å°ç®¡çãæåWebå¼å䏿ç¨å°çHTMLãJavascriptãCSS以ååç§éææä»¶ï¼å¾çãåä½çï¼ï¼è®©å¼åè¿ç¨æ´å 髿ã对äºä¸åç±»åçèµæºï¼webpackæå¯¹åºç模åå è½½å¨ãwebpack模åæå å¨ä¼åææ¨¡åé´çä¾èµå ³ç³»ï¼æå çæäºä¼åä¸åå¹¶åçéæèµæº
16 è¯´è¯´ä½ å¯¹AMDåCommonjsççè§£
CommonJSæ¯æå¡å¨ç«¯æ¨¡åçè§èï¼Node.jséç¨äºè¿ä¸ªè§èãCommonJSè§èå è½½æ¨¡åæ¯åæ¥çï¼ä¹å°±æ¯è¯´ï¼åªæå è½½å®æï¼æè½æ§è¡åé¢çæä½ãAMDè§è忝é忥å 载模åï¼å 许æå®åè°å½æ°AMDæ¨èç飿 ¼éè¿è¿åä¸ä¸ªå¯¹è±¡å为模å对象ï¼CommonJSç飿 ¼éè¿å¯¹module.exportsæexportsç屿§èµå¼æ¥è¾¾å°æ´é²æ¨¡å对象çç®ç
17 常è§webå®å ¨å鲿¤åç
-
sqlæ³¨å ¥åç- å°±æ¯éè¿æ
SQLå½ä»¤æå ¥å°Web表åé交æè¾å ¥ååæé¡µé¢è¯·æ±çæ¥è¯¢åç¬¦ä¸²ï¼æç»è¾¾å°æ¬ºéªæå¡å¨æ§è¡æ¶æçSQLå½ä»¤
- å°±æ¯éè¿æ
-
æ»çæ¥è¯´æä»¥ä¸å ç¹
- æ°¸è¿ä¸è¦ä¿¡ä»»ç¨æ·çè¾å
¥ï¼è¦å¯¹ç¨æ·çè¾å
¥è¿è¡æ ¡éªï¼å¯ä»¥éè¿æ£å表达å¼ï¼æéå¶é¿åº¦ï¼å¯¹åå¼å·åå
"-"è¿è¡è½¬æ¢ç - æ°¸è¿ä¸è¦ä½¿ç¨å¨ææ¼è£
SQLï¼å¯ä»¥ä½¿ç¨åæ°åç
SQLæè ç´æ¥ä½¿ç¨åå¨è¿ç¨è¿è¡æ°æ®æ¥è¯¢åå - æ°¸è¿ä¸è¦ä½¿ç¨ç®¡çåæéçæ°æ®åºè¿æ¥ï¼ä¸ºæ¯ä¸ªåºç¨ä½¿ç¨åç¬çæéæéçæ°æ®åºè¿æ¥
- ä¸è¦ææºå¯ä¿¡æ¯ææåæ¾ï¼è¯·å 坿è
hashæå¯ç åææçä¿¡æ¯
- æ°¸è¿ä¸è¦ä¿¡ä»»ç¨æ·çè¾å
¥ï¼è¦å¯¹ç¨æ·çè¾å
¥è¿è¡æ ¡éªï¼å¯ä»¥éè¿æ£å表达å¼ï¼æéå¶é¿åº¦ï¼å¯¹åå¼å·åå
XSSåçåé²è
Xss(cross-site scripting)æ»å»æçæ¯æ»å»è å¾Web页é¢éæå ¥æ¶æhtmlæ ç¾æèjavascript代ç ãæ¯å¦ï¼æ»å»è å¨è®ºå䏿¾ä¸ä¸ªçä¼¼å®å ¨ç龿¥ï¼éªåç¨æ·ç¹å»åï¼çªåcookieä¸çç¨æ·ç§å¯ä¿¡æ¯ï¼æè æ»å»è å¨è®ºåä¸å ä¸ä¸ªæ¶æè¡¨åï¼å½ç¨æ·æäº¤è¡¨åçæ¶åï¼å´æä¿¡æ¯ä¼ éå°æ»å»è çæå¡å¨ä¸ï¼è䏿¯ç¨æ·åæ¬ä»¥ä¸ºçä¿¡ä»»ç«ç¹
XSSé²èæ¹æ³
- é¦å
代ç éå¯¹ç¨æ·è¾å
¥çå°æ¹ååéé½éè¦ä»ç»æ£æ¥é¿åº¦å对
â<â,â>â,â;â,âââçå符åè¿æ»¤ï¼å ¶æ¬¡ä»»ä½å 容åå°é¡µé¢ä¹åé½å¿ é¡»å 以encodeï¼é¿å ä¸å°å¿æhtml tagå¼åºæ¥ãè¿ä¸ä¸ªå±é¢å好ï¼è³å°å¯ä»¥å µä½è¶ è¿ä¸åçXSS æ»å»
XSSä¸CSRFæä»ä¹åºå«åï¼
-
XSSæ¯è·åä¿¡æ¯ï¼ä¸éè¦æåç¥éå ¶ä»ç¨æ·é¡µé¢ç代ç åæ°æ®å ãCSRFæ¯ä»£æ¿ç¨æ·å®ææå®çå¨ä½ï¼éè¦ç¥éå ¶ä»ç¨æ·é¡µé¢ç代ç åæ°æ®å ãè¦å®æä¸æ¬¡CSRFæ»å»ï¼å害è å¿ é¡»ä¾æ¬¡å®æä¸¤ä¸ªæ¥éª¤ -
ç»å½åä¿¡ä»»ç½ç«
Aï¼å¹¶å¨æ¬å°çæCookie -
å¨ä¸ç»åº
Açæ åµä¸ï¼è®¿é®å±é©ç½ç«B
CSRFçé²å¾¡
- æå¡ç«¯ç
CSRFæ¹å¼æ¹æ³å¾å¤æ ·ï¼ä½æ»çææ³é½æ¯ä¸è´çï¼å°±æ¯å¨å®¢æ·ç«¯é¡µé¢å¢å ä¼ªéæºæ° - éè¿éªè¯ç çæ¹æ³
18 ç¨è¿åªäºè®¾è®¡æ¨¡å¼ï¼
-
工忍¡å¼ï¼
- 工忍¡å¼è§£å³äºéå¤å®ä¾åçé®é¢ï¼ä½è¿æä¸ä¸ªé®é¢,é£å°±æ¯è¯å«é®é¢ï¼å ä¸ºæ ¹æ¬æ æ³
- 主è¦å¥½å¤å°±æ¯å¯ä»¥æ¶é¤å¯¹è±¡é´çè¦åï¼éè¿ä½¿ç¨å·¥ç¨æ¹æ³è䏿¯
newå ³é®å
-
æé 彿°æ¨¡å¼
- ä½¿ç¨æé 彿°çæ¹æ³ï¼å³è§£å³äºéå¤å®ä¾åçé®é¢ï¼åè§£å³äºå¯¹è±¡è¯å«çé®é¢ï¼è¯¥æ¨¡å¼ä¸å·¥å模å¼çä¸åä¹å¤å¨äº
- ç´æ¥å°å±æ§åæ¹æ³èµå¼ç»
this对象;
19 为ä»ä¹è¦æåæºéå¶ï¼
- åæºçç¥æçæ¯ï¼åè®®ï¼ååï¼ç«¯å£ç¸åï¼åæºçç¥æ¯ä¸ç§å®å ¨åè®®
- 举ä¾è¯´æï¼æ¯å¦ä¸ä¸ªé»å®¢ç¨åºï¼ä»å©ç¨
Iframeæçæ£çé¶è¡ç»å½é¡µé¢åµå°ä»ç页é¢ä¸ï¼å½ä½ 使ç¨çå®çç¨æ·åï¼å¯ç ç»å½æ¶ï¼ä»ç页é¢å°±å¯ä»¥éè¿Javascript读åå°ä½ ç表åä¸inputä¸çå 容ï¼è¿æ ·ç¨æ·åï¼å¯ç 就轻æ¾å°æäºã
20 offsetWidth/offsetHeight,clientWidth/clientHeightä¸scrollWidth/scrollHeightçåºå«
offsetWidth/offsetHeightè¿åå¼å å«content + padding + borderï¼ææä¸e.getBoundingClientRect()ç¸åclientWidth/clientHeightè¿åå¼åªå å«content + paddingï¼å¦æææ»å¨æ¡ï¼ä¹ä¸å 嫿»å¨æ¡scrollWidth/scrollHeightè¿åå¼å å«content + padding + 溢åºå 容ç尺寸
21 javascriptæåªäºæ¹æ³å®ä¹å¯¹è±¡
- 对象åé¢éï¼
var obj = {}; - æé 彿°ï¼
var obj = new Object(); - Object.create():
var obj = Object.create(Object.prototype);
22 常è§å ¼å®¹æ§é®é¢ï¼
png24ä½çå¾çå¨iE6æµè§å¨ä¸åºç°èæ¯ï¼è§£å³æ¹æ¡æ¯åæPNG8- æµè§å¨é»è®¤ç
marginåpaddingä¸åãè§£å³æ¹æ¡æ¯å ä¸ä¸ªå ¨å±ç*{margin:0;padding:0;}æ¥ç»ä¸,ï¼ä½æ¯å ¨å±æçå¾ä½ï¼ä¸è¬æ¯å¦ä¸è¿æ ·è§£å³ï¼
body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{
margin:0;
padding:0;
}
IEä¸,event对象æx,y屿§,使¯æ²¡æpageX,pageY屿§Firefoxä¸,event对象æpageX,pageY屿§,使¯æ²¡æx,y屿§.
23 è¯´è¯´ä½ å¯¹promiseçäºè§£
-
ä¾ç §
Promise/A+çå®ä¹ï¼Promiseæåç§ç¶æï¼-
pending:åå§ç¶æ, éfulfilledærejected. -
fulfilled:æåçæä½. -
rejected:失败çæä½. -
settled: Promise已被fulfilledærejectedï¼ä¸ä¸æ¯pending
-
-
å¦å¤ï¼
fulfilledä¸rejectedä¸èµ·åç§°settled -
Promiseå¯¹è±¡ç¨æ¥è¿è¡å»¶è¿(deferred) å弿¥(asynchronous) 计ç®
Promise çæé 彿°
- æé ä¸ä¸ª
Promiseï¼æåºæ¬çç¨æ³å¦ä¸ï¼
var promise = new Promise(function(resolve, reject) {
if (...) { // succeed
resolve(result);
} else { // fails
reject(Error(errMessage));
}
});
Promiseå®ä¾æ¥æthenæ¹æ³ï¼å ·æthenæ¹æ³ç对象ï¼é常被称为thenableï¼ãå®çä½¿ç¨æ¹æ³å¦ä¸ï¼
promise.then(onFulfilled, onRejected)
- æ¥æ¶ä¸¤ä¸ªå½æ°ä½ä¸ºåæ°ï¼ä¸ä¸ªå¨
fulfilledçæ¶å被è°ç¨ï¼ä¸ä¸ªå¨rejectedçæ¶å被è°ç¨ï¼æ¥æ¶åæ°å°±æ¯futureï¼onFulfilled对åºresolve,onRejected对åºreject
24 ä½ è§å¾jQueryæºç æåªäºåç好çå°æ¹
jqueryæºç å°è£ å¨ä¸ä¸ªå¿å彿°çèªæ§è¡ç¯å¢ä¸ï¼æå©äºé²æ¢åéçå ¨å±æ±¡æï¼ç¶åéè¿ä¼ å ¥windowå¯¹è±¡åæ°ï¼å¯ä»¥ä½¿window对象ä½ä¸ºå±é¨åé使ç¨ï¼å¥½å¤æ¯å½jqueryä¸è®¿é®windowå¯¹è±¡çæ¶åï¼å°±ä¸ç¨å°ä½ç¨åé¾éåå°é¡¶å±ä½ç¨åäºï¼ä»èå¯ä»¥æ´å¿«ç访é®window对象ãåæ ·ï¼ä¼ å ¥undefinedåæ°ï¼å¯ä»¥ç¼©çæ¥æ¾undefinedæ¶çä½ç¨åé¾jqueryå°ä¸äºåå屿§åæ¹æ³å°è£ å¨äºjquery.prototypeä¸ï¼ä¸ºäºç¼©çåç§°ï¼åèµå¼ç»äºjquery.fnï¼è¿æ¯å¾å½¢è±¡çåæ³- æä¸äºæ°ç»æå¯¹è±¡çæ¹æ³ç»å¸¸è½ä½¿ç¨å°ï¼
jQueryå°å ¶ä¿å为å±é¨åé以æé«è®¿é®é度 jqueryå®ç°çé¾å¼è°ç¨å¯ä»¥è约代ç ï¼æè¿åç齿¯åä¸ä¸ªå¯¹è±¡ï¼å¯ä»¥æé«ä»£ç æç
25 vueãreactãangular
-
Vue.jsä¸ä¸ªç¨äºå建web交äºçé¢çåºï¼æ¯ä¸ä¸ªç²¾ç®çMVVMãå®éè¿ååæ°æ®ç»å®æViewå±åModelå±è¿æ¥äºèµ·æ¥ãå®é çDOMå°è£ åè¾åºæ ¼å¼é½è¢«æ½è±¡ä¸ºäºDirectivesåFilters -
AngularJSæ¯ä¸ä¸ªæ¯è¾å®åçå端MVVMæ¡æ¶ï¼å 嫿¨¡æ¿ï¼æ°æ®ååç»å®ï¼è·¯ç±ï¼æ¨¡ååï¼æå¡ï¼ä¾èµæ³¨å ¥çææåè½ï¼æ¨¡æ¿åè½å¼ºå¤§ä¸°å¯ï¼èªå¸¦äºä¸°å¯çAngularæä»¤ -
reactReactä» ä» æ¯VIEW屿¯facebookå ¬å¸ãæ¨åºçä¸ä¸ªç¨äºæå»ºUIçä¸ä¸ªåºï¼è½å¤å®ç°æå¡å¨ç«¯ç渲æãç¨äºvirtual domï¼æä»¥æ§è½å¾å¥½ã
26 Nodeçåºç¨åºæ¯
-
ç¹ç¹ï¼
- 1ã宿¯ä¸ä¸ª
Javascriptè¿è¡ç¯å¢ - 2ãä¾èµäº
Chrome V8弿è¿è¡ä»£ç è§£é - 3ãäºä»¶é©±å¨
- 4ãéé»å¡
I/O - 5ãåè¿ç¨ï¼å线ç¨
- 1ã宿¯ä¸ä¸ª
-
ä¼ç¹ï¼
- é«å¹¶åï¼æéè¦çä¼ç¹ï¼
-
缺ç¹ï¼
- 1ãåªæ¯æå
æ ¸CPUï¼ä¸è½å åå©ç¨CPU - 2ãå¯é æ§ä½ï¼ä¸æ¦ä»£ç æä¸ªç¯èå´©æºï¼æ´ä¸ªç³»ç»é½å´©æº
- 1ãåªæ¯æå
27 è°è°ä½ 对AMDãCMDççè§£
-
CommonJSæ¯æå¡å¨ç«¯æ¨¡åçè§èï¼Node.jséç¨äºè¿ä¸ªè§èãCommonJSè§èå è½½æ¨¡åæ¯åæ¥çï¼ä¹å°±æ¯è¯´ï¼åªæå è½½å®æï¼æè½æ§è¡åé¢çæä½ãAMDè§è忝é忥å 载模åï¼å 许æå®åè°å½æ° -
AMDæ¨èç飿 ¼éè¿è¿åä¸ä¸ªå¯¹è±¡å为模å对象ï¼CommonJSç飿 ¼éè¿å¯¹module.exportsæexportsç屿§èµå¼æ¥è¾¾å°æ´é²æ¨¡å对象çç®ç
es6模å commonjs amd cmd
CommonJSçè§èä¸ï¼æ¯ä¸ªJavaScriptæä»¶å°±æ¯ä¸ä¸ªç¬ç«ç模åä¸ä¸æï¼module contextï¼ï¼å¨è¿ä¸ªä¸ä¸æä¸é»è®¤å建ç屿§é½æ¯ç§æçãä¹å°±æ¯è¯´ï¼å¨ä¸ä¸ªæä»¶å®ä¹çåéï¼è¿å æ¬å½æ°åç±»ï¼ï¼é½æ¯ç§æçï¼å¯¹å ¶ä»æä»¶æ¯ä¸å¯è§çãCommonJSæ¯åæ¥å 载模å,卿µè§å¨ä¸ä¼åºç°å µå¡æ åµï¼æä»¥ä¸éç¨AMD弿¥ï¼éè¦å®ä¹åè°defineæ¹å¼es6ä¸ä¸ªæ¨¡åå°±æ¯ä¸ä¸ªç¬ç«çæä»¶ï¼è¯¥æä»¶å é¨çææåéï¼å¤é¨æ æ³è·åãå¦æä½ å¸æå¤é¨è½å¤è¯»å模åå é¨çæä¸ªåéï¼å°±å¿ 须使ç¨exportå ³é®åè¾åºè¯¥åées6è¿å¯ä»¥å¯¼åºç±»ãæ¹æ³ï¼èªå¨éç¨ä¸¥æ ¼æ¨¡å¼
28 é£äºæä½ä¼é æå åæ³æ¼
- å åæ³æ¼æä»»ä½å¯¹è±¡å¨æ¨ä¸åæ¥ææéè¦å®ä¹åä»ç¶åå¨
setTimeoutç第ä¸ä¸ªåæ°ä½¿ç¨å符串èé彿°çè¯ï¼ä¼å¼åå åæ³æ¼- éå ãæ§å¶å°æ¥å¿ã循ç¯ï¼å¨ä¸¤ä¸ªå¯¹è±¡å½¼æ¤å¼ç¨ä¸å½¼æ¤ä¿çæ¶ï¼å°±ä¼äº§çä¸ä¸ªå¾ªç¯ï¼
29 webå¼åä¸ä¼è¯è·è¸ªçæ¹æ³æåªäº
cookiesessionurléå- éè
input ipå°å
30 ä»ç»jsçåºæ¬æ°æ®ç±»å
UndefinedãNullãBooleanãNumberãString
31 ä»ç»jsæåªäºå 置对象
Objectæ¯JavaScript䏿æå¯¹è±¡çç¶å¯¹è±¡- æ°æ®å°è£
类对象ï¼
ObjectãArrayãBooleanãNumberåString - å
¶ä»å¯¹è±¡ï¼
FunctionãArgumentsãMathãDateãRegExpãError
32 è¯´å æ¡åJavaScriptçåºæ¬è§è
- ä¸è¦å¨åä¸è¡å£°æå¤ä¸ªåé
- 请使ç¨
===/!==æ¥æ¯è¾true/falseæè æ°å¼ - 使ç¨å¯¹è±¡åé¢éæ¿ä»£
new Arrayè¿ç§å½¢å¼ - ä¸è¦ä½¿ç¨å ¨å±å½æ°
Switchè¯å¥å¿ 须带ædefault忝Ifè¯å¥å¿ 须使ç¨å¤§æ¬å·for-in循ç¯ä¸çåé åºè¯¥ä½¿ç¨varå ³é®åæç¡®éå®ä½ç¨åï¼ä»èé¿å ä½ç¨å污
33 JavaScriptæå ç§ç±»åçå¼
- æ ï¼åå§æ°æ®ç±»åï¼
Undefinedï¼Nullï¼Booleanï¼NumberãStringï¼ - å ï¼å¼ç¨æ°æ®ç±»åï¼å¯¹è±¡ãæ°ç»å彿°ï¼
- 两ç§ç±»åçåºå«æ¯ï¼åå¨ä½ç½®ä¸åï¼
- åå§æ°æ®ç±»åç´æ¥åå¨å¨æ (
stack)ä¸çç®åæ°æ®æ®µï¼å æ®ç©ºé´å°ã大å°åºå®ï¼å±äºè¢«é¢ç¹ä½¿ç¨æ°æ®ï¼æä»¥æ¾å ¥æ ä¸åå¨ï¼ - å¼ç¨æ°æ®ç±»ååå¨å¨å (
heap)ä¸ç对象,å æ®ç©ºé´å¤§ã大å°ä¸åºå®,妿åå¨å¨æ ä¸ï¼å°ä¼å½±åç¨åºè¿è¡çæ§è½ï¼å¼ç¨æ°æ®ç±»å卿 ä¸åå¨äºæéï¼è¯¥æéæåå ä¸è¯¥å®ä½çèµ·å§å°åãå½è§£éå¨å¯»æ¾å¼ç¨å¼æ¶ï¼ä¼é¦å æ£ç´¢å ¶ - 卿 ä¸çå°åï¼åå¾å°ååä»å ä¸è·å¾å®ä½
34 javascriptå建对象çå ç§æ¹å¼
javascriptå建对象ç®åç说,æ éå°±æ¯ä½¿ç¨å 置对象æåç§èªå®ä¹å¯¹è±¡ï¼å½ç¶è¿å¯ä»¥ç¨JSONï¼ä½åæ³æå¾å¤ç§ï¼ä¹è½æ··å使ç¨
- 对象åé¢éçæ¹å¼
person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
- ç¨
functionæ¥æ¨¡ææ åçæé 彿°
function Person(){}
var person=new Person();//å®ä¹ä¸ä¸ªfunctionï¼å¦æä½¿ç¨new"å®ä¾å",该functionå¯ä»¥ç使¯ä¸ä¸ªClass
person.name="Mark";
person.age="25";
person.work=function(){
alert(person.name+" hello...");
}
person.work();
- ç¨
functionæ¥æ¨¡æåæé 彿°æ¥å®ç°ï¼ç¨thiså ³é®åå®ä¹æé çä¸ä¸æå±æ§ï¼
function Pet(name,age,hobby){
this.name=name;//thisä½ç¨åï¼å½å对象
this.age=age;
this.hobby=hobby;
this.eat=function(){
alert("æå«"+this.name+",æå欢"+this.hobby+",æ¯ä¸ªç¨åºå");
}
}
var maidou =new Pet("麦å
",25,"coding");//å®ä¾åãå建对象
maidou.eat();//è°ç¨eatæ¹æ³
- ç¨å·¥åæ¹å¼æ¥å建ï¼å 置对象ï¼
var wcDog =new Object();
wcDog.name="æºè´¢";
wcDog.age=3;
wcDog.work=function(){
alert("ææ¯"+wcDog.name+",汪汪汪......");
}
wcDog.work();
- ç¨å忹弿¥å建
function Dog(){
}
Dog.prototype.name="æºè´¢";
Dog.prototype.eat=function(){
alert(this.name+"æ¯ä¸ªåè´§");
}
var wangcai =new Dog();
wangcai.eat();
- ç¨æ··åæ¹å¼æ¥å建
function Car(name,price){
this.name=name;
this.price=price;
}
Car.prototype.sell=function(){
alert("ææ¯"+this.name+"ï¼æç°å¨å"+this.price+"ä¸å
");
}
var camry =new Car("å¯ç¾ç",27);
camry.sell();
35 evalæ¯åä»ä¹ç
- å®çåè½æ¯æå¯¹åºçå符串解ææ
JS代ç å¹¶è¿è¡ - åºè¯¥é¿å
使ç¨
evalï¼ä¸å®å ¨ï¼éå¸¸èæ§è½ï¼2次ï¼ä¸æ¬¡è§£ææjsè¯å¥ï¼ä¸æ¬¡æ§è¡ï¼ - ç±
JSONå符串转æ¢ä¸ºJSONå¯¹è±¡çæ¶åå¯ä»¥ç¨evalï¼var obj =eval('('+ str +')')
36 nullï¼undefined çåºå«
-
undefined表示ä¸åå¨è¿ä¸ªå¼ã -
undefined:æ¯ä¸ä¸ªè¡¨ç¤º"æ "çåå§å¼æè 说表示"缺å°å¼"ï¼å°±æ¯æ¤å¤åºè¯¥æä¸ä¸ªå¼ï¼ä½æ¯è¿æ²¡æå®ä¹ãå½å°è¯è¯»åæ¶ä¼è¿åundefined -
ä¾å¦åé被声æäºï¼ä½æ²¡æèµå¼æ¶ï¼å°±çäº
undefined -
null表示ä¸ä¸ªå¯¹è±¡è¢«å®ä¹äºï¼å¼ä¸ºâ空å¼â -
null: æ¯ä¸ä¸ªå¯¹è±¡(空对象, 没æä»»ä½å±æ§åæ¹æ³) -
ä¾å¦ä½ä¸ºå½æ°çåæ°ï¼è¡¨ç¤ºè¯¥å½æ°ç忰䏿¯å¯¹è±¡ï¼
-
å¨éªè¯
nullæ¶ï¼ä¸å®è¦ä½¿ç¨ã===ï¼å 为==æ æ³åå«nullåãundefined
37 ["1", "2", "3"].map(parseInt) çæ¡æ¯å¤å°
[1, NaN, NaN]å 为parseIntéè¦ä¸¤ä¸ªåæ°(val, radix)ï¼å ¶ä¸radixè¡¨ç¤ºè§£ææ¶ç¨çåºæ°ãmapä¼ äº3个(element, index, array)ï¼å¯¹åºçradixä¸åæ³å¯¼è´è§£æå¤±è´¥ã
38 javascript 代ç ä¸ç"use strict";æ¯ä»ä¹ææ
use strictæ¯ä¸ç§ECMAscript 5æ·»å çï¼ä¸¥æ ¼ï¼è¿è¡æ¨¡å¼,è¿ç§æ¨¡å¼ä½¿å¾ Javascript 卿´ä¸¥æ ¼çæ¡ä»¶ä¸è¿è¡,使JSç¼ç æ´å è§èåçæ¨¡å¼,æ¶é¤Javascriptè¯æ³çä¸äºä¸åçãä¸ä¸¥è°¨ä¹å¤ï¼åå°ä¸äºæªå¼è¡ä¸º
39 JSON çäºè§£
-
JSON(JavaScript Object Notation)æ¯ä¸ç§è½»éçº§çæ°æ®äº¤æ¢æ ¼å¼ -
宿¯åºäº
JavaScriptçä¸ä¸ªåéãæ°æ®æ ¼å¼ç®å, æäºè¯»å, å ç¨å¸¦å®½å° -
JSONå符串转æ¢ä¸ºJSON对象:
var obj =eval('('+ str +')');
var obj = str.parseJSON();
var obj = JSON.parse(str);
JSON对象转æ¢ä¸ºJSONå符串ï¼
var last=obj.toJSONString();
var last=JSON.stringify(obj);
40 jså»¶è¿å è½½çæ¹å¼æåªäº
deferåasyncã卿å建DOMæ¹å¼ï¼ç¨å¾æå¤ï¼ãæé弿¥è½½å ¥js
41 忥å弿¥çåºå«
- åæ¥ï¼æµè§å¨è®¿é®æå¡å¨è¯·æ±ï¼ç¨æ·çå¾å°é¡µé¢å·æ°ï¼éæ°å请æ±,ç请æ±å®ï¼é¡µé¢å·æ°ï¼æ°å 容åºç°ï¼ç¨æ·çå°æ°å 容,è¿è¡ä¸ä¸æ¥æä½
- 弿¥ï¼æµè§å¨è®¿é®æå¡å¨è¯·æ±ï¼ç¨æ·æ£å¸¸æä½ï¼æµè§å¨å端è¿è¡è¯·æ±ãç请æ±å®ï¼é¡µé¢ä¸å·æ°ï¼æ°å 容ä¹ä¼åºç°ï¼ç¨æ·çå°æ°å 容
42 æ¸è¿å¢å¼ºåä¼é é级
- æ¸è¿å¢å¼º ï¼é对ä½çæ¬æµè§å¨è¿è¡æå»ºé¡µé¢ï¼ä¿è¯æåºæ¬çåè½ï¼ç¶ååé对é«çº§æµè§å¨è¿è¡ææã交äºçæ¹è¿å追å åè½è¾¾å°æ´å¥½çç¨æ·ä½éªã
- ä¼é é级 ï¼ä¸å¼å§å°±æå»ºå®æ´çåè½ï¼ç¶ååé对ä½çæ¬æµè§å¨è¿è¡å ¼å®¹
43 deferåasync
deferå¹¶è¡å è½½jsæä»¶ï¼ä¼æç §é¡µé¢ä¸scriptæ ç¾çé¡ºåºæ§è¡asyncå¹¶è¡å è½½jsæä»¶ï¼ä¸è½½å®æç«å³æ§è¡ï¼ä¸ä¼æç §é¡µé¢ä¸scriptæ ç¾çé¡ºåºæ§è¡
44 è¯´è¯´ä¸¥æ ¼æ¨¡å¼çéå¶
- åéå¿ é¡»å£°æåå使ç¨
- 彿°çåæ°ä¸è½æåå屿§ï¼å¦åæ¥é
- ä¸è½ä½¿ç¨
withè¯å¥ - ç¦æ¢
thisæåå ¨å±å¯¹è±¡
45 attributeåpropertyçåºå«æ¯ä»ä¹
attributeæ¯domå ç´ å¨ææ¡£ä¸ä½ä¸ºhtmlæ ç¾æ¥æç屿§ï¼propertyå°±æ¯domå ç´ å¨jsä¸ä½ä¸ºå¯¹è±¡æ¥æç屿§ã- 对äº
htmlçæ å屿§æ¥è¯´ï¼attributeåpropertyæ¯åæ¥çï¼æ¯ä¼èªå¨æ´æ°ç - 使¯å¯¹äºèªå®ä¹ç屿§æ¥è¯´ï¼ä»ä»¬æ¯ä¸åæ¥ç
46 è°è°ä½ 对ES6ççè§£
- æ°å¢æ¨¡æ¿å符串ï¼ä¸º
JavaScriptæä¾äºç®åçå符串æå¼åè½ï¼ - ç®å¤´å½æ°
for-ofï¼ç¨æ¥éåæ°æ®âä¾å¦æ°ç»ä¸çå¼ãï¼arguments对象å¯è¢«ä¸å®åæ°åé»è®¤åæ°å®ç¾ä»£æ¿ãES6å°promiseå¯¹è±¡çº³å ¥è§èï¼æä¾äºåççPromise对象ã- å¢å äº
letåconstå½ä»¤ï¼ç¨æ¥å£°æåéã - å¢å äºå级ä½ç¨åã
letå½ä»¤å®é ä¸å°±å¢å äºå级ä½ç¨åã- è¿æå°±æ¯å¼å
¥
module模åçæ¦å¿µ
47 ECMAScript6 æä¹åclassä¹
- è¿ä¸ªè¯æ³ç³å¯ä»¥è®©æ
OOPåºç¡ç人æ´å¿«ä¸æjsï¼è³å°æ¯ä¸ä¸ªå®æ¹çå®ç°äº - ä½å¯¹çæ
jsç人æ¥è¯´ï¼è¿ä¸ªä¸è¥¿æ²¡å¥å¤§å½±åï¼ä¸ä¸ªObject.creat()æå®ç»§æ¿ï¼æ¯classç®æ´æ¸ æ°çå¤
48 ä»ä¹æ¯é¢å对象ç¼ç¨åé¢åè¿ç¨ç¼ç¨ï¼å®ä»¬çå¼ååä¼ç¼ºç¹
- é¢åè¿ç¨å°±æ¯åæåºè§£å³é®é¢æéè¦çæ¥éª¤ï¼ç¶åç¨å½æ°æè¿äºæ¥éª¤ä¸æ¥ä¸æ¥å®ç°ï¼ä½¿ç¨çæ¶åä¸ä¸ªä¸ä¸ªä¾æ¬¡è°ç¨å°±å¯ä»¥äº
- é¢åå¯¹è±¡æ¯æææé®é¢äºå¡åè§£æå个对象ï¼å»ºç«å¯¹è±¡çç®ç䏿¯ä¸ºäºå®æä¸ä¸ªæ¥éª¤ï¼èæ¯ä¸ºäºæåæä¸ªäºç©å¨æ´ä¸ªè§£å³é®é¢çæ¥éª¤ä¸çè¡ä¸º
- é¢å对象æ¯ä»¥åè½æ¥ååé®é¢ï¼è䏿¯æ¥éª¤
49 é¢å对象ç¼ç¨ææ³
- åºæ¬ææ³æ¯ä½¿ç¨å¯¹è±¡ï¼ç±»ï¼ç»§æ¿ï¼å°è£ çåºæ¬æ¦å¿µæ¥è¿è¡ç¨åºè®¾è®¡
- ä¼ç¹
- æç»´æ¤
- éç¨é¢åå¯¹è±¡ææ³è®¾è®¡çç»æï¼å¯è¯»æ§é«ï¼ç±äºç»§æ¿çåå¨ï¼å³ä½¿æ¹åéæ±ï¼é£ä¹ç»´æ¤ä¹åªæ¯å¨å±é¨æ¨¡åï¼æä»¥ç»´æ¤èµ·æ¥æ¯é常æ¹ä¾¿åè¾ä½ææ¬ç
- ææ©å±
- å¼åå·¥ä½çéç¨æ§ãç»§æ¿æ§é«ï¼éä½éå¤å·¥ä½éã
- 缩çäºå¼å卿
- æç»´æ¤
50 对webæ åãå¯ç¨æ§ãå¯è®¿é®æ§ççè§£
- å¯ç¨æ§ï¼Usabilityï¼ï¼äº§åæ¯å¦å®¹æä¸æï¼ç¨æ·è½å¦å®æä»»å¡ï¼æçå¦ä½ï¼ä»¥åè¿è¿ç¨ä¸ç¨æ·çä¸»è§æåå¯å¥½ï¼æ¯ä»ç¨æ·çè§åº¦æ¥ç产åçè´¨éãå¯ç¨æ§å¥½æå³ç产åè´¨éé«ï¼æ¯ä¼ä¸çæ ¸å¿ç«äºå
- å¯è®¿é®æ§ï¼Accessibilityï¼ï¼Webå å®¹å¯¹äºæ®éç¨æ·çå¯é 读åå¯çè§£æ§
- å¯ç»´æ¤æ§ï¼Maintainabilityï¼ï¼ä¸è¬å å«ä¸¤ä¸ªå±æ¬¡ï¼ä¸æ¯å½ç³»ç»åºç°é®é¢æ¶ï¼å¿«éå®ä½å¹¶è§£å³é®é¢çææ¬ï¼ææ¬ä½åå¯ç»´æ¤æ§å¥½ãäºæ¯ä»£ç æ¯å¦å®¹æè¢«äººçè§£ï¼æ¯å¦å®¹æä¿®æ¹åå¢å¼ºåè½ã
51 å¦ä½éè¿JS夿ä¸ä¸ªæ°ç»
instanceofæ¹æ³instanceofè¿ç®ç¬¦æ¯ç¨æ¥æµè¯ä¸ä¸ªå¯¹è±¡æ¯å¦å¨å ¶ååé¾ååæé 彿°ç屿§
var arr = [];
arr instanceof Array; // true
constructoræ¹æ³constructor屿§è¿å对å建æ¤å¯¹è±¡çæ°ç»å½æ°çå¼ç¨ï¼å°±æ¯è¿å对象ç¸å¯¹åºçæé 彿°
var arr = [];
arr.constructor == Array; //true
- æç®åçæ¹æ³
- è¿ç§åæ³ï¼æ¯
jQueryæ£å¨ä½¿ç¨ç
- è¿ç§åæ³ï¼æ¯
Object.prototype.toString.call(value) == '[object Array]'
// å©ç¨è¿ä¸ªæ¹æ³ï¼å¯ä»¥åä¸ä¸ªè¿åæ°æ®ç±»åçæ¹æ³
var isType = function (obj) {
return Object.prototype.toString.call(obj).slice(8,-1);
}
ES5æ°å¢æ¹æ³isArray()
var a = new Array(123);
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
52 è°ä¸è°letä¸varçåºå«
letå½ä»¤ä¸åå¨åéæåï¼å¦æå¨letå使ç¨ï¼ä¼å¯¼è´æ¥é- 妿ååºä¸åå¨
letåconstå½ä»¤ï¼å°±ä¼å½¢æå°éä½ç¨å - ä¸å 许éå¤å£°æï¼å æ¤ï¼ä¸è½å¨å½æ°å é¨éæ°å£°æåæ°
53 mapä¸forEachçåºå«
forEachæ¹æ³ï¼æ¯æåºæ¬çæ¹æ³ï¼å°±æ¯éåä¸å¾ªç¯ï¼é»è®¤æ3ä¸ªä¼ åï¼å嫿¯éåçæ°ç»å 容itemãæ°ç»ç´¢å¼indexãåå½åéåæ°ç»Arraymapæ¹æ³ï¼åºæ¬ç¨æ³ä¸forEachä¸è´ï¼ä½æ¯ä¸åçï¼å®ä¼è¿åä¸ä¸ªæ°çæ°ç»ï¼æä»¥å¨callbackéè¦æreturnå¼ï¼å¦ææ²¡æï¼ä¼è¿åundefined
54 è°ä¸è°ä½ çè§£ç彿°å¼ç¼ç¨
- ç®å说ï¼"彿°å¼ç¼ç¨"æ¯ä¸ç§"ç¼ç¨èå¼"ï¼programming paradigmï¼ï¼ä¹å°±æ¯å¦ä½ç¼åç¨åºçæ¹æ³è®º
- å®å ·æä»¥ä¸ç¹æ§ï¼éå åé«é¶å½æ°ãæ°æ§è®¡ç®ãéå½ã彿°æ¯"第ä¸çå ¬æ°"ãåªç¨"表达å¼"
55 è°ä¸è°ç®å¤´å½æ°ä¸æ®é彿°çåºå«ï¼
- 彿°ä½å
ç
this对象ï¼å°±æ¯å®ä¹æ¶æå¨ç对象ï¼è䏿¯ä½¿ç¨æ¶æå¨ç对象 - ä¸å¯ä»¥å½ä½æé 彿°ï¼ä¹å°±æ¯è¯´ï¼ä¸å¯ä»¥ä½¿ç¨
newå½ä»¤ï¼å¦å伿åºä¸ä¸ªé误 - ä¸å¯ä»¥ä½¿ç¨
arguments对象ï¼è¯¥å¯¹è±¡å¨å½æ°ä½å ä¸åå¨ã妿è¦ç¨ï¼å¯ä»¥ç¨Reståæ°ä»£æ¿ - ä¸å¯ä»¥ä½¿ç¨
yieldå½ä»¤ï¼å æ¤ç®å¤´å½æ°ä¸è½ç¨ä½Generator彿°
56 è°ä¸è°å½æ°ä¸thisçæå
-
thisçæåå¨å½æ°å®ä¹çæ¶åæ¯ç¡®å®ä¸äºçï¼åªæå½æ°æ§è¡çæ¶åæè½ç¡®å®thiså°åºæåè°ï¼å®é ä¸thisçæç»æåçæ¯é£ä¸ªè°ç¨å®ç对象
-
ãjavascriptè¯è¨ç²¾é«ãä¸å¤§æ¦æ¦æ¬äº4ç§è°ç¨æ¹å¼ï¼
-
æ¹æ³è°ç¨æ¨¡å¼
-
彿°è°ç¨æ¨¡å¼
-
æé å¨è°ç¨æ¨¡å¼
graph LR
A-->B
- apply/callè°ç¨æ¨¡å¼
57 弿¥ç¼ç¨çå®ç°æ¹å¼
-
åè°å½æ°
- ä¼ç¹ï¼ç®åã容æçè§£
- 缺ç¹ï¼ä¸å©äºç»´æ¤ï¼ä»£ç è¦åé«
-
äºä»¶çå¬(éç¨æ¶é´é©±å¨æ¨¡å¼ï¼åå³äºæä¸ªäºä»¶æ¯å¦åç)ï¼
- ä¼ç¹ï¼å®¹æçè§£ï¼å¯ä»¥ç»å®å¤ä¸ªäºä»¶ï¼æ¯ä¸ªäºä»¶å¯ä»¥æå®å¤ä¸ªåè°å½æ°
- 缺ç¹ï¼äºä»¶é©±å¨åï¼æµç¨ä¸å¤æ¸ æ°
-
åå¸/订é (è§å¯è 模å¼)
- 类似äºäºä»¶çå¬ï¼ä½æ¯å¯ä»¥éè¿âæ¶æ¯ä¸å¿âï¼äºè§£ç°å¨æå¤å°åå¸è ï¼å¤å°è®¢é è
-
Promise对象
- ä¼ç¹ï¼å¯ä»¥å©ç¨thenæ¹æ³ï¼è¿è¡é¾å¼åæ³ï¼å¯ä»¥ä¹¦åé误æ¶çåè°å½æ°ï¼
- 缺ç¹ï¼ç¼ååçè§£ï¼ç¸å¯¹æ¯è¾é¾
-
Generator彿°
- ä¼ç¹ï¼å½æ°ä½å å¤çæ°æ®äº¤æ¢ãé误å¤çæºå¶
- 缺ç¹ï¼æµç¨ç®¡ç䏿¹ä¾¿
-
async彿°
- ä¼ç¹ï¼å ç½®æ§è¡å¨ãæ´å¥½çè¯ä¹ãæ´å¹¿çéç¨æ§ãè¿åçæ¯Promiseãç»ææ¸ æ°ã
- 缺ç¹ï¼é误å¤çæºå¶
58 对åçJavascriptäºè§£ç¨åº¦
- æ°æ®ç±»åãè¿ç®ã对象ãFunctionãç»§æ¿ãéå
ãä½ç¨åãååé¾ãäºä»¶ã
RegExpãJSONãAjaxãDOMãBOMãå åæ³æ¼ãè·¨åã弿¥è£ è½½ãæ¨¡æ¿å¼æãå端MVCãè·¯ç±ã模ååãCanvasãECMAScript
59 Jså¨ç»ä¸CSSå¨ç»åºå«åç¸åºå®ç°
CSS3çå¨ç»çä¼ç¹- 卿§è½ä¸ä¼ç¨å¾®å¥½ä¸äºï¼æµè§å¨ä¼å¯¹
CSS3çå¨ç»åä¸äºä¼å - 代ç ç¸å¯¹ç®å
- 卿§è½ä¸ä¼ç¨å¾®å¥½ä¸äºï¼æµè§å¨ä¼å¯¹
- 缺ç¹
- å¨å¨ç»æ§å¶ä¸ä¸å¤çµæ´»
- å ¼å®¹æ§ä¸å¥½
JavaScriptçå¨ç»æ£å¥½å¼¥è¡¥äºè¿ä¸¤ä¸ªç¼ºç¹ï¼æ§å¶è½åå¾å¼ºï¼å¯ä»¥åå¸§çæ§å¶ã忢ï¼åæ¶åå¾å¥½å®å ¨å¯ä»¥å ¼å®¹IE6ï¼å¹¶ä¸åè½å¼ºå¤§ã对äºä¸äºå¤ææ§å¶çå¨ç»ï¼ä½¿ç¨javascript伿¯è¾é è°±ãèå¨å®ç°ä¸äºå°ç交äºå¨æçæ¶åï¼å°±å¤èèèèCSSå§
60 JS æ°ç»å对象çéåæ¹å¼ï¼ä»¥åå ç§æ¹å¼çæ¯è¾
é常æä»¬ä¼ç¨å¾ªç¯çæ¹å¼æ¥éåæ°ç»ã使¯å¾ªç¯æ¯ 导è´js æ§è½é®é¢çåå ä¹ä¸ãä¸è¬æä»¬ä¼éç¨ä¸å ç§æ¹å¼æ¥è¿è¡æ°ç»çéå
-
for inå¾ªç¯ -
forå¾ªç¯ -
forEach- è¿éç
forEachåè°ä¸ä¸¤ä¸ªåæ°åå«ä¸ºvalueï¼index forEachæ æ³éå对象- IE䏿¯æè¯¥æ¹æ³ï¼
Firefoxåchromeæ¯æ forEachæ æ³ä½¿ç¨breakï¼continueè·³åºå¾ªç¯ï¼ä¸ä½¿ç¨returnæ¯è·³è¿æ¬æ¬¡å¾ªç¯
- è¿éç
-
è¿ä¸¤ç§æ¹æ³åºè¯¥é常常è§ä¸ä½¿ç¨å¾é¢ç¹ãä½å®é ä¸ï¼è¿ä¸¤ç§æ¹æ³é½å卿§è½é®é¢
-
卿¹å¼ä¸ä¸ï¼
for-inéè¦åæåºarrayçæ¯ä¸ªå±æ§ï¼è¿ä¸ªæä½æ§è½å¼éå¾å¤§ãç¨å¨keyå·²ç¥çæ°ç»ä¸æ¯é常ä¸åç®çãæä»¥å°½éä¸è¦ç¨for-inï¼é¤éä½ ä¸æ¸ æ¥è¦å¤çåªäºå±æ§ï¼ä¾å¦JSONå¯¹è±¡è¿æ ·çæ åµ -
卿¹å¼2ä¸ï¼å¾ªç¯æ¯è¿è¡ä¸æ¬¡ï¼å°±è¦æ£æ¥ä¸ä¸æ°ç»é¿åº¦ã读å屿§ï¼æ°ç»é¿åº¦ï¼è¦æ¯è¯»å±é¨åéæ ¢ï¼å°¤å ¶æ¯å½
arrayéåæ¾ç齿¯DOMå ç´ ï¼å ä¸ºæ¯æ¬¡è¯»åé½ä¼æ«æä¸é页é¢ä¸çéæ©å¨ç¸å ³å ç´ ï¼é度ä¼å¤§å¤§éä½
61 gulpæ¯ä»ä¹
gulpæ¯å端å¼åè¿ç¨ä¸ä¸ç§åºäºæµçä»£ç æå»ºå·¥å ·ï¼æ¯èªå¨å项ç®çæå»ºå©å¨ï¼å®ä¸ä» è½å¯¹ç½ç«èµæºè¿è¡ä¼åï¼èä¸å¨å¼åè¿ç¨ä¸å¾å¤éå¤çä»»å¡è½å¤ä½¿ç¨æ£ç¡®çå·¥å ·èªå¨å®æ- Gulpçæ ¸å¿æ¦å¿µï¼æµ
- æµï¼ç®åæ¥è¯´å°±æ¯å»ºç«å¨é¢å对象åºç¡ä¸çä¸ç§æ½è±¡çå¤çæ°æ®çå·¥å ·ã卿µä¸ï¼å®ä¹äºä¸äºå¤çæ°æ®çåºæ¬æä½ï¼å¦è¯»åæ°æ®ï¼åå ¥æ°æ®çï¼ç¨åºåæ¯å¯¹æµè¿è¡æææä½çï¼èä¸ç¨å ³å¿æµçå¦ä¸å¤´æ°æ®ççæ£æµå
- gulpæ£æ¯éè¿æµå代ç ä¼äºé ç½®ççç¥æ¥å°½éç®åä»»å¡ç¼åçå·¥ä½
- Gulpçç¹ç¹ï¼
- æäºä½¿ç¨ï¼éè¿ä»£ç ä¼äºé ç½®ççç¥ï¼gulp 让ç®åçä»»å¡ç®åï¼å¤æçä»»å¡å¯ç®¡ç
- æå»ºå¿«é å©ç¨
Node.jsæµçå¨åï¼ä½ å¯ä»¥å¿«éæå»ºé¡¹ç®å¹¶åå°é¢ç¹çIOæä½ - æäºå¦ä¹ éè¿æå°ç
APIï¼ææ¡gulp毫ä¸è´¹åï¼æå»ºå·¥ä½å°½å¨ææ¡ï¼å¦åä¸ç³»åæµç®¡é
62 说ä¸ä¸Vueçååç»å®æ°æ®çåç
vue.js忝éç¨æ°æ®å«æç»ååå¸è -订é è æ¨¡å¼çæ¹å¼ï¼éè¿Object.defineProperty()æ¥å«æåä¸ªå±æ§çsetterï¼getterï¼å¨æ°æ®å卿¶å叿¶æ¯ç»è®¢é è ï¼è§¦åç¸åºççå¬åè°
63 äºä»¶çåä¸ªé¶æ®µ
- 1ï¼æè·é¶æ®µ ---> 2ï¼ç®æ é¶æ®µ ---> 3ï¼åæ³¡é¶æ®µ
document--->targetç®æ ---->document- ç±æ¤ï¼
addEventListenerç第ä¸ä¸ªåæ°è®¾ç½®ä¸ºtrueåfalseçåºå«å·²ç»éå¸¸æ¸ æ°äºtrue表示该å ç´ å¨äºä»¶çâæè·é¶æ®µâï¼ç±å¤å¾å ä¼ éæ¶ï¼ååºäºä»¶false表示该å ç´ å¨äºä»¶çâåæ³¡é¶æ®µâï¼ç±å åå¤ä¼ éæ¶ï¼ååºäºä»¶
64 let var const
let
- å è®¸ä½ å£°æä¸ä¸ªä½ç¨å被éå¶å¨å级ä¸çåéãè¯å¥æè 表达å¼
- letç»å®ä¸ååéæåç约æï¼è¿æå³çlet声æä¸ä¼è¢«æåå°å½å
- 该åéå¤äºä»åå¼å§å°åå§åå¤ççâæåæ»åºâ
var
- 声æåéçä½ç¨åéå¶å¨å ¶å£°æä½ç½®çä¸ä¸æä¸ï¼èé声æåéæ»æ¯å ¨å±ç
- ç±äºåé声æï¼ä»¥åå ¶ä»å£°æï¼æ»æ¯å¨ä»»æä»£ç æ§è¡ä¹åå¤ççï¼æä»¥å¨ä»£ç ä¸çä»»æä½ç½®å£°æåéæ»æ¯çæäºå¨ä»£ç å¼å¤´å£°æ
const
- 声æå建ä¸ä¸ªå¼çåªè¯»å¼ç¨ (峿é)
- åºæ¬æ°æ®å½å¼åçæ¹åæ¶ï¼é£ä¹å
¶å¯¹åºçæéä¹å°åçæ¹åï¼æ
é æ
constç³æåºæ¬æ°æ®ç±»åæ¶ - åå°å
¶å¼æ¹åæ¶ï¼å°ä¼é ææ¥éï¼ ä¾å¦
const a = 3;a = 5æ¶ å°ä¼æ¥é - 使¯å¦ææ¯å¤åç±»åæ¶ï¼å¦æåªæ¹åå¤åç±»åçå
¶ä¸æä¸ª
Value项æ¶ï¼ å°è¿æ¯æ£å¸¸ä½¿ç¨
65 å¿«éç让ä¸ä¸ªæ°ç»ä¹±åº
var arr = [1,2,3,4,5,6,7,8,9,10];
arr.sort(function(){
return Math.random() - 0.5;
})
console.log(arr);
66 å¦ä½æ¸²æå 䏿¡æ°æ®å¹¶ä¸å¡ä½çé¢
è¿éé¢èå¯äºå¦ä½å¨ä¸å¡ä½é¡µé¢çæ åµä¸æ¸²ææ°æ®ï¼ä¹å°±æ¯è¯´ä¸è½ä¸æ¬¡æ§å°å 䏿¡é½æ¸²æåºæ¥ï¼èåºè¯¥ä¸æ¬¡æ¸²æé¨å
DOMï¼é£ä¹å°±å¯ä»¥éè¿requestAnimationFrameæ¥æ¯16 mså·æ°ä¸æ¬¡
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<ul>æ§ä»¶</ul>
<script>
setTimeout(() => {
// æå
¥å䏿¡æ°æ®
const total = 100000
// 䏿¬¡æå
¥ 20 æ¡ï¼å¦æè§å¾æ§è½ä¸å¥½å°±åå°
const once = 20
// æ¸²ææ°æ®æ»å
±éè¦å 次
const loopCount = total / once
let countOfRender = 0
let ul = document.querySelector("ul");
function add() {
// ä¼åæ§è½ï¼æå
¥ä¸ä¼é æåæµ
const fragment = document.createDocumentFragment();
for (let i = 0; i < once; i++) {
const li = document.createElement("li");
li.innerText = Math.floor(Math.random() * total);
fragment.appendChild(li);
}
ul.appendChild(fragment);
countOfRender += 1;
loop();
}
function loop() {
if (countOfRender < loopCount) {
window.requestAnimationFrame(add);
}
}
loop();
}, 0);
</script>
</body>
</html>
67 叿è·åå°é¡µé¢ä¸ææçcheckboxæä¹åï¼
ä¸ä½¿ç¨ç¬¬ä¸æ¹æ¡æ¶
var domList = document.getElementsByTagName(âinputâ)
var checkBoxList = [];
var len = domList.length;ãã//ç¼åå°å±é¨åé
while (len--) {ãã//使ç¨whileçæç伿¯forå¾ªç¯æ´é«
ããif (domList[len].type == âcheckboxâ) {
ããcheckBoxList.push(domList[len]);
ãã}
}
68 ææ ·æ·»å ãç§»é¤ãç§»å¨ãå¤å¶ãåå»ºåæ¥æ¾èç¹
å建æ°èç¹
createDocumentFragment() //å建ä¸ä¸ªDOMçæ®µ
createElement() //å建ä¸ä¸ªå
·ä½çå
ç´
createTextNode() //å建ä¸ä¸ªææ¬èç¹
æ·»å ãç§»é¤ãæ¿æ¢ãæå ¥
appendChild() //æ·»å
removeChild() //ç§»é¤
replaceChild() //æ¿æ¢
insertBefore() //æå
¥
æ¥æ¾
getElementsByTagName() //éè¿æ ç¾åç§°
getElementsByName() //éè¿å
ç´ çName屿§çå¼
getElementById() //éè¿å
ç´ Idï¼å¯ä¸æ§
69 æ£å表达å¼
æ£åè¡¨è¾¾å¼æé 彿°
var reg=new RegExp(âxxxâ)䏿£å表达åé¢évar reg=//æä»ä¹ä¸åï¼å¹é é®ç®±çæ£å表达å¼ï¼
- å½ä½¿ç¨
RegExp()æé 彿°çæ¶åï¼ä¸ä» éè¦è½¬ä¹å¼å·ï¼å³\â表示âï¼ï¼å¹¶ä¸è¿éè¦ååææ ï¼å³\\表示ä¸ä¸ª\ï¼ãä½¿ç¨æ£å表达åé¢éçæçæ´é«
é®ç®±çæ£åå¹é ï¼
var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;
70 Javascriptä¸calleeåcallerçä½ç¨ï¼
calleræ¯è¿åä¸ä¸ªå¯¹å½æ°çå¼ç¨ï¼è¯¥å½æ°è°ç¨äºå½å彿°ï¼calleeæ¯è¿åæ£å¨è¢«æ§è¡çfunction彿°ï¼ä¹å°±æ¯ææå®çfunctionå¯¹è±¡çæ£æ
é£ä¹é®é¢æ¥äºï¼å¦æä¸å¯¹å 忝æçä¸å¯¹å åï¼ä¸å¯¹æ°çå ï¼ä»ç¬¬äºä¸ªæèµ·å°±å¼å§çå åï¼å宿¯å¯¹å å齿¯ä¸éä¸éï¼è¯é®ä¸å¯¹å åï¼ç¬¬n个æè½ç¹æ®æå¤å°å¯¹å åï¼ï¼ä½¿ç¨
callee宿ï¼
var result=[];
function fn(n){ //å
¸åçææ³¢é£å¥æ°å
if(n==1){
return 1;
}else if(n==2){
return 1;
}else{
if(result[n]){
return result[n];
}else{
//argument.callee()表示fn()
result[n]=arguments.callee(n-1)+arguments.callee(n-2);
return result[n];
}
}
}
71 window.onloadå$(document).ready
åç
JSçwindow.onloadä¸Jqueryç$(document).ready(function(){})æä»ä¹ä¸åï¼å¦ä½ç¨åçJSå®ç°Jqçreadyæ¹æ³ï¼
window.onload()æ¹æ³æ¯å¿ é¡»çå°é¡µé¢å å æ¬å¾ççææå ç´ å è½½å®æ¯åæè½æ§è¡ã$(document).ready()æ¯DOMç»æç»å¶å®æ¯åå°±æ§è¡ï¼ä¸å¿ çå°å è½½å®æ¯
function ready(fn){
if(document.addEventListener) { //æ åæµè§å¨
document.addEventListener('DOMContentLoaded', function() {
//注éäºä»¶, é¿å
åå¤è§¦å
document.removeEventListener('DOMContentLoaded',arguments.callee, false);
fn(); //æ§è¡å½æ°
}, false);
}else if(document.attachEvent) { //IE
document.attachEvent('onreadystatechange', function() {
if(document.readyState == 'complete') {
document.detachEvent('onreadystatechange', arguments.callee);
fn(); //彿°æ§è¡
}
});
}
};
72 addEventListener()åattachEvent()çåºå«
addEventListener()æ¯ç¬¦åW3Cè§èçæ åæ¹æ³;attachEvent()æ¯IEä½çæ¬çéæ åæ¹æ³addEventListener()æ¯æäºä»¶å泡åäºä»¶æè·; - èattachEvent()åªæ¯æäºä»¶å泡addEventListener()ç第ä¸ä¸ªåæ°ä¸,äºä»¶ç±»åä¸éè¦æ·»åon;attachEvent()éè¦æ·»å'on'- å¦æä¸ºåä¸ä¸ªå
ç´ ç»å®å¤ä¸ªäºä»¶,
addEventListener()ä¼æç §äºä»¶ç»å®ç顺åºä¾æ¬¡æ§è¡,attachEvent()ä¼æç §äºä»¶ç»å®ç顺åºååºæ§è¡
73 è·å页颿æçcheckbox
var resultArr= [];
var input = document.querySelectorAll('input');
for( var i = 0; i < input.length; i++ ) {
if( input[i].type == 'checkbox' ) {
resultArr.push( input[i] );
}
}
//resultArrå³ä¸è·åå°äºé¡µé¢ä¸çææcheckbox
74 æ°ç»å»éæ¹æ³æ»ç»(å ç§æ¹æ³)
æ¹æ³ä¸
- åå±å¾ªç¯ï¼å¤å±å¾ªç¯å ç´ ï¼å å±å¾ªç¯æ¶æ¯è¾å¼
- 妿æç¸åçå¼åè·³è¿ï¼ä¸ç¸åå
pushè¿æ°ç»
Array.prototype.distinct = function(){
var arr = this,
result = [],
i,
j,
len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] === arr[j]){
j = ++i;
}
}
result.push(arr[i]);
}
return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct(); //è¿å[3,4,2,1]
æ¹æ³äºï¼å©ç¨spliceç´æ¥å¨åæ°ç»è¿è¡æä½
- åå±å¾ªç¯ï¼å¤å±å¾ªç¯å ç´ ï¼å å±å¾ªç¯æ¶æ¯è¾å¼
- å¼ç¸åæ¶ï¼åå å»è¿ä¸ªå¼
- 注æç¹:å é¤å ç´ ä¹åï¼éè¦å°æ°ç»çé¿åº¦ä¹å1.
Array.prototype.distinct = function (){
var arr = this,
i,
j,
len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
len--;
j--;
}
}
}
return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56
- ä¼ç¹ï¼ç®åææ
- 缺ç¹ï¼å ç¨å åé«ï¼éåº¦æ ¢
æ¹æ³ä¸ï¼å©ç¨å¯¹è±¡ç屿§ä¸è½ç¸åçç¹ç¹è¿è¡å»é
Array.prototype.distinct = function (){
var arr = this,
i,
obj = {},
result = [],
len = arr.length;
for(i = 0; i< arr.length; i++){
if(!obj[arr[i]]){ //å¦æè½æ¥æ¾å°ï¼è¯ææ°ç»å
ç´ éå¤äº
obj[arr[i]] = 1;
result.push(arr[i]);
}
}
return result;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56
æ¹æ³åï¼æ°ç»éå½å»é
- è¿ç¨éå½çææ³
- å æåºï¼ç¶å仿åå¼å§æ¯è¾ï¼éå°ç¸åï¼åå é¤
Array.prototype.distinct = function (){
var arr = this,
len = arr.length;
arr.sort(function(a,b){ //对æ°ç»è¿è¡æåºæè½æ¹ä¾¿æ¯è¾
return a - b;
})
function loop(index){
if(index >= 1){
if(arr[index] === arr[index-1]){
arr.splice(index,1);
}
loop(index - 1); //éå½loop彿°è¿è¡å»é
}
}
loop(len-1);
return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,45,56
æ¹æ³äºï¼å©ç¨indexOf以åforEach
Array.prototype.distinct = function (){
var arr = this,
result = [],
len = arr.length;
arr.forEach(function(v, i ,arr){ //è¿éå©ç¨mapï¼filteræ¹æ³ä¹å¯ä»¥å®ç°
var bool = arr.indexOf(v,i+1); //ä»ä¼ å
¥åæ°çä¸ä¸ä¸ªç´¢å¼å¼å¼å§å¯»æ¾æ¯å¦åå¨éå¤
if(bool === -1){
result.push(v);
}
})
return result;
};
var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];
var b = a.distinct();
console.log(b.toString()); //1,23,2,3
æ¹æ³å ï¼å©ç¨ES6çset
Setæ°æ®ç»æï¼å®ç±»ä¼¼äºæ°ç»ï¼å ¶æåçå¼é½æ¯å¯ä¸çã- å©ç¨
Array.fromå°Setç»æè½¬æ¢ææ°ç»
function dedupe(array){
return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]
æå±è¿ç®ç¬¦(
...)å é¨ä½¿ç¨for...of循ç¯
let arr = [1,2,3,3];
let resultarr = [...new Set(arr)];
console.log(resultarr); //[1,2,3]
75 ï¼è®¾è®¡é¢ï¼æ³å®ç°ä¸ä¸ªå¯¹é¡µé¢æä¸ªèç¹çææ³ï¼å¦ä½åï¼ï¼ä½¿ç¨åçJSï¼
- ç»éè¦ææ½çèç¹ç»å®
mousedown,mousemove,mouseupäºä»¶ mousedownäºä»¶è§¦ååï¼å¼å§ææ½mousemoveæ¶ï¼éè¦éè¿event.clientXåclientYè·åææ½ä½ç½®ï¼å¹¶å®æ¶æ´æ°ä½ç½®mouseupæ¶ï¼ææ½ç»æ- éè¦æ³¨ææµè§å¨è¾¹ççæ åµ
76 Javascriptå ¨å±å½æ°åå ¨å±åé
å ¨å±åé
Infinity代表æ£çæ ç©·å¤§çæ°å¼ãNaNæç¤ºæä¸ªå¼æ¯ä¸æ¯æ°åå¼ãundefinedæç¤ºæªå®ä¹çå¼ã
å ¨å±å½æ°
decodeURI()è§£ç æä¸ªç¼ç çURIãdecodeURIComponent()è§£ç ä¸ä¸ªç¼ç çURIç»ä»¶ã- `encodeURI() æå符串ç¼ç 为 URIã
encodeURIComponent()æå符串ç¼ç 为URIç»ä»¶ãescape()对å符串è¿è¡ç¼ç ãeval()计ç®JavaScriptå符串ï¼å¹¶æå®ä½ä¸ºèæ¬ä»£ç æ¥æ§è¡ãisFinite()æ£æ¥æä¸ªå¼æ¯å¦ä¸ºæç©·å¤§çæ°ãisNaN()æ£æ¥æä¸ªå¼æ¯å¦æ¯æ°åãNumber()æå¯¹è±¡çå¼è½¬æ¢ä¸ºæ°åãparseFloat()è§£æä¸ä¸ªå符串并è¿åä¸ä¸ªæµ®ç¹æ°ãparseInt()è§£æä¸ä¸ªå符串并è¿åä¸ä¸ªæ´æ°ãString()æå¯¹è±¡çå¼è½¬æ¢ä¸ºå符串ãunescape()对ç±escape()ç¼ç çå符串è¿è¡è§£ç
77 使ç¨jså®ç°ä¸ä¸ªæç»çå¨ç»ææ
宿¶å¨æè·¯
var e = document.getElementById('e')
var flag = true;
var left = 0;
setInterval(() => {
left == 0 ? flag = true : left == 100 ? flag = false : ''
flag ? e.style.left = ` ${left++}px` : e.style.left = ` ${left--}px`
}, 1000 / 60)
requestAnimationFrame
//å
¼å®¹æ§å¤ç
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
})();
var e = document.getElementById("e");
var flag = true;
var left = 0;
function render() {
left == 0 ? flag = true : left == 100 ? flag = false : '';
flag ? e.style.left = ` ${left++}px` :
e.style.left = ` ${left--}px`;
}
(function animloop() {
render();
requestAnimFrame(animloop);
})();
使ç¨csså®ç°ä¸ä¸ªæç»çå¨ç»ææ
animation:mymove 5s infinite;
@keyframes mymove {
from {top:0px;}
to {top:200px;}
}
animation-nameè§å®éè¦ç»å®å°éæ©å¨çkeyframeåç§°ãanimation-durationè§å®å®æå¨ç»æè±è´¹çæ¶é´ï¼ä»¥ç§ææ¯«ç§è®¡ãanimation-timing-functionè§å®å¨ç»çé度æ²çº¿ãanimation-delayè§å®å¨å¨ç»å¼å§ä¹åçå»¶è¿ãanimation-iteration-countè§å®å¨ç»åºè¯¥ææ¾ç次æ°ãanimation-directionè§å®æ¯å¦åºè¯¥è½®æµååææ¾å¨ç»
78 å°è£ ä¸ä¸ªå½æ°ï¼åæ°æ¯å®æ¶å¨çæ¶é´ï¼.thenæ§è¡åè°å½æ°
function sleep (time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
79 æä¹å¤æä¸¤ä¸ªå¯¹è±¡ç¸çï¼
obj={
a:1,
b:2
}
obj2={
a:1,
b:2
}
obj3={
a:1,
b:'2'
}
å¯ä»¥è½¬æ¢ä¸ºå符串æ¥å¤æ
JSON.stringify(obj)==JSON.stringify(obj2);//true
JSON.stringify(obj)==JSON.stringify(obj3);//false
80 项ç®åè¿åªäºæ§è½ä¼åï¼
- åå° HTTP` è¯·æ±æ°
- åå°
DNSæ¥è¯¢ - 使ç¨
CDN - é¿å éå®å
- å¾çæå è½½
- åå°
DOMå ç´ æ°é - åå°
DOMæä½ - 使ç¨å¤é¨
JavaScriptåCSS - å缩
JavaScriptãCSSãåä½ãå¾çç - ä¼å
CSS Sprite - 使ç¨
iconfont - åä½è£åª
- å¤ååååååå 容å°ä¸ååå
- å°½éåå°
iframeä½¿ç¨ - é¿å
å¾ç
src为空 - ææ ·å¼è¡¨æ¾å¨
linkä¸ - æèæ¬æ¾å¨é¡µé¢åºé¨
81 æµè§å¨ç¼å
æµè§å¨ç¼åå为强ç¼ååååç¼åãå½å®¢æ·ç«¯è¯·æ±æä¸ªèµæºæ¶ï¼è·åç¼åçæµç¨å¦ä¸
- å
æ ¹æ®è¿ä¸ªèµæºçä¸äº
http header夿宿¯å¦å½ä¸å¼ºç¼åï¼å¦æå½ä¸ï¼åç´æ¥ä»æ¬å°è·åç¼åèµæºï¼ä¸ä¼å请æ±å°æå¡å¨ï¼ - å½å¼ºç¼å没æå½ä¸æ¶ï¼å®¢æ·ç«¯ä¼åé请æ±å°æå¡å¨ï¼æå¡å¨éè¿å¦ä¸äº
request headeréªè¯è¿ä¸ªèµæºæ¯å¦å½ä¸ååç¼åï¼ç§°ä¸ºhttpåéªè¯ï¼å¦æå½ä¸ï¼æå¡å¨å°è¯·æ±è¿åï¼ä½ä¸è¿åèµæºï¼èæ¯åè¯å®¢æ·ç«¯ç´æ¥ä»ç¼åä¸è·åï¼å®¢æ·ç«¯æ¶å°è¿ååå°±ä¼ä»ç¼åä¸è·åèµæºï¼ - 强ç¼ååååç¼åå ±åä¹å¤å¨äºï¼å¦æå½ä¸ç¼åï¼æå¡å¨é½ä¸ä¼è¿åèµæºï¼ åºå«æ¯ï¼å¼ºç¼åä¸å¯¹åé请æ±å°æå¡å¨ï¼ä½ååç¼åä¼ã
- å½ååç¼å乿²¡å½ä¸æ¶ï¼æå¡å¨å°±ä¼å°èµæºåéå客æ·ç«¯ã
- å½
ctrl+f5强å¶å·æ°ç½é¡µæ¶ï¼ç´æ¥ä»æå¡å¨å è½½ï¼è·³è¿å¼ºç¼ååååç¼åï¼ - å½
f5å·æ°ç½é¡µæ¶ï¼è·³è¿å¼ºç¼åï¼ä½æ¯ä¼æ£æ¥ååç¼åï¼
强ç¼å
Expiresï¼è¯¥å段æ¯http1.0æ¶çè§èï¼å¼ä¸ºä¸ä¸ªç»å¯¹æ¶é´çGMTæ ¼å¼çæ¶é´å符串ï¼ä»£è¡¨ç¼åèµæºçè¿ææ¶é´ï¼Cache-Control:max-ageï¼è¯¥å段æ¯http1.1çè§èï¼å¼ºç¼åå©ç¨å ¶max-age弿¥å¤æç¼åèµæºçæå¤§çå½å¨æï¼å®çå¼åä½ä¸ºç§ï¼
ååç¼å
Last-Modifiedï¼å¼ä¸ºèµæºæåæ´æ°æ¶é´ï¼éæå¡å¨responseè¿åï¼If-Modified-Sinceï¼éè¿æ¯è¾ä¸¤ä¸ªæ¶é´æ¥å¤æèµæºå¨ä¸¤æ¬¡è¯·æ±æé´æ¯å¦æè¿ä¿®æ¹ï¼å¦ææ²¡æä¿®æ¹ï¼åå½ä¸ååç¼åï¼ETagï¼è¡¨ç¤ºèµæºå 容çå¯ä¸æ è¯ï¼éæå¡å¨responseè¿åï¼If-None-Matchï¼æå¡å¨éè¿æ¯è¾è¯·æ±å¤´é¨çIf-None-Matchä¸å½åèµæºçETagæ¯å¦ä¸è´æ¥å¤æèµæºæ¯å¦å¨ä¸¤æ¬¡è¯·æ±ä¹é´æè¿ä¿®æ¹ï¼å¦ææ²¡æä¿®æ¹ï¼åå½ä¸ååç¼åï¼
82 WebSocket
ç±äº
httpåå¨ä¸ä¸ªææ¾çå¼ç«¯ï¼æ¶æ¯åªè½æå®¢æ·ç«¯æ¨éå°æå¡å¨ç«¯ï¼èæå¡å¨ç«¯ä¸è½ä¸»å¨æ¨éå°å®¢æ·ç«¯ï¼ï¼å¯¼è´å¦ææå¡å¨å¦ææè¿ç»çååï¼è¿æ¶åªè½ä½¿ç¨è½®è¯¢ï¼è轮询æçè¿ä½ï¼å¹¶ä¸éåãäºæ¯WebSocket被åæåºæ¥
ç¸æ¯ä¸
httpå ·æä»¥ä¸æç¹
- æ¯æååéä¿¡ï¼å®æ¶æ§æ´å¼ºï¼
- å¯ä»¥åéææ¬ï¼ä¹å¯ä»¥äºè¿å¶æä»¶ï¼
- åè®®æ è¯ç¬¦æ¯
wsï¼å å¯åæ¯wssï¼ - è¾å°çæ§å¶å¼éãè¿æ¥å建åï¼
ws客æ·ç«¯ãæå¡ç«¯è¿è¡æ°æ®äº¤æ¢æ¶ï¼åè®®æ§å¶çæ°æ®å 头é¨è¾å°ãå¨ä¸å å«å¤´é¨çæ åµä¸ï¼æå¡ç«¯å°å®¢æ·ç«¯çå å¤´åªæ2~10åèï¼åå³äºæ°æ®å é¿åº¦ï¼ï¼å®¢æ·ç«¯å°æå¡ç«¯ççè¯ï¼éè¦å ä¸é¢å¤ç4åèçæ©ç ãèHTTPåè®®æ¯æ¬¡éä¿¡é½éè¦æºå¸¦å®æ´ç头é¨ï¼ - æ¯ææ©å±ãwsåè®®å®ä¹äºæ©å±ï¼ç¨æ·å¯ä»¥æ©å±åè®®ï¼æè å®ç°èªå®ä¹çååè®®ãï¼æ¯å¦æ¯æèªå®ä¹åç¼©ç®æ³çï¼
- æ è·¨åé®é¢ã
å®ç°æ¯è¾ç®åï¼æå¡ç«¯åºå¦
socket.ioãwsï¼å¯ä»¥å¾å¥½çå¸®å©æä»¬å ¥é¨ãè客æ·ç«¯ä¹åªéè¦åç §apiå®ç°å³å¯
83 å°½å¯è½å¤ç说åºä½ 对 Electron ççè§£
ææéè¦çä¸ç¹ï¼
electronå®é 䏿¯ä¸ä¸ªå¥äºChromeçnodeç¨åº
æä»¥åºè¯¥æ¯ä»ä¸¤ä¸ªæ¹é¢è¯´å¼æ¥
Chromeï¼æ åç§å ¼å®¹æ§é®é¢ï¼ï¼Nodeï¼Nodeè½åçå®ä¹è½åï¼
84 æ·±æµ æ·è´
æµ æ·è´
Object.assign- æè å±å¼è¿ç®ç¬¦
æ·±æ·è´
- å¯ä»¥éè¿
JSON.parse(JSON.stringify(object))æ¥è§£å³
let a = {
age: 1,
jobs: {
first: 'FE'
}
}
let b = JSON.parse(JSON.stringify(a))
a.jobs.first = 'native'
console.log(b.jobs.first) // FE
è¯¥æ¹æ³ä¹æ¯æå±éæ§ç
- ä¼å¿½ç¥
undefined - ä¸è½åºåå彿°
- ä¸è½è§£å³å¾ªç¯å¼ç¨ç对象
85 鲿/èæµ
鲿
卿»å¨äºä»¶ä¸éè¦åä¸ªå¤æè®¡ç®æè å®ç°ä¸ä¸ªæé®çé²äºæ¬¡ç¹å»æä½ãå¯ä»¥éè¿å½æ°é²æå¨æ¥å®ç°
// ä½¿ç¨ underscore çæºç æ¥è§£é鲿å¨
/**
* underscore 鲿彿°ï¼è¿å彿°è¿ç»è°ç¨æ¶ï¼ç©ºé²æ¶é´å¿
é¡»å¤§äºæçäº waitï¼func æä¼æ§è¡
*
* @param {function} func åè°å½æ°
* @param {number} wait 表示æ¶é´çªå£çé´é
* @param {boolean} immediate 设置为tureæ¶ï¼æ¯å¦ç«å³è°ç¨å½æ°
* @return {function} è¿å客æ·è°ç¨å½æ°
*/
_.debounce = function(func, wait, immediate) {
var timeout, args, context, timestamp, result;
var later = function() {
// ç°å¨åä¸ä¸æ¬¡æ¶é´æ³æ¯è¾
var last = _.now() - timestamp;
// 妿å½åé´éæ¶é´å°äºè®¾å®æ¶é´ä¸å¤§äº0å°±éæ°è®¾ç½®å®æ¶å¨
if (last < wait && last >= 0) {
timeout = setTimeout(later, wait - last);
} else {
// å¦åçè¯å°±æ¯æ¶é´å°äºæ§è¡åè°å½æ°
timeout = null;
if (!immediate) {
result = func.apply(context, args);
if (!timeout) context = args = null;
}
}
};
return function() {
context = this;
args = arguments;
// è·å¾æ¶é´æ³
timestamp = _.now();
// 妿宿¶å¨ä¸åå¨ä¸ç«å³æ§è¡å½æ°
var callNow = immediate && !timeout;
// 妿宿¶å¨ä¸åå¨å°±å建ä¸ä¸ª
if (!timeout) timeout = setTimeout(later, wait);
if (callNow) {
// 妿éè¦ç«å³æ§è¡å½æ°çè¯ éè¿ apply æ§è¡
result = func.apply(context, args);
context = args = null;
}
return result;
};
};
æ´ä½å½æ°å®ç°
å¯¹äºæé®é²ç¹å»æ¥è¯´çå®ç°
- å¼å§ä¸ä¸ªå®æ¶å¨ï¼åªè¦æå®æ¶å¨è¿å¨ï¼ä¸ç®¡ä½ æä¹ç¹å»é½ä¸ä¼æ§è¡åè°å½æ°ã䏿¦å®æ¶å¨ç»æå¹¶è®¾ç½®ä¸º nullï¼å°±å¯ä»¥å次ç¹å»äº
- 对äºå»¶æ¶æ§è¡å½æ°æ¥è¯´çå®ç°ï¼æ¯æ¬¡è°ç¨é²æå¨å½æ°é½ä¼å¤ææ¬æ¬¡è°ç¨åä¹åçæ¶é´é´éï¼å¦æå°äºéè¦çæ¶é´é´éï¼å°±ä¼éæ°å建ä¸ä¸ªå®æ¶å¨ï¼å¹¶ä¸å®æ¶å¨çå»¶æ¶ä¸ºè®¾å®æ¶é´åå»ä¹åçæ¶é´é´éã䏿¦æ¶é´å°äºï¼å°±ä¼æ§è¡ç¸åºçåè°å½æ°
èæµ
鲿å¨åèæµæ¬è´¨æ¯ä¸ä¸æ ·çã鲿卿¯å°å¤æ¬¡æ§è¡å为æå䏿¬¡æ§è¡ï¼èæµæ¯å°å¤æ¬¡æ§è¡åææ¯é䏿®µæ¶é´æ§è¡
/**
* underscore èæµå½æ°ï¼è¿å彿°è¿ç»è°ç¨æ¶ï¼func æ§è¡é¢çéå®ä¸º 次 / wait
*
* @param {function} func åè°å½æ°
* @param {number} wait 表示æ¶é´çªå£çé´é
* @param {object} options 妿æ³å¿½ç¥å¼å§å½æ°ççè°ç¨ï¼ä¼ å
¥{leading: false}ã
* 妿æ³å¿½ç¥ç»å°¾å½æ°çè°ç¨ï¼ä¼ å
¥{trailing: false}
* 两è
ä¸è½å
±åï¼å¦å彿°ä¸è½æ§è¡
* @return {function} è¿å客æ·è°ç¨å½æ°
*/
_.throttle = function(func, wait, options) {
var context, args, result;
var timeout = null;
// ä¹åçæ¶é´æ³
var previous = 0;
// 妿 options æ²¡ä¼ å设为空对象
if (!options) options = {};
// 宿¶å¨åè°å½æ°
var later = function() {
// å¦æè®¾ç½®äº leadingï¼å°±å° previous 设为 0
// ç¨äºä¸é¢å½æ°ç第ä¸ä¸ª if 夿
previous = options.leading === false ? 0 : _.now();
// ç½®ç©ºä¸æ¯ä¸ºäºé²æ¢å
åæ³æ¼ï¼äºæ¯ä¸ºäºä¸é¢ç宿¶å¨å¤æ
timeout = null;
result = func.apply(context, args);
if (!timeout) context = args = null;
};
return function() {
// è·å¾å½åæ¶é´æ³
var now = _.now();
// 馿¬¡è¿å
¥åè
è¯å®ä¸º true
// 妿éè¦ç¬¬ä¸æ¬¡ä¸æ§è¡å½æ°
// å°±å°ä¸æ¬¡æ¶é´æ³è®¾ä¸ºå½åç
// è¿æ ·å¨æ¥ä¸æ¥è®¡ç® remaining ç弿¶ä¼å¤§äº0
if (!previous && options.leading === false) previous = now;
// 计ç®å©ä½æ¶é´
var remaining = wait - (now - previous);
context = this;
args = arguments;
// 妿å½åè°ç¨å·²ç»å¤§äºä¸æ¬¡è°ç¨æ¶é´ + wait
// æè
ç¨æ·æå¨è°äºæ¶é´
// å¦æè®¾ç½®äº trailingï¼åªä¼è¿å
¥è¿ä¸ªæ¡ä»¶
// å¦ææ²¡æè®¾ç½® leadingï¼é£ä¹ç¬¬ä¸æ¬¡ä¼è¿å
¥è¿ä¸ªæ¡ä»¶
// è¿æä¸ç¹ï¼ä½ å¯è½ä¼è§å¾å¼å¯äºå®æ¶å¨é£ä¹åºè¯¥ä¸ä¼è¿å
¥è¿ä¸ª if æ¡ä»¶äº
// å
¶å®è¿æ¯ä¼è¿å
¥çï¼å ä¸ºå®æ¶å¨çå»¶æ¶
// 并䏿¯åç¡®çæ¶é´ï¼å¾å¯è½ä½ 设置äº2ç§
// 使¯ä»éè¦2.2ç§æè§¦åï¼è¿æ¶åå°±ä¼è¿å
¥è¿ä¸ªæ¡ä»¶
if (remaining <= 0 || remaining > wait) {
// 妿åå¨å®æ¶å¨å°±æ¸
çæå¦åä¼è°ç¨äºæ¬¡åè°
if (timeout) {
clearTimeout(timeout);
timeout = null;
}
previous = now;
result = func.apply(context, args);
if (!timeout) context = args = null;
} else if (!timeout && options.trailing !== false) {
// 夿æ¯å¦è®¾ç½®äºå®æ¶å¨å trailing
// 没æçè¯å°±å¼å¯ä¸ä¸ªå®æ¶å¨
// å¹¶ä¸ä¸è½ä¸è½åæ¶è®¾ç½® leading å trailing
timeout = setTimeout(later, remaining);
}
return result;
};
};
86 è°è°åéæåï¼
彿§è¡ JS ä»£ç æ¶ï¼ä¼çææ§è¡ç¯å¢ï¼åªè¦ä»£ç 䏿¯åå¨å½æ°ä¸çï¼å°±æ¯å¨å ¨å±æ§è¡ç¯å¢ä¸ï¼å½æ°ä¸ç代ç ä¼äº§ç彿°æ§è¡ç¯å¢ï¼åªæ¤ä¸¤ç§æ§è¡ç¯å¢
- æ¥ä¸æ¥è®©æä»¬çä¸ä¸ªèç常è°çä¾åï¼
var
b() // call b
console.log(a) // undefined
var a = 'Hello world'
function b() {
console.log('call b')
}
::: tip åéæå
è¿æ¯å ä¸ºå½æ°ååéæåçåå ãé常æåçè§£éæ¯è¯´å°å£°æç代ç ç§»å¨å°äºé¡¶é¨ï¼è¿å
¶å®æ²¡æä»ä¹é误ï¼ä¾¿äºå¤§å®¶çè§£ã使¯æ´åç¡®çè§£éåºè¯¥æ¯ï¼å¨çææ§è¡ç¯å¢æ¶ï¼ä¼æä¸¤ä¸ªé¶æ®µã第ä¸ä¸ªé¶æ®µæ¯å建çé¶æ®µï¼JS è§£éå¨ä¼æ¾åºéè¦æåçåéå彿°ï¼å¹¶ä¸ç»ä»ä»¬æåå¨å
åä¸å¼è¾å¥½ç©ºé´ï¼å½æ°çè¯ä¼å°æ´ä¸ªå½æ°åå
¥å
åä¸ï¼åéåªå£°æå¹¶ä¸èµå¼ä¸º undefinedï¼æä»¥å¨ç¬¬äºä¸ªé¶æ®µï¼ä¹å°±æ¯ä»£ç æ§è¡é¶æ®µï¼æä»¬å¯ä»¥ç´æ¥æå使ç¨
:::
卿åçè¿ç¨ä¸ï¼ç¸åç彿°ä¼è¦çä¸ä¸ä¸ªå½æ°ï¼å¹¶ä¸å½æ°ä¼å äºåéæå
b() // call b second
function b() {
console.log('call b fist')
}
function b() {
console.log('call b second')
}
var b = 'Hello world'
å¤å¶ä»£ç
varä¼äº§çå¾å¤éè¯¯ï¼æä»¥å¨ES6ä¸å¼å ¥äºletãletä¸è½å¨å£°æå使ç¨ï¼ä½æ¯è¿å¹¶ä¸æ¯å¸¸è¯´çletä¸ä¼æåï¼letæåäºï¼å¨ç¬¬ä¸é¶æ®µå åä¹å·²ç»ä¸ºä»å¼è¾å¥½äºç©ºé´ï¼ä½æ¯å 为è¿ä¸ªå£°æçç¹æ§å¯¼è´äºå¹¶ä¸è½å¨å£°æå使ç¨
åãjQuery
1 ä½ è§å¾jQueryæzeptoæºç æåªäºåç好çå°æ¹
- jqueryæºç å°è£ å¨ä¸ä¸ªå¿å彿°çèªæ§è¡ç¯å¢ä¸ï¼æå©äºé²æ¢åéçå ¨å±æ±¡æï¼ç¶åéè¿ä¼ å ¥windowå¯¹è±¡åæ°ï¼å¯ä»¥ä½¿window对象ä½ä¸ºå±é¨åé使ç¨ï¼å¥½å¤æ¯å½jqueryä¸è®¿é®windowå¯¹è±¡çæ¶åï¼å°±ä¸ç¨å°ä½ç¨åé¾éåå°é¡¶å±ä½ç¨åäºï¼ä»èå¯ä»¥æ´å¿«ç访é®window对象ãåæ ·ï¼ä¼ å ¥undefinedåæ°ï¼å¯ä»¥ç¼©çæ¥æ¾undefinedæ¶çä½ç¨åé¾
(function( window, undefined ) {
//ç¨ä¸ä¸ªå½æ°åå
èµ·æ¥ï¼å°±æ¯æè°çæ²ç®±
//å¨è¿éè¾¹varå®ä¹çåéï¼å±äºè¿ä¸ªå½æ°åå
çå±é¨åéï¼é¿å
污æå
¨å±
//æå½åæ²ç®±éè¦çå¤é¨åééè¿å½æ°åæ°å¼å
¥è¿æ¥
//åªè¦ä¿è¯åæ°å¯¹å
æä¾çæ¥å£çä¸è´æ§ï¼ä½ è¿å¯ä»¥éææ¿æ¢ä¼ è¿æ¥çè¿ä¸ªåæ°
window.jQuery = window.$ = jQuery;
})( window );
- jqueryå°ä¸äºåå屿§åæ¹æ³å°è£ å¨äºjquery.prototypeä¸ï¼ä¸ºäºç¼©çåç§°ï¼åèµå¼ç»äºjquery.fnï¼è¿æ¯å¾å½¢è±¡çåæ³
- æä¸äºæ°ç»æå¯¹è±¡çæ¹æ³ç»å¸¸è½ä½¿ç¨å°ï¼jQueryå°å ¶ä¿å为å±é¨åé以æé«è®¿é®é度
- jqueryå®ç°çé¾å¼è°ç¨å¯ä»¥è约代ç ï¼æè¿åç齿¯åä¸ä¸ªå¯¹è±¡ï¼å¯ä»¥æé«ä»£ç æç
2 jQuery çå®ç°åç
-
(function(window, undefined) {})(window); -
jQueryå©ç¨JS彿°ä½ç¨åçç¹æ§ï¼éç¨ç«å³è°ç¨è¡¨è¾¾å¼å 裹äºèªèº«ï¼è§£å³å½å空é´ååéæ±¡æé®é¢ -
window.jQuery = window.$ = jQuery; -
å¨éå å½ä¸å° jQuery å $ ç»å®å° window ä¸ï¼ä»èå° jQuery å $ æ´é²ä¸ºå ¨å±åé
3 jQuery.fn ç init æ¹æ³è¿åç this æçæ¯ä»ä¹å¯¹è±¡
- jQuery.fn ç init æ¹æ³ è¿åç this å°±æ¯ jQuery 对象
- ç¨æ·ä½¿ç¨ jQuery() æ $() å³å¯åå§å jQuery 对象ï¼ä¸éè¦å¨æçå»è°ç¨ init æ¹æ³
4 jQuery.extend ä¸ jQuery.fn.extend çåºå«
$.fn.extend()å$.extend()æ¯jQuery为æ©å±æä»¶ææ±äºä¸¤ä¸ªæ¹æ³$.extend(object); // 为jQueryæ·»å âéææ¹æ³âï¼å·¥å ·æ¹æ³ï¼
$.extend({
ããmin: function(a, b) { return a < b ? a : b; },
ããmax: function(a, b) { return a > b ? a : b; }
});
$.min(2,3); // 2
$.max(4,5); // 5
- $.extend([true,] targetObject, object1[, object2]); // 对targt对象è¿è¡æ©å±
var settings = {validate:false, limit:5};
var options = {validate:true, name:"bar"};
$.extend(settings, options); // 注æï¼ä¸æ¯æç¬¬ä¸ä¸ªåæ°ä¼ false
// settings == {validate:true, limit:5, name:"bar"}
$.fn.extend(json); // 为jQueryæ·»å âæå彿°âï¼å®ä¾æ¹æ³ï¼
$.fn.extend({
alertValue: function() {
$(this).click(function(){
alert($(this).val());
});
}
});
$("#email").alertValue();
5 jQuery ç屿§æ·è´(extend)çå®ç°åçæ¯ä»ä¹ï¼å¦ä½å®ç°æ·±æ·è´
-
æµ æ·è´ï¼åªå¤å¶ä¸ä»½åå§å¯¹è±¡çå¼ç¨ï¼
var newObject = $.extend({}, oldObject); -
æ·±æ·è´ï¼å¯¹åå§å¯¹è±¡å±æ§æå¼ç¨ç对象è¿è¡è¿è¡é彿·è´ï¼
var newObject = $.extend(true, {}, oldObject);
6 jQuery çé忝å¦ä½å®ç°ç
- jQuery æ ¸å¿ä¸æä¸ç»éåæ§å¶æ¹æ³ï¼ç±
queue()/dequeue()/clearQueue()ä¸ä¸ªæ¹æ³ç»æã - 主è¦åºç¨äº
animate()ï¼ajaxï¼å ¶ä»è¦ææ¶é´é¡ºåºæ§è¡çäºä»¶ä¸
var func1 = function(){alert('äºä»¶1');}
var func2 = function(){alert('äºä»¶2');}
var func3 = function(){alert('äºä»¶3');}
var func4 = function(){alert('äºä»¶4');}
// å
¥æ éåäºä»¶
$('#box').queue("queue1", func1); // push func1 to queue1
$('#box').queue("queue1", func2); // push func2 to queue1
// æ¿æ¢éåäºä»¶
$('#box').queue("queue1", []); // delete queue1 with empty array
$('#box').queue("queue1", [func3, func4]); // replace queue1
// è·åéåäºä»¶ï¼è¿åä¸ä¸ªå½æ°æ°ç»ï¼
$('#box').queue("queue1"); // [func3(), func4()]
// åºæ éåäºä»¶å¹¶æ§è¡
$('#box').dequeue("queue1"); // return func3 and do func3
$('#box').dequeue("queue1"); // return func4 and do func4
// æ¸
空æ´ä¸ªéå
$('#box').clearQueue("queue1"); // delete queue1 with clearQueue
7 jQuery ä¸ç bind(), live(), delegate(), on()çåºå«
bindç´æ¥ç»å®å¨ç®æ å ç´ ä¸liveéè¿åæ³¡ä¼ æäºä»¶ï¼é»è®¤documentä¸ï¼æ¯æå¨ææ°æ®delegateæ´ç²¾ç¡®çå°èå´ä½¿ç¨äºä»¶ä»£çï¼æ§è½ä¼äº liveonæ¯ææ°ç1.9çæ¬æ´åäºä¹åçä¸ç§æ¹å¼çæ°äºä»¶ç»å®æºå¶
8 æ¯å¦ç¥éèªå®ä¹äºä»¶
- äºä»¶å³âåå¸/订é âæ¨¡å¼ï¼èªå®ä¹äºä»¶å³âæ¶æ¯åå¸âï¼äºä»¶ççå¬å³â订é 订é â
- JS åçæ¯æèªå®ä¹äºä»¶ï¼ç¤ºä¾ï¼
document.createEvent(type); // å建äºä»¶
event.initEvent(eventType, canBubble, prevent); // åå§åäºä»¶
target.addEventListener('dataavailable', handler, false); // çå¬äºä»¶
target.dispatchEvent(e); // 触åäºä»¶
- jQuery éç
fire彿°ç¨äºè°ç¨jQueryèªå®ä¹äºä»¶å表ä¸çäºä»¶
9 jQuery éè¿åªä¸ªæ¹æ³å Sizzle éæ©å¨ç»åç
Sizzleéæ©å¨éåRight To Leftçå¹é 模å¼ï¼å æå¯»ææå¹é æ ç¾ï¼å夿å®çç¶èç¹jQueryéè¿$(selecter).find(selecter);åSizzleéæ©å¨ç»å
10 jQuery ä¸å¦ä½å°æ°ç»è½¬å为 JSON å符串ï¼ç¶åå转å忥
// éè¿åç JSON.stringify/JSON.parse æ©å± jQuery å®ç°
$.array2json = function(array) {
return JSON.stringify(array);
}
$.json2array = function(array) {
// $.parseJSON(array); // 3.0 å¼å§ï¼å·²è¿æ¶
return JSON.parse(array);
}
// è°ç¨
var json = $.array2json(['a', 'b', 'c']);
var array = $.json2array(json);
11 jQuery ä¸ä¸ªå¯¹è±¡å¯ä»¥åæ¶ç»å®å¤ä¸ªäºä»¶ï¼è¿æ¯å¦ä½å®ç°ç
$("#btn").on("mouseover mouseout", func);
$("#btn").on({
mouseover: func1,
mouseout: func2,
click: func3
});
12 é对 jQuery çä¼åæ¹æ³
- ç¼åé¢ç¹æä½
DOM对象 - å°½é使ç¨
idéæ©å¨ä»£æ¿classéæ©å¨ - æ»æ¯ä»
#id鿩卿¥ç»§æ¿ - å°½é使ç¨é¾å¼æä½
- ä½¿ç¨æ¶é´å§æ
onç»å®äºä»¶ - éç¨
jQueryçå é¨å½æ°data()æ¥å卿°æ® - ä½¿ç¨ææ°çæ¬ç
jQuery
13 jQuery ç slideUp å¨ç»ï¼å½é¼ æ å¿«éè¿ç»è§¦å, å¨ç»ä¼æ»åå夿§è¡ï¼è¯¥å¦ä½å¤çå¢
- å¨è§¦åå
ç´ ä¸çäºä»¶è®¾ç½®ä¸ºå»¶è¿å¤çï¼ä½¿ç¨
JSåçsetTimeoutæ¹æ³ - å¨è§¦åå
ç´ çäºä»¶æ¶é¢å
忢ææçå¨ç»ï¼åæ§è¡ç¸åºçå¨ç»äºä»¶ï¼
$('.tab').stop().slideUp();
14 jQuery UI å¦ä½èªå®ä¹ç»ä»¶
- éè¿å
$.widget()ä¼ éç»ä»¶åç§°åä¸ä¸ªåå对象æ¥å®æ $.widget("ns.widgetName", [baseWidget], widgetPrototype);
15 jQuery ä¸ jQuery UIãjQuery Mobile åºå«
-
jQueryæ¯JSåºï¼å ¼å®¹åç§PCæµè§å¨ï¼ä¸»è¦ç¨ä½æ´æ¹ä¾¿å°å¤çDOMãäºä»¶ãå¨ç»ãAJAX -
jQuery UIæ¯å»ºç«å¨jQueryåºä¸çä¸ç»ç¨æ·çé¢äº¤äºãç¹æãå°é¨ä»¶åä¸»é¢ -
jQuery Mobile以jQuery为åºç¡ï¼ç¨äºå建âç§»å¨Webåºç¨âçæ¡æ¶
16 jQuery å Zepto çåºå«ï¼ åèªç使ç¨åºæ¯
jQuery主è¦ç®æ æ¯PCçç½é¡µä¸ï¼å ¼å®¹å ¨é¨ä¸»æµæµè§å¨ãå¨ç§»å¨è®¾å¤æ¹é¢ï¼åç¬æ¨åº `jQuery MobileZeptoä»ä¸å¼å§å°±å®ä½ç§»å¨è®¾å¤ï¼ç¸å¯¹æ´è½»é级ãå®çAPIåºæ¬å ¼å®¹jQuery`ï¼ä½å¯¹PCæµè§å¨å ¼å®¹ä¸çæ³
17 jQuery对象çç¹ç¹
- åªæ
JQuery对象æè½ä½¿ç¨JQueryæ¹æ³ JQuery对象æ¯ä¸ä¸ªæ°ç»å¯¹è±¡
äºãBootstrap
1 ä»ä¹æ¯Bootstrapï¼ä»¥å为ä»ä¹è¦ä½¿ç¨Bootstrapï¼
Bootstrapæ¯ä¸ä¸ªç¨äºå¿«éå¼åWebåºç¨ç¨åºåç½ç«çåç«¯æ¡æ¶ãBootstrapæ¯åºäºHTMLãCSSãJAVASCRIPTç
Bootstrapå ·æç§»å¨è®¾å¤ä¼å ãæµè§å¨æ¯æè¯å¥½ã容æä¸æãååºå¼è®¾è®¡çä¼ç¹ï¼æä»¥Bootstrap被广æ³åºç¨
2 使ç¨Bootstrapæ¶ï¼è¦å£°æçææ¡£ç±»åæ¯ä»ä¹ï¼ä»¥å为ä»ä¹è¦è¿æ ·å£°æï¼
- 使ç¨
Bootstrapæ¶ï¼éè¦ä½¿ç¨HTML5ææ¡£ç±»åï¼Doctypeï¼ã<!DOCTYPE html> - å 为
Bootstrap使ç¨äºä¸äºHTML5å ç´ åCSS屿§ï¼å¦æå¨Bootstrapå建çç½é¡µå¼å¤´ä¸ä½¿ç¨HTML5çææ¡£ç±»åï¼Doctypeï¼ï¼å¯è½ä¼é¢ä¸´ä¸äºæµè§å¨æ¾ç¤ºä¸ä¸è´çé®é¢ï¼çè³å¯è½é¢ä¸´ä¸äºç¹å®æ å¢ä¸çä¸ä¸è´ï¼ä»¥è´äºä»£ç ä¸è½éè¿W3Cæ åçéªè¯
3 ä»ä¹æ¯Bootstrapç½æ ¼ç³»ç»
Bootstrapå å«äºä¸ä¸ªååºå¼çãç§»å¨è®¾å¤ä¼å çãä¸åºå®çç½æ ¼ç³»ç»ï¼å¯ä»¥éçè®¾å¤æè§å£å¤§å°çå¢å èéå½å°æ©å±å°12åãå®å å«äºç¨äºç®åçå¸å±é项çé¢å®ä¹ç±»ï¼ä¹å å«äºç¨äºçææ´å¤è¯ä¹å¸å±çåè½å¼ºå¤§çæ··åç±»
- ååºå¼ç½æ ¼ç³»ç»éçå±å¹æè§å£ï¼
viewportï¼å°ºå¯¸çå¢å ï¼ç³»ç»ä¼èªå¨å为æå¤12åã
4 Bootstrap ç½æ ¼ç³»ç»ï¼Grid Systemï¼çå·¥ä½åç
- ï¼1ï¼è¡å¿
é¡»æ¾ç½®å¨Â
.container classå ï¼ä»¥ä¾¿è·å¾éå½ç对é½ï¼alignmentï¼åå è¾¹è·ï¼paddingï¼ã - ï¼2ï¼ä½¿ç¨è¡æ¥å建åçæ°´å¹³ç»ã
- ï¼3ï¼å 容åºè¯¥æ¾ç½®å¨åå ï¼ä¸å¯æåå¯ä»¥æ¯è¡çç´æ¥åå ç´ ã
- ï¼4ï¼é¢å®ä¹çç½æ ¼ç±»ï¼æ¯å¦Â
.row åÂ.col-xs-4ï¼å¯ç¨äºå¿«éåå»ºç½æ ¼å¸å±ãLESSæ··åç±»å¯ç¨äºæ´å¤è¯ä¹å¸å±ã - ï¼5ï¼åéè¿å
è¾¹è·ï¼
paddingï¼æ¥å建åå 容ä¹é´çé´éã该å è¾¹è·æ¯éè¿Â.rows ä¸çå¤è¾¹è·ï¼marginï¼åè´ï¼è¡¨ç¤ºç¬¬ä¸ååæåä¸åçè¡åç§»ã - ï¼6ï¼ç½æ ¼ç³»ç»æ¯éè¿æå®æ¨æ³è¦æ¨ªè·¨çåäºä¸ªå¯ç¨ç忥å建çãä¾å¦ï¼è¦å建ä¸ä¸ªç¸ççåï¼å使ç¨ä¸ä¸ªÂ
.col-xs-4
5 对äºå类尺寸ç设å¤ï¼Bootstrap设置çclassåç¼å嫿¯ä»ä¹
- è¶
å°è®¾å¤ææºï¼
<768pxï¼ï¼.col-xs- - å°å设å¤å¹³æ¿çµèï¼
>=768pxï¼ï¼.col-sm- - ä¸å设å¤å°å¼çµèï¼
>=992pxï¼ï¼.col-md- - 大å设å¤å°å¼çµèï¼
>=1200pxï¼ï¼.col-lg-
6 Bootstrap ç½æ ¼ç³»ç»åä¸åä¹é´çé´é宽度æ¯å¤å°
é´é宽度为
30pxï¼ä¸ä¸ªåçæ¯è¾¹å嫿¯15pxï¼
7 妿éè¦å¨ä¸ä¸ªæ é¢çæè¾¹åå»ºå¯æ é¢ï¼å¯ä»¥ææ ·æä½
å¨å ç´ ä¸¤ææ·»å
<small>ï¼æè æ·»å.smallçclass
8 ç¨Bootstrapï¼å¦ä½è®¾ç½®æåç坹齿¹å¼ï¼
class="text-center"è®¾ç½®å± ä¸ææ¬class="text-right"设置åå³å¯¹é½ææ¬class="text-left"设置å左坹齿æ¬
9 Bootstrapå¦ä½è®¾ç½®ååºå¼è¡¨æ ¼ï¼
å¢å
class="table-responsive"
10 使ç¨Bootstrapå建åç´è¡¨åçåºæ¬æ¥éª¤ï¼
-
ï¼1ï¼åç¶
<form>å ç´ æ·»årole="form"ï¼ -
ï¼2ï¼ææ ç¾åæ§ä»¶æ¾å¨ä¸ä¸ªå¸¦æ
class="form-group"ç<div>ä¸ï¼è¿æ¯è·åæä½³é´è·æå¿ éçï¼ -
ï¼3ï¼åææçææ¬å ç´
<input>ã<textarea>ã<select>æ·»åclass="form-control"
11 使ç¨Bootstrapå建水平表åçåºæ¬æ¥éª¤ï¼
-
ï¼1ï¼åç¶
<form>å ç´ æ·»åclass="form-horizontal"ï¼ -
ï¼2ï¼ææ ç¾åæ§ä»¶æ¾å¨ä¸ä¸ªå¸¦æ
class="form-group"ç<div>ä¸ï¼ -
ï¼3ï¼åæ ç¾æ·»å
class="control-label"ã
12 使ç¨Bootstrapå¦ä½åå»ºè¡¨åæ§ä»¶ç叮婿æ¬ï¼
å¢å
class="help-block"çspanæ ç¾æpæ ç¾ã
13 使ç¨Bootstrapæ¿æ´»æç¦ç¨æé®è¦å¦ä½æä½ï¼
- æ¿æ´»æé®ï¼ç»æé®å¢å
.activeçclass - ç¦ç¨æé®ï¼ç»æé®å¢å
disabled="disabled"ç屿§
14 Bootstrapæåªäºå
³äº
çclassï¼
- ï¼1ï¼
.img-rounded 为å¾çæ·»å åè§ - ï¼2ï¼
.img-circle å°å¾çå为åå½¢ - ï¼3ï¼
.img-thumbnail 缩ç¥å¾åè½ - ï¼4ï¼
.img-responsive å¾çååºå¼ (å°å¾å¥½å°æ©å±å°ç¶å ç´ )
15 Bootstrapä¸æå ³å ç´ æµ®å¨åæ¸ é¤æµ®å¨çclassï¼
-
ï¼1ï¼
class="pull-left"å ç´ æµ®å¨å°å·¦è¾¹ -
ï¼2ï¼
class="pull-right"å ç´ æµ®å¨å°å³è¾¹ -
ï¼3ï¼
class="clearfix"æ¸ é¤æµ®å¨
16 é¤äºå±å¹é 读å¨å¤ï¼å ¶ä»è®¾å¤ä¸éèå ç´ çclassï¼
`class="sr-only"``
17 Bootstrapå¦ä½å¶ä½ä¸æèåï¼
- ï¼1ï¼å°ä¸æèåå
裹å¨
class="dropdown"ç<div>ä¸ï¼ - ï¼2ï¼å¨è§¦å䏿èåçæé®ä¸æ·»å ï¼
class="btn dropdown-toggle" id="dropdownMenu1" data-toggle="dropdown" - ï¼3ï¼å¨å
è£¹ä¸æèåçul䏿·»å ï¼
class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1" - ï¼4ï¼å¨ä¸æèåçåè¡¨é¡¹ä¸æ·»å ï¼
role="presentation"ãå ¶ä¸ï¼ä¸æèåçæ é¢è¦æ·»åclass="dropdown-header"ï¼é项é¨åè¦æ·»åtabindex="-1"ã
18 Bootstrapå¦ä½å¶ä½æé®ç»ï¼ä»¥åæ°´å¹³æé®ç»ååç´æé®ç»çä¼å 级ï¼
- ï¼1ï¼ç¨
class="btn-group"ç<div>å»å 裹æé®ç»ï¼class="btn-group-vertical"å¯è®¾ç½®åç´æé®ç»ã - ï¼2ï¼
btn-groupçä¼å 级é«äºbtn-group-verticalçä¼å 级ã
19 Bootstrapå¦ä½è®¾ç½®æé®ç䏿èåï¼
å¨ä¸ä¸ªÂ
.btn-groupÂ ä¸æ¾ç½®æé®å䏿èåå³å¯ã
20 Bootstrapä¸çè¾å ¥æ¡ç»å¦ä½å¶ä½ï¼
- ï¼1ï¼æåç¼æè
åç¼å
ç´ æ¾å¨ä¸ä¸ªå¸¦æ
class="input-group"ä¸ç<div>ä¸ - ï¼2ï¼å¨è¯¥
<div>å ï¼å¨class="input-group-addon"ç<span>é颿¾ç½®é¢å¤çå å®¹ï¼ - ï¼3ï¼æ
<span>æ¾å¨<input>å ç´ çå颿åé¢ã
21 Bootstrapä¸ç导èªé½æåªäºï¼
- ï¼1ï¼å¯¼èªå
ç´ ï¼æ
class="nav nav-tabs"çæ ç¾é¡µå¯¼èªï¼è¿æclass="nav nav-pills"çè¶å弿 ç¾é¡µå¯¼èªï¼ - ï¼2ï¼å¯¼èªæ ï¼
class="navbar navbar-default" role="navigation"ï¼ - ï¼3ï¼é¢å
å±å¯¼èªï¼
class="breadcrumb"
22 Bootstrapä¸è®¾ç½®å页çclassï¼
- é»è®¤çå页ï¼
class="pagination" - é»è®¤ç翻页ï¼
class="pager"
23 Bootstrap䏿¾ç¤ºæ ç¾çclassï¼
class="label"
24 Bootstrapä¸å¦ä½å¶ä½å¾½ç« ï¼
<span class="badge">26</span>
25 Bootstrapä¸è¶ 大å±å¹çä½ç¨æ¯ä»ä¹ï¼
设置
class="jumbotron"å¯ä»¥å¶ä½è¶ 大å±å¹ï¼è¯¥ç»ä»¶å¯ä»¥å¢å æ é¢ç大å°å¹¶å¢å æ´å¤çå¤è¾¹è·
å ãwebpackç¸å ³
1 æå ä½ç§¯ ä¼åæè·¯
- æåç¬¬ä¸æ¹åºæéè¿å¼ç¨å¤é¨æä»¶çæ¹å¼å¼å ¥ç¬¬ä¸æ¹åº
- 代ç å缩æä»¶
UglifyJsPlugin - æå¡å¨å¯ç¨gzipå缩
- æéå è½½èµæºæä»¶
require.ensure - ä¼å
devtoolä¸çsource-map - å¥ç¦»
cssæä»¶ï¼åç¬æå - å»é¤ä¸å¿ è¦æä»¶ï¼é常就æ¯å¼åç¯å¢ä¸ç产ç¯å¢ç¨åä¸å¥é ç½®æä»¶å¯¼è´
2 æå æç
- å¼åç¯å¢éç¨å¢éæå»ºï¼å¯ç¨çæ´æ°
- å¼åç¯å¢ä¸åæ æä¹çå·¥ä½å¦æå
cssè®¡ç®æä»¶hashç - é
ç½®
devtool - éæ©åéç
loader - 个å«
loaderå¼å¯cacheå¦babel-loader - ç¬¬ä¸æ¹åºéç¨å¼å ¥æ¹å¼
- æåå ¬å ±ä»£ç
- ä¼åæå»ºæ¶çæç´¢è·¯å¾ ææéè¦æå»ºç®å½åä¸éè¦æå»ºç®å½
- 模ååå¼å ¥éè¦çé¨å
3 Loader
ç¼åä¸ä¸ªloader
loaderå°±æ¯ä¸ä¸ªnode模åï¼å®è¾åºäºä¸ä¸ªå½æ°ã彿ç§èµæºéè¦ç¨è¿ä¸ªloaderè½¬æ¢æ¶ï¼è¿ä¸ªå½æ°ä¼è¢«è°ç¨ãå¹¶ä¸ï¼è¿ä¸ªå½æ°å¯ä»¥éè¿æä¾ç»å®çthisä¸ä¸æè®¿é®Loader APIãreverse-txt-loader
// å®ä¹
module.exports = function(src) {
//srcæ¯åæä»¶å
容ï¼abcdeï¼ï¼ä¸é¢å¯¹å
容è¿è¡å¤çï¼è¿éæ¯å转
var result = src.split('').reverse().join('');
//è¿åJavaScriptæºç ï¼å¿
é¡»æ¯Stringæè
Buffer
return `module.exports = '${result}'`;
}
//使ç¨
{
test: /\.txt$/,
use: [
{
'./path/reverse-txt-loader'
}
]
},
ä¸ãç¼ç¨é¢
1 åä¸ä¸ªéç¨çäºä»¶ä¾¦å¬å¨å½æ°
// event(äºä»¶)å·¥å
·éï¼æ¥æºï¼github.com/markyun
markyun.Event = {
// è§è½ååå«ä½¿ç¨dom0||dom2||IEæ¹å¼ æ¥ç»å®äºä»¶
// åæ°ï¼ æä½çå
ç´ ,äºä»¶åç§° ,äºä»¶å¤çç¨åº
addEvent : function(element, type, handler) {
if (element.addEventListener) {
//äºä»¶ç±»åãéè¦æ§è¡ç彿°ãæ¯å¦ææ
element.addEventListener(type, handler, false);
} else if (element.attachEvent) {
element.attachEvent('on' + type, function() {
handler.call(element);
});
} else {
element['on' + type] = handler;
}
},
// ç§»é¤äºä»¶
removeEvent : function(element, type, handler) {
if (element.removeEventListener) {
element.removeEventListener(type, handler, false);
} else if (element.datachEvent) {
element.detachEvent('on' + type, handler);
} else {
element['on' + type] = null;
}
},
// 黿¢äºä»¶ (ä¸»è¦æ¯äºä»¶å泡ï¼å 为IE䏿¯æäºä»¶æè·)
stopPropagation : function(ev) {
if (ev.stopPropagation) {
ev.stopPropagation();
} else {
ev.cancelBubble = true;
}
},
// åæ¶äºä»¶çé»è®¤è¡ä¸º
preventDefault : function(event) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
},
// è·åäºä»¶ç®æ
getTarget : function(event) {
return event.target || event.srcElement;
}
2 å¦ä½å¤æä¸ä¸ªå¯¹è±¡æ¯å¦ä¸ºæ°ç»
function isArray(arg) {
if (typeof arg === 'object') {
return Object.prototype.toString.call(arg) === '[object Array]';
}
return false;
}
3 åæ³¡æåº
- æ¯æ¬¡æ¯è¾ç¸é»ç两个æ°ï¼å¦æåä¸ä¸ªæ¯åä¸ä¸ªå°ï¼æ¢ä½ç½®
var arr = [3, 1, 4, 6, 5, 7, 2];
function bubbleSort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for(var j = 0; j < arr.length - i - 1; j++) {
if(arr[j + 1] < arr[j]) {
var temp;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
console.log(bubbleSort(arr));
4 å¿«éæåº
- éç¨äºåæ³ï¼ååºä¸é´æ°ï¼æ°ç»æ¯æ¬¡åä¸é´æ°æ¯è¾ï¼å°çæ¾å°å·¦è¾¹ï¼å¤§çæ¾å°å³è¾¹
var arr = [3, 1, 4, 6, 5, 7, 2];
function quickSort(arr) {
if(arr.length == 0) {
return []; // è¿å空æ°ç»
}
var cIndex = Math.floor(arr.length / 2);
var c = arr.splice(cIndex, 1);
var l = [];
var r = [];
for (var i = 0; i < arr.length; i++) {
if(arr[i] < c) {
l.push(arr[i]);
} else {
r.push(arr[i]);
}
}
return quickSort(l).concat(c, quickSort(r));
}
console.log(quickSort(arr));
5 ç¼åä¸ä¸ªæ¹æ³ æ±ä¸ä¸ªå符串çåèé¿åº¦
- å设ï¼ä¸ä¸ªè±æå符å ç¨ä¸ä¸ªåèï¼ä¸ä¸ªä¸æå符å ç¨ä¸¤ä¸ªåè
function GetBytes(str){
var len = str.length;
var bytes = len;
for(var i=0; i<len; i++){
if (str.charCodeAt(i) > 255) bytes++;
}
return bytes;
}
alert(GetBytes("ä½ å¥½,as"));
6 bindçç¨æ³ï¼ä»¥åå¦ä½å®ç°bindç彿°åéè¦æ³¨æçç¹
bindçä½ç¨ä¸callåapplyç¸åï¼åºå«æ¯callåapplyæ¯ç«å³è°ç¨å½æ°ï¼èbindæ¯è¿åäºä¸ä¸ªå½æ°ï¼éè¦è°ç¨çæ¶ååæ§è¡ã ä¸ä¸ªç®åçbind彿°å®ç°å¦ä¸
Function.prototype.bind = function(ctx) {
var fn = this;
return function() {
fn.apply(ctx, arguments);
};
};
7 å®ç°ä¸ä¸ªå½æ°clone
å¯ä»¥å¯¹
JavaScriptä¸ç5ç§ä¸»è¦çæ°æ®ç±»å,å æ¬NumberãStringãObjectãArrayãBooleanï¼è¿è¡å¼å¤
- èå¯ç¹1ï¼å¯¹äºåºæ¬æ°æ®ç±»ååå¼ç¨æ°æ®ç±»åå¨å åä¸åæ¾çæ¯å¼è¿æ¯æéè¿ä¸åºå«æ¯å¦æ¸ æ¥
- èå¯ç¹2ï¼æ¯å¦ç¥éå¦ä½å¤æä¸ä¸ªå鿝ä»ä¹ç±»åç
- èå¯ç¹3ï¼éå½ç®æ³ç设计
// æ¹æ³ä¸ï¼
Object.prototype.clone = function(){
var o = this.constructor === Array ? [] : {};
for(var e in this){
o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];
}
return o;
}
//æ¹æ³äºï¼
/**
* å
éä¸ä¸ªå¯¹è±¡
* @param Obj
* @returns
*/
function clone(Obj) {
var buf;
if (Obj instanceof Array) {
buf = []; //å建ä¸ä¸ªç©ºçæ°ç»
var i = Obj.length;
while (i--) {
buf[i] = clone(Obj[i]);
}
return buf;
}else if (Obj instanceof Object){
buf = {}; //å建ä¸ä¸ªç©ºå¯¹è±¡
for (var k in Obj) { //为è¿ä¸ªå¯¹è±¡æ·»å æ°ç屿§
buf[k] = clone(Obj[k]);
}
return buf;
}else{ //æ®éåéç´æ¥èµå¼
return Obj;
}
}
8 ä¸é¢è¿ä¸ªulï¼å¦ä½ç¹å»æ¯ä¸åçæ¶åalertå ¶index
èå¯éå
<ul id=âtestâ>
<li>è¿æ¯ç¬¬ä¸æ¡</li>
<li>è¿æ¯ç¬¬äºæ¡</li>
<li>è¿æ¯ç¬¬ä¸æ¡</li>
</ul>
// æ¹æ³ä¸ï¼
var lis=document.getElementById('2223').getElementsByTagName('li');
for(var i=0;i<3;i++)
{
lis[i].index=i;
lis[i].onclick=function(){
alert(this.index);
}
//æ¹æ³äºï¼
var lis=document.getElementById('2223').getElementsByTagName('li');
for(var i=0;i<3;i++)
{
lis[i].index=i;
lis[i].onclick=(function(a){
return function() {
alert(a);
}
})(i);
}
9 å®ä¹ä¸ä¸ªlogæ¹æ³ï¼è®©å®å¯ä»¥ä»£çconsole.logçæ¹æ³
å¯è¡çæ¹æ³ä¸ï¼
function log(msg)ã{
console.log(msg);
}
log("hello world!") // hello world!
妿è¦ä¼ å ¥å¤ä¸ªåæ°å¢ï¼æ¾ç¶ä¸é¢çæ¹æ³ä¸è½æ»¡è¶³è¦æ±ï¼æä»¥æ´å¥½çæ¹æ³æ¯ï¼
function log(){
console.log.apply(console, arguments);
};
10 è¾åºä»å¤©çæ¥æ
以
YYYY-MM-DDçæ¹å¼ï¼æ¯å¦ä»å¤©æ¯2014å¹´9æ26æ¥ï¼åè¾åº2014-09-26
var d = new Date();
// è·åå¹´ï¼getFullYear()è¿å4ä½çæ°å
var year = d.getFullYear();
// è·åæï¼æä»½æ¯è¾ç¹æ®ï¼0æ¯1æï¼11æ¯12æ
var month = d.getMonth() + 1;
// åæä¸¤ä½
month = month < 10 ? '0' + month : month;
// è·åæ¥
var day = d.getDate();
day = day < 10 ? '0' + day : day;
alert(year + '-' + month + '-' + day);
11 ç¨jså®ç°éæºéå10â100ä¹é´ç10个æ°åï¼åå ¥ä¸ä¸ªæ°ç»ï¼å¹¶æåº
var iArray = [];
funtion getRandom(istart, iend){
var iChoice = istart - iend +1;
return Math.floor(Math.random() * iChoice + istart;
}
for(var i=0; i<10; i++){
iArray.push(getRandom(10,100));
}
iArray.sort();
12 å䏿®µJSç¨åºæåURLä¸çå个GETåæ°
æè¿æ ·ä¸ä¸ª
URLï¼http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&eï¼è¯·å䏿®µJSç¨åºæåURLä¸çå个GETåæ°(åæ°åååæ°ä¸ªæ°ä¸ç¡®å®)ï¼å°å ¶ækey-valueå½¢å¼è¿åå°ä¸ä¸ªjsonç»æä¸ï¼å¦{a:â1â², b:â2â², c:â, d:âxxxâ, e:undefined}
function serilizeUrl(url) {
var result = {};
url = url.split("?")[1];
var map = url.split("&");
for(var i = 0, len = map.length; i < len; i++) {
result[map[i].split("=")[0]] = map[i].split("=")[1];
}
return result;
}
13 åä¸ä¸ªfunctionï¼æ¸
é¤å符串ååçç©ºæ ¼
使ç¨èªå¸¦æ¥å£
trim()ï¼èèå ¼å®¹æ§ï¼
if (!String.prototype.trim) {
String.prototype.trim = function() {
return this.replace(/^\s+/, "").replace(/\s+$/,"");
}
}
// test the function
var str = " \t\n test string ".trim();
alert(str == "test string"); // alerts "true"
14 å®ç°æ¯éä¸ç§éè¾åº1,2,3...æ°å
for(var i=0;i<10;i++){
(function(j){
setTimeout(function(){
console.log(j+1)
},j*1000)
})(i)
}
å «ãå ¶ä»
1 è´è½½åè¡¡
å¤å°æå¡å¨å ±ååä½ï¼ä¸è®©å ¶ä¸æä¸å°æå å°è¶ é¢å·¥ä½ï¼åæ¥æå¡å¨çæå¤§ä½ç¨
httpéå®åè´è½½åè¡¡ï¼è°åº¦è æ ¹æ®çç¥éæ©æå¡å¨ä»¥302ååºè¯·æ±ï¼ç¼ºç¹åªæç¬¬ä¸æ¬¡æææï¼åç»æä½ç»´æå¨è¯¥æå¡å¨ dnsè´è½½åè¡¡ï¼è§£æååæ¶ï¼è®¿é®å¤ä¸ªipæå¡å¨ä¸çä¸ä¸ªï¼å¯çæ§æ§è¾å¼±ï¼- åå代çè´è½½åè¡¡ï¼è®¿é®ç»ä¸çæå¡å¨ï¼ç±æå¡å¨è¿è¡è°åº¦è®¿é®å®é çæä¸ªæå¡å¨ï¼å¯¹ç»ä¸çæå¡å¨è¦æ±å¤§ï¼æ§è½åå° æå¡å¨ç¾¤çæ°é
2 CDN
å 容ååç½ç»ï¼åºæ¬æè·¯æ¯å°½å¯è½é¿å¼äºèç½ä¸æå¯è½å½±åæ°æ®ä¼ è¾é度åç¨³å®æ§çç¶é¢åç¯èï¼ä½¿å å®¹ä¼ è¾çæ´å¿«ãæ´ç¨³å®ã
3 å åæ³æ¼
å®ä¹ï¼ç¨åºä¸å·±å¨æåé çå å åç±äºæç§åå ç¨åºæªéæ¾ææ æ³éæ¾å¼åçåç§é®é¢ã
jsä¸å¯è½åºç°çå åæ³æ¼æ åµ
ç»æï¼åæ ¢ï¼å´©æºï¼å»¶è¿å¤§çï¼åå ï¼
- å ¨å±åé
domæ¸ ç©ºæ¶ï¼è¿åå¨å¼ç¨ieä¸ä½¿ç¨éå- 宿¶å¨æªæ¸ ç
- åå ç´ åå¨å¼èµ·çå åæ³é²
é¿å çç¥
- åå°ä¸å¿ è¦çå ¨å±åéï¼æè çå½å¨æè¾é¿ç对象ï¼åæ¶å¯¹æ ç¨çæ°æ®è¿è¡åå¾åæ¶ï¼
- 注æç¨åºé»è¾ï¼é¿å âæ»å¾ªç¯âä¹ç±»ç ï¼
- é¿å å建è¿å¤ç对象 ååï¼ä¸ç¨äºçä¸è¥¿è¦åæ¶å½è¿ã
- åå°å±çº§è¿å¤çå¼ç¨
4 babelåç
ES6ã7代ç è¾å ¥ ->babylonè¿è¡è§£æ -> å¾å°ASTï¼æ½è±¡è¯æ³æ ï¼->pluginç¨babel-traverse对ASTæ è¿è¡éåè½¬è¯ ->å¾å°æ°çASTæ ->ç¨babel-generatoréè¿ASTæ çæES5代ç
5 jsèªå®ä¹äºä»¶
ä¸è¦ç´ ï¼
document.createEvent()event.initEvent()element.dispatchEvent()
// (en:èªå®ä¹äºä»¶åç§°ï¼fn:äºä»¶å¤ç彿°ï¼addEvent:为DOMå
ç´ æ·»å èªå®ä¹äºä»¶ï¼triggerEvent:触åèªå®ä¹äºä»¶)
window.onload = function(){
var demo = document.getElementById("demo");
demo.addEvent("test",function(){console.log("handler1")});
demo.addEvent("test",function(){console.log("handler2")});
demo.onclick = function(){
this.triggerEvent("test");
}
}
Element.prototype.addEvent = function(en,fn){
this.pools = this.pools || {};
if(en in this.pools){
this.pools[en].push(fn);
}else{
this.pools[en] = [];
this.pools[en].push(fn);
}
}
Element.prototype.triggerEvent = function(en){
if(en in this.pools){
var fns = this.pools[en];
for(var i=0,il=fns.length;i<il;i++){
fns[i]();
}
}else{
return;
}
}
6 åå端路ç±å·®å«
- åç«¯æ¯æ¬¡è·¯ç±è¯·æ±é½æ¯éæ°è®¿é®æå¡å¨
- å端路ç±å®é
ä¸åªæ¯
JSæ ¹æ®URLæ¥æä½DOMå ç´ ï¼æ ¹æ®æ¯ä¸ªé¡µé¢éè¦ç廿å¡ç«¯è¯·æ±æ°æ®ï¼è¿åæ°æ®å忍¡æ¿è¿è¡ç»å
ä¹ã综å
1 è°è°ä½ 对éæççè§£
- ç½ç«éæï¼å¨ä¸æ¹åå¤é¨è¡ä¸ºçåæä¸ï¼ç®åç»æãæ·»å å¯è¯»æ§ï¼èå¨ç½ç«åç«¯ä¿æä¸è´çè¡ä¸ºãä¹å°±æ¯è¯´æ¯å¨ä¸æ¹åUIçæ åµä¸ï¼å¯¹ç½ç«è¿è¡ä¼åï¼ å¨æ©å±çåæ¶ä¿æä¸è´çUI
- 对äºä¼ ç»çç½ç«æ¥è¯´éæé常æ¯ï¼
- è¡¨æ ¼(
table)å¸å±æ¹ä¸ºDIV+CSS - 使ç½ç«å端å
¼å®¹äºç°ä»£æµè§å¨(é对äºä¸åè§èç
CSSãå¦å¯¹IE6ææç) - 对äºç§»å¨å¹³å°çä¼å
- é对äº
SEOè¿è¡ä¼å
- è¡¨æ ¼(
2 ä»ä¹æ ·çåç«¯ä»£ç æ¯å¥½ç
- é«å¤ç¨ä½è¦åï¼è¿æ ·æä»¶å°ï¼å¥½ç»´æ¤ï¼èä¸å¥½æ©å±ã
3 对å端工ç¨å¸è¿ä¸ªè使¯æä¹æ ·çè§£çï¼å®ç忝伿乿 ·
- åç«¯æ¯æè´´è¿ç¨æ·çç¨åºåï¼æ¯åç«¯ãæ°æ®åºã产åç»çãè¿è¥ãå®å
¨é½è¿
- å®ç°çé¢äº¤äº
- æåç¨æ·ä½éª
- æäºNode.jsï¼å端å¯ä»¥å®ç°æå¡ç«¯çä¸äºäºæ
- åç«¯æ¯æè´´è¿ç¨æ·çç¨åºåï¼å端çè½åå°±æ¯è½è®©äº§åä» 90åè¿åå° 100 åï¼çè³æ´å¥½ï¼
- ä¸å¢éæåï¼
UI设计ï¼äº§åç»ççæ²éï¼ - å好ç页é¢ç»æï¼é¡µé¢éæåç¨æ·ä½éªï¼
4 ä½ è§å¾å端工ç¨çä»·å¼ä½ç°å¨åª
- 为ç®åç¨æ·ä½¿ç¨æä¾ææ¯æ¯æï¼äº¤äºé¨åï¼
- 为å¤ä¸ªæµè§å¨å ¼å®¹æ§æä¾æ¯æ
- 为æé«ç¨æ·æµè§éåº¦ï¼æµè§å¨æ§è½ï¼æä¾æ¯æ
- ä¸ºè·¨å¹³å°æè å ¶ä»åºäºwebkitæå ¶ä»æ¸²æå¼æçåºç¨æä¾æ¯æ
- 为å±ç¤ºæ°æ®æä¾æ¯æï¼æ°æ®æ¥å£ï¼
5 å¹³æ¶å¦ä½ç®¡çä½ ç项ç®
- å
æå¢éå¿
须确å®å¥½å
¨å±æ ·å¼ï¼
globe.cssï¼ï¼ç¼ç 模å¼(utf-8) çï¼ - ç¼åä¹ æ¯å¿ é¡»ä¸è´ï¼ä¾å¦é½æ¯éç¨ç»§æ¿å¼çåæ³ï¼åæ ·å¼é½åæä¸è¡ï¼ï¼
- æ æ³¨æ ·å¼ç¼å人ï¼å模åé½åæ¶æ æ³¨ï¼æ æ³¨å ³é®æ ·å¼è°ç¨çå°æ¹ï¼ï¼
- 页é¢è¿è¡æ 注ï¼ä¾å¦ é¡µé¢ æ¨¡å å¼å§åç»æï¼ï¼
CSSè·HTMLåæä»¶å¤¹å¹¶è¡åæ¾ï¼å½åé½å¾ç»ä¸ï¼ä¾å¦style.cssï¼ï¼JSåæä»¶å¤¹åæ¾ å½å以该JSåè½ä¸ºåçè±æç¿»è¯ã- å¾çéç¨æ´åç
images.png png8æ ¼å¼æä»¶ä½¿ç¨ - 尽鿴åå¨ä¸èµ·ä½¿ç¨æ¹ä¾¿å°æ¥ç管ç
6 ç»ä»¶å°è£
ç®çï¼ä¸ºäºéç¨ï¼æé«å¼åæçå代ç è´¨é æ³¨æï¼ä½è¦åï¼åä¸èè´£ï¼å¯å¤ç¨æ§ï¼å¯ç»´æ¤æ§ å¸¸ç¨æä½
- åæå¸å±
- 忥å¼å
- åç¹ä¸ºç®
- ç»ä»¶æ½è±¡
åãä¸äºå¸¸è§é®é¢
- èªæä»ç»
- é¢è¯å®ä½ è¿æä»ä¹é®é¢è¦é®çå
- ä½ æä»ä¹ç±å¥½?
- ä½ æå¤§çä¼ç¹åç¼ºç¹æ¯ä»ä¹?
- ä½ ä¸ºä»ä¹ä¼éæ©è¿ä¸ªè¡ä¸ï¼èä½?
- ä½ è§å¾ä½ éåä»äºè¿ä¸ªå²ä½å?
- ä½ æä»ä¹èä¸è§å?
- ä½ å¯¹å·¥èµæä»ä¹è¦æ±?
- å¦ä½çå¾ å端å¼åï¼
- æªæ¥ä¸å°äºå¹´çè§åæ¯ææ ·çï¼
- ä½ ç项ç®ä¸ææ¯é¾ç¹æ¯ä»ä¹ï¼éå°äºä»ä¹é®é¢ï¼ä½ æ¯æä¹è§£å³çï¼
- ä½ ä»¬é¨é¨çå¼åæµç¨æ¯ææ ·ç
- ä½ è®¤ä¸ºåªä¸ªé¡¹ç®å徿好ï¼
- 说ä¸å·¥ä½ä¸ä½ åè¿çä¸äºæ§è½ä¼åå¤ç
- æè¿å¨çåªäºå端æ¹é¢ç书ï¼
- å¹³æ¶æ¯å¦ä½å¦ä¹ å端å¼åçï¼
- ä½ æææå°±æçä¸ä»¶äº
- ä½ ä¸ºä»ä¹è¦ç¦»å¼åä¸å®¶å ¬å¸ï¼
- ä½ å¯¹å çççæ³
- ä½ å¸æéè¿è¿ä»½å·¥ä½è·å¾ä»ä¹ï¼
- ææ³éè¿è¿ä»½å·¥ä½å¥½å¥½çé»ç¼èªå·±ï¼æåèªå·±çè½åï¼åæ¶ä¸ºå ¬å¸è´¡ç®èªå·±çä¸ä»½åé
good!👍
谢谢分享~~~
冒泡好像有点小错误。。
点赞
写的不错,谢谢分享
å¨çº¿é¢è§ http://blog.poetries.top/FE-Interview-Questions
第ä¸é¨åï¼åºç¡ç¯ 第äºé¨åï¼è¿é¶ç¯ 第ä¸é¨åï¼é«çº§ç¯ 第åé¨åï¼éè¯ç¯ 第äºé¨åï¼ç²¾åç¯ ç¬¬å é¨åï¼ç²¾ç®ç¯ 第ä¸é¨åï¼ç»¼åç¯
第ä¸é¨åï¼åºç¡ç¯ ä¸ãHTMLãHTTPãweb综åé®é¢ 1 å端éè¦æ³¨æåªäºSEO åççtitleãdescriptionãkeywordsï¼æç´¢å¯¹çä¸é¡¹çæéé个åå°ï¼titleå¼å¼ºè°éç¹å³å¯ï¼éè¦å ³é®è¯åºç°ä¸è¦è¶ è¿2次ï¼èä¸è¦é åï¼ä¸å页é¢titleè¦ææä¸åï¼descriptionæé¡µé¢å 容é«åº¦æ¦æ¬ï¼é¿åº¦åéï¼ä¸å¯è¿åå ç å ³é®è¯ï¼ä¸å页é¢descriptionææä¸åï¼keywordså举åºéè¦å ³é®è¯å³å¯ è¯ä¹åçHTML代ç ï¼ç¬¦åW3Cè§èï¼è¯ä¹å代ç 让æç´¢å¼æå®¹æçè§£ç½é¡µ éè¦å 容HTMLä»£ç æ¾å¨æåï¼æç´¢å¼ææåHTMLé¡ºåºæ¯ä»ä¸å°ä¸ï¼æçæç´¢å¼æå¯¹æåé¿åº¦æéå¶ï¼ä¿è¯éè¦å 容ä¸å®ä¼è¢«æå éè¦å 容ä¸è¦ç¨jsè¾åºï¼ç¬è«ä¸ä¼æ§è¡jsè·åå 容 å°ç¨iframeï¼æç´¢å¼æä¸ä¼æåiframeä¸çå 容 éè£ é¥°æ§å¾çå¿ é¡»å alt æé«ç½ç«é度ï¼ç½ç«éåº¦æ¯æç´¢å¼ææåºçä¸ä¸ªéè¦ææ 2
çtitleåaltæä»ä¹åºå« é常å½é¼ æ æ»å¨å°å ç´ ä¸çæ¶åæ¾ç¤º altæ¯
çç¹æå±æ§ï¼æ¯å¾çå 容ççä»·æè¿°ï¼ç¨äºå¾çæ æ³å è½½æ¶æ¾ç¤ºã读å±å¨é 读å¾çã坿å¾çé«å¯è®¿é®æ§ï¼é¤äºçº¯è£ 饰å¾çå¤é½å¿ 须设置ææä¹çå¼ï¼æç´¢å¼æä¼éç¹åæã 3 HTTPçå ç§è¯·æ±æ¹æ³ç¨é GETæ¹æ³
åéä¸ä¸ªè¯·æ±æ¥å徿å¡å¨ä¸çæä¸èµæº POSTæ¹æ³
åURLæå®çèµæºæäº¤æ°æ®æéå æ°çæ°æ® PUTæ¹æ³
è·POSTæ¹æ³å¾åï¼ä¹æ¯æ³æå¡å¨æäº¤æ°æ®ã使¯ï¼å®ä»¬ä¹é´æä¸åãPUTæå®äºèµæºå¨æå¡å¨ä¸çä½ç½®ï¼èPOST没æ HEADæ¹æ³
åªè¯·æ±é¡µé¢çé¦é¨ DELETEæ¹æ³
å 餿å¡å¨ä¸çæèµæº OPTIONSæ¹æ³
å®ç¨äºè·åå½åURLææ¯æçæ¹æ³ãå¦æè¯·æ±æåï¼ä¼æä¸ä¸ªAllowç头å å«ç±»ä¼¼âGET,POSTâè¿æ ·çä¿¡æ¯ TRACEæ¹æ³
TRACEæ¹æ³è¢«ç¨äºæ¿åä¸ä¸ªè¿ç¨çï¼åºç¨å±çè¯·æ±æ¶æ¯åè·¯ CONNECTæ¹æ³
æè¯·æ±è¿æ¥è½¬æ¢å°éæçTCP/IPéé 4 仿µè§å¨å°åæ è¾å ¥urlå°æ¾ç¤ºé¡µé¢çæ¥éª¤ åºç¡çæ¬
æµè§å¨æ ¹æ®è¯·æ±çURL交ç»DNSååè§£æï¼æ¾å°çå®IPï¼åæå¡å¨å起请æ±ï¼ æå¡å¨äº¤ç»åå°å¤ç宿åè¿åæ°æ®ï¼æµè§å¨æ¥æ¶æä»¶ï¼HTMLãJSãCSSãå¾è±¡çï¼ï¼ æµè§å¨å¯¹å è½½å°çèµæºï¼HTMLãJSãCSSçï¼è¿è¡è¯æ³è§£æï¼å»ºç«ç¸åºçå 鍿°æ®ç»æï¼å¦HTMLçDOMï¼ï¼ è½½å ¥è§£æå°çèµæºæä»¶ï¼æ¸²æé¡µé¢ï¼å®æã 详ç»ç
卿µè§å¨å°åæ è¾å ¥URL æµè§å¨æ¥çç¼åï¼å¦æè¯·æ±èµæºå¨ç¼åä¸å¹¶ä¸æ°é²ï¼è·³è½¬å°è½¬ç æ¥éª¤ å¦æèµæºæªç¼åï¼åèµ·æ°è¯·æ± 妿已ç¼åï¼æ£éªæ¯å¦è¶³å¤æ°é²ï¼è¶³å¤æ°é²ç´æ¥æä¾ç»å®¢æ·ç«¯ï¼å¦å䏿å¡å¨è¿è¡éªè¯ã æ£éªæ°é²é常æä¸¤ä¸ªHTTP头è¿è¡æ§å¶ExpiresåCache-Controlï¼ HTTP1.0æä¾Expiresï¼å¼ä¸ºä¸ä¸ªç»å¯¹æ¶é´è¡¨ç¤ºç¼åæ°é²æ¥æ HTTP1.1å¢å äºCache-Control: max-age=,å¼ä¸ºä»¥ç§ä¸ºåä½çæå¤§æ°é²æ¶é´ æµè§å¨è§£æURLè·ååè®®ï¼ä¸»æºï¼ç«¯å£ï¼path æµè§å¨ç»è£ ä¸ä¸ªHTTPï¼GETï¼è¯·æ±æ¥æ æµè§å¨è·å主æºipå°åï¼è¿ç¨å¦ä¸ï¼ æµè§å¨ç¼å æ¬æºç¼å hostsæä»¶ è·¯ç±å¨ç¼å ISP DNSç¼å DNSé彿¥è¯¢ï¼å¯è½åå¨è´è½½åè¡¡å¯¼è´æ¯æ¬¡IPä¸ä¸æ ·ï¼ æå¼ä¸ä¸ªsocketä¸ç®æ IPå°åï¼ç«¯å£å»ºç«TCP龿¥ï¼ä¸æ¬¡æ¡æå¦ä¸ï¼ 客æ·ç«¯åéä¸ä¸ªTCPçSYN=1ï¼Seq=Xçå å°æå¡å¨ç«¯å£ æå¡å¨ååSYN=1ï¼ ACK=X+1ï¼ Seq=Yçååºå 客æ·ç«¯åéACK=Y+1ï¼ Seq=Z TCP龿¥å»ºç«ååéHTTPè¯·æ± æå¡å¨æ¥å请æ±å¹¶è§£æï¼å°è¯·æ±è½¬åå°æå¡ç¨åºï¼å¦èæä¸»æºä½¿ç¨HTTP Host头é¨å¤æè¯·æ±çæå¡ç¨åº æå¡å¨æ£æ¥HTTP请æ±å¤´æ¯å¦å å«ç¼åéªè¯ä¿¡æ¯å¦æéªè¯ç¼åæ°é²ï¼è¿å304ç对åºç¶æç å¤çç¨åºè¯»å宿´è¯·æ±å¹¶åå¤HTTPååºï¼å¯è½éè¦æ¥è¯¢æ°æ®åºçæä½ æå¡å¨å°ååºæ¥æéè¿TCPè¿æ¥åéåæµè§å¨ æµè§å¨æ¥æ¶HTTPååºï¼ç¶åæ ¹æ®æ åµéæ©å ³éTCPè¿æ¥æè ä¿çéç¨ï¼å ³éTCPè¿æ¥ç忬¡æ¡æå¦ä¸ï¼ 䏻卿¹åéFin=1ï¼ Ack=Zï¼ Seq= Xæ¥æ è¢«å¨æ¹åéACK=X+1ï¼ Seq=Zæ¥æ è¢«å¨æ¹åéFin=1ï¼ ACK=Xï¼ Seq=Yæ¥æ 䏻卿¹åéACK=Yï¼ Seq=Xæ¥æ æµè§å¨æ£æ¥ååºç¶æåï¼æ¯å¦ä¸º1XXï¼3XXï¼ 4XXï¼ 5XXï¼è¿äºæ åµå¤çä¸2XXä¸å å¦æèµæºå¯ç¼åï¼è¿è¡ç¼å 对ååºè¿è¡è§£ç ï¼ä¾å¦gzipåç¼©ï¼ æ ¹æ®èµæºç±»åå³å®å¦ä½å¤çï¼åè®¾èµæºä¸ºHTMLææ¡£ï¼ è§£æHTMLææ¡£ï¼æä»¶DOMæ ï¼ä¸è½½èµæºï¼æé CSSOMæ ï¼æ§è¡jsèæ¬ï¼è¿äºæä½æ²¡æä¸¥æ ¼çå å顺åºï¼ä»¥ä¸åå«è§£é æå»ºDOMæ ï¼ Tokenizingï¼æ ¹æ®HTMLè§èå°å符æµè§£æä¸ºæ è®° Lexingï¼è¯æ³åæå°æ 记转æ¢ä¸ºå¯¹è±¡å¹¶å®ä¹å±æ§åè§å DOM constructionï¼æ ¹æ®HTMLæ è®°å ³ç³»å°å¯¹è±¡ç»æDOMæ è§£æè¿ç¨ä¸éå°å¾çãæ ·å¼è¡¨ãjsæä»¶ï¼å¯å¨ä¸è½½ æå»ºCSSOMæ ï¼ Tokenizingï¼å符æµè½¬æ¢ä¸ºæ è®°æµ Nodeï¼æ ¹æ®æ è®°å建èç¹ CSSOMï¼èç¹å建CSSOMæ æ ¹æ®DOMæ åCSSOMæ æå»ºæ¸²ææ : ä»DOMæ çæ ¹èç¹éåææå¯è§èç¹ï¼ä¸å¯è§èç¹å æ¬ï¼1ï¼script,metaè¿æ ·æ¬èº«ä¸å¯è§çæ ç¾ã2)被csséèçèç¹ï¼å¦display: none 对æ¯ä¸ä¸ªå¯è§èç¹ï¼æ¾å°æ°å½çCSSOMè§åå¹¶åºç¨ åå¸å¯è§èç¹çå 容åè®¡ç®æ ·å¼ jsè§£æå¦ä¸ï¼ æµè§å¨å建Document对象并解æHTMLï¼å°è§£æå°çå ç´ åææ¬èç¹æ·»å å°ææ¡£ä¸ï¼æ¤æ¶document.readystate为loading HTMLè§£æå¨éå°æ²¡æasyncådeferçscriptæ¶ï¼å°ä»ä»¬æ·»å å°ææ¡£ä¸ï¼ç¶åæ§è¡è¡å æå¤é¨èæ¬ãè¿äºèæ¬ä¼åæ¥æ§è¡ï¼å¹¶ä¸å¨èæ¬ä¸è½½åæ§è¡æ¶è§£æå¨ä¼æåãè¿æ ·å°±å¯ä»¥ç¨document.write()æææ¬æå ¥å°è¾å ¥æµä¸ãåæ¥èæ¬ç»å¸¸ç®åå®ä¹å½æ°å注åäºä»¶å¤çç¨åºï¼ä»ä»¬å¯ä»¥éååæä½scriptåä»ä»¬ä¹åçææ¡£å 容 å½è§£æå¨éå°è®¾ç½®äºasync屿§çscriptæ¶ï¼å¼å§ä¸è½½èæ¬å¹¶ç»§ç»è§£æææ¡£ãèæ¬ä¼å¨å®ä¸è½½å®æå尽快æ§è¡ï¼ä½æ¯è§£æå¨ä¸ä¼å䏿¥çå®ä¸è½½ã弿¥èæ¬ç¦æ¢ä½¿ç¨document.write()ï¼å®ä»¬å¯ä»¥è®¿é®èªå·±scriptåä¹åçææ¡£å ç´ å½ææ¡£å®æè§£æï¼document.readStateåæinteractive æædeferèæ¬ä¼æç §å¨ææ¡£åºç°çé¡ºåºæ§è¡ï¼å»¶è¿èæ¬è½è®¿é®å®æ´ææ¡£æ ï¼ç¦æ¢ä½¿ç¨document.write() æµè§å¨å¨Document对象ä¸è§¦åDOMContentLoadedäºä»¶ æ¤æ¶ææ¡£å®å ¨è§£æå®æï¼æµè§å¨å¯è½è¿å¨çå¾ å¦å¾ççå 容å è½½ï¼çè¿äºå å®¹å®æè½½å ¥å¹¶ä¸ææå¼æ¥èæ¬å®æè½½å ¥åæ§è¡ï¼document.readStateå为complete,window触åloadäºä»¶ æ¾ç¤ºé¡µé¢ï¼HTMLè§£æè¿ç¨ä¸ä¼éæ¥æ¾ç¤ºé¡µé¢ï¼ 详ç»ç®ç
仿µè§å¨æ¥æ¶urlå°å¼å¯ç½ç»è¯·æ±çº¿ç¨ï¼è¿ä¸é¨åå¯ä»¥å±å¼æµè§å¨çæºå¶ä»¥åè¿ç¨ä¸çº¿ç¨ä¹é´çå ³ç³»ï¼
å¼å¯ç½ç»çº¿ç¨å°ååºä¸ä¸ªå®æ´çhttp请æ±ï¼è¿ä¸é¨åæ¶åå°dnsæ¥è¯¢ï¼tcp/ip请æ±ï¼äºå±å ç¹ç½åè®®æ çç¥è¯ï¼
仿å¡å¨æ¥æ¶å°è¯·æ±å°å¯¹åºåå°æ¥æ¶å°è¯·æ±ï¼è¿ä¸é¨åå¯è½æ¶åå°è´è½½åè¡¡ï¼å®å ¨æ¦æªä»¥ååå°å é¨çå¤çççï¼
åå°ååå°çhttp交äºï¼è¿ä¸é¨åå æ¬http头é¨ãååºç ãæ¥æç»æãcookieçç¥è¯ï¼å¯ä»¥æä¸éæèµæºçcookieä¼åï¼ä»¥åç¼ç è§£ç ï¼å¦gzipå缩çï¼
åç¬æåºæ¥çç¼åé®é¢ï¼httpçç¼åï¼è¿é¨åå æ¬httpç¼å头é¨ï¼etagï¼catch-controlçï¼
æµè§å¨æ¥æ¶å°httpæ°æ®å åçè§£ææµç¨ï¼è§£æhtml-è¯æ³åæç¶åè§£æædomæ ãè§£æcssçæcssè§åæ ãåå¹¶ærenderæ ï¼ç¶ålayoutãpainting渲æãå¤åå¾å±çåæãGPUç»å¶ãå¤é¾èµæºçå¤çãloadedådomcontentloadedçï¼
CSSçå¯è§åæ ¼å¼æ¨¡åï¼å ç´ çæ¸²æè§åï¼å¦å å«åï¼æ§å¶æ¡ï¼BFCï¼IFCçæ¦å¿µï¼
JSå¼æè§£æè¿ç¨ï¼JSçè§£éé¶æ®µï¼é¢å¤çé¶æ®µï¼æ§è¡é¶æ®µçææ§è¡ä¸ä¸æï¼VOï¼ä½ç¨åé¾ãåæ¶æºå¶ççï¼
å ¶å®ï¼å¯ä»¥æå±ä¸åçç¥è¯æ¨¡åï¼å¦è·¨åï¼webå®å ¨ï¼hybrid模å¼ççå 容ï¼
5 å¦ä½è¿è¡ç½ç«æ§è½ä¼å contentæ¹é¢
åå°HTTP请æ±ï¼åå¹¶æä»¶ãCSSç²¾çµãinline Image åå°DNSæ¥è¯¢ï¼DNSç¼åãå°èµæºåå¸å°æ°å½æ°éç主æºå åå°DOMå ç´ æ°é Serveræ¹é¢
使ç¨CDN é ç½®ETag 对ç»ä»¶ä½¿ç¨Gzipå缩 Cookieæ¹é¢
åå°cookieå¤§å° cssæ¹é¢
å°æ ·å¼è¡¨æ¾å°é¡µé¢é¡¶é¨ ä¸ä½¿ç¨CSSè¡¨è¾¾å¼ ä½¿ç¨ä¸ä½¿ç¨@import Javascriptæ¹é¢
å°èæ¬æ¾å°é¡µé¢åºé¨ å°javascriptåcssä»å¤é¨å¼å ¥ å缩javascriptåcss å é¤ä¸éè¦çèæ¬ åå°DOMè®¿é® å¾çæ¹é¢
ä¼åå¾çï¼æ ¹æ®å®é é¢è²éè¦éæ©è²æ·±ãå缩 ä¼åcssç²¾çµ ä¸è¦å¨HTML䏿伏å¾ç 6 HTTPç¶æç åå ¶å«ä¹ 1XXï¼ä¿¡æ¯ç¶æç 100 Continue ç»§ç»ï¼ä¸è¬å¨åépostè¯·æ±æ¶ï¼å·²åéäºhttp headerä¹åæå¡ç«¯å°è¿åæ¤ä¿¡æ¯ï¼è¡¨ç¤ºç¡®è®¤ï¼ä¹ååéå ·ä½åæ°ä¿¡æ¯ 2XXï¼æåç¶æç 200 OK æ£å¸¸è¿åä¿¡æ¯ 201 Created è¯·æ±æå并䏿å¡å¨åå»ºäºæ°çèµæº 202 Accepted æå¡å¨å·²æ¥å请æ±ï¼ä½å°æªå¤ç 3XXï¼éå®å 301 Moved Permanently 请æ±çç½é¡µå·²æ°¸ä¹ ç§»å¨å°æ°ä½ç½®ã 302 Found ä¸´æ¶æ§éå®åã 303 See Other ä¸´æ¶æ§éå®åï¼ä¸æ»æ¯ä½¿ç¨ GET è¯·æ±æ°ç URIã 304 Not Modified èªä»ä¸æ¬¡è¯·æ±åï¼è¯·æ±çç½é¡µæªä¿®æ¹è¿ã 4XXï¼å®¢æ·ç«¯é误 400 Bad Request æå¡å¨æ æ³ç解请æ±çæ ¼å¼ï¼å®¢æ·ç«¯ä¸åºå½å°è¯å次使ç¨ç¸åçå 容å起请æ±ã 401 Unauthorized è¯·æ±æªææã 403 Forbidden ç¦æ¢è®¿é®ã 404 Not Found æ¾ä¸å°å¦ä½ä¸ URI ç¸å¹é çèµæºã 5XX: æå¡å¨é误 500 Internal Server Error æå¸¸è§çæå¡å¨ç«¯é误ã 503 Service Unavailable æå¡å¨ç«¯ææ¶æ æ³å¤ç请æ±ï¼å¯è½æ¯è¿è½½æç»´æ¤ï¼ã 7 è¯ä¹åççè§£ ç¨æ£ç¡®çæ ç¾åæ£ç¡®çäºæ ï¼ htmlè¯ä¹åå°±æ¯è®©é¡µé¢çå å®¹ç»æåï¼ä¾¿äºå¯¹æµè§å¨ãæç´¢å¼æè§£æï¼ 卿²¡ææ ·å¼CSSæ åµä¸ä¹ä»¥ä¸ç§ææ¡£æ ¼å¼æ¾ç¤ºï¼å¹¶ä¸æ¯å®¹æé 读çã æç´¢å¼æçç¬è«ä¾èµäºæ è®°æ¥ç¡®å®ä¸ä¸æååä¸ªå ³é®åçæéï¼å©äº SEOã 使é 读æºä»£ç ç人对ç½ç«æ´å®¹æå°ç½ç«ååï¼ä¾¿äºé 读维æ¤çè§£ 8 ä»ç»ä¸ä¸ä½ 对æµè§å¨å æ ¸ççè§£ï¼ ä¸»è¦åæä¸¤é¨åï¼æ¸²æå¼æ(layout engineeræRendering Engine)åJS弿
渲æå¼æï¼è´è´£åå¾ç½é¡µçå 容ï¼HTMLãXMLãå¾åççï¼ãæ´ç讯æ¯ï¼ä¾å¦å å ¥CSSçï¼ï¼ä»¥å计ç®ç½é¡µçæ¾ç¤ºæ¹å¼ï¼ç¶åä¼è¾åºè³æ¾ç¤ºå¨ææå°æºãæµè§å¨çå æ ¸çä¸å对äºç½é¡µçè¯æ³è§£é伿ä¸åï¼æä»¥æ¸²æçææä¹ä¸ç¸åãææç½é¡µæµè§å¨ãçµåé®ä»¶å®¢æ·ç«¯ä»¥åå ¶å®éè¦ç¼è¾ãæ¾ç¤ºç½ç»å 容çåºç¨ç¨åºé½éè¦å æ ¸
JS弿åï¼è§£æåæ§è¡javascriptæ¥å®ç°ç½é¡µç卿ææ
æå¼å§æ¸²æå¼æåJSå¼æå¹¶æ²¡æåºåçå¾æç¡®ï¼åæ¥JSå¼æè¶æ¥è¶ç¬ç«ï¼å æ ¸å°±å¾åäºåªææ¸²æå¼æ
9 html5æåªäºæ°ç¹æ§ãç§»é¤äºé£äºå ç´ ï¼ HTML5 ç°å¨å·²ç»ä¸æ¯ SGML çåéï¼ä¸»è¦æ¯å ³äºå¾åï¼ä½ç½®ï¼åå¨ï¼å¤ä»»å¡çåè½çå¢å
ç»ç» canvas ç¨äºåªä»åæ¾ç video å audio å ç´ æ¬å°ç¦»çº¿åå¨ localStorage é¿æå卿°æ®ï¼æµè§å¨å ³éåæ°æ®ä¸ä¸¢å¤± sessionStorage çæ°æ®å¨æµè§å¨å ³éåèªå¨å é¤ è¯æåæ´å¥½çå 容å ç´ ï¼æ¯å¦ articleãfooterãheaderãnavãsection è¡¨åæ§ä»¶ï¼calendarãdateãtimeãemailãurlãsearch æ°çææ¯webworker, websocket, Geolocation ç§»é¤çå ç´ ï¼
纯表ç°çå ç´ ï¼basefontï¼bigï¼centerï¼font, sï¼strikeï¼ttï¼u` 对å¯ç¨æ§äº§çè´é¢å½±åçå ç´ ï¼frameï¼framesetï¼noframes æ¯æHTML5æ°æ ç¾ï¼
IE8/IE7/IE6æ¯æéè¿document.createElementæ¹æ³äº§ççæ ç¾ å¯ä»¥å©ç¨è¿ä¸ç¹æ§è®©è¿äºæµè§å¨æ¯æHTML5æ°æ ç¾ æµè§å¨æ¯ææ°æ ç¾åï¼è¿éè¦æ·»å æ ç¾é»è®¤çæ ·å¼ å½ç¶ä¹å¯ä»¥ç´æ¥ä½¿ç¨æççæ¡æ¶ãæ¯å¦html5shim
10 HTML5ç离线å¨åæä¹ä½¿ç¨ï¼å·¥ä½åçè½ä¸è½è§£éä¸ä¸ï¼ å¨ç¨æ·æ²¡æä¸å ç¹ç½è¿æ¥æ¶ï¼å¯ä»¥æ£å¸¸è®¿é®ç«ç¹æåºç¨ï¼å¨ç¨æ·ä¸å ç¹ç½è¿æ¥æ¶ï¼æ´æ°ç¨æ·æºå¨ä¸çç¼åæä»¶
åçï¼HTML5ç离线å卿¯åºäºä¸ä¸ªæ°å»ºç.appcacheæä»¶çç¼åæºå¶(䏿¯å卿æ¯)ï¼éè¿è¿ä¸ªæä»¶ä¸çè§£ææ¸ å离线åå¨èµæºï¼è¿äºèµæºå°±ä¼åcookie䏿 ·è¢«åå¨äºä¸æ¥ãä¹åå½ç½ç»å¨å¤äºç¦»çº¿ç¶æä¸æ¶ï¼æµè§å¨ä¼éè¿è¢«ç¦»çº¿åå¨çæ°æ®è¿è¡é¡µé¢å±ç¤º
å¦ä½ä½¿ç¨ï¼
页é¢å¤´é¨åä¸é¢ä¸æ ·å å ¥ä¸ä¸ªmanifestç屿§ï¼ å¨cache.manifestæä»¶çç¼å离线åå¨çèµæº å¨ç¦»çº¿ç¶ææ¶ï¼æä½window.applicationCacheè¿è¡éæ±å®ç° CACHE MANIFEST #v0.11 CACHE: js/app.js css/style.css NETWORK: resourse/logo.png FALLBACK: / /offline.html 11 æµè§å¨æ¯æä¹å¯¹HTML5ç离线å¨åèµæºè¿è¡ç®¡çåå è½½çå¢ å¨çº¿çæ åµä¸ï¼æµè§å¨åç°html头鍿manifest屿§ï¼å®ä¼è¯·æ±manifestæä»¶ï¼å¦ææ¯ç¬¬ä¸æ¬¡è®¿é®appï¼é£ä¹æµè§å¨å°±ä¼æ ¹æ®manifestæä»¶çå 容ä¸è½½ç¸åºçèµæºå¹¶ä¸è¿è¡ç¦»çº¿åå¨ã妿已ç»è®¿é®è¿appå¹¶ä¸èµæºå·²ç»ç¦»çº¿åå¨äºï¼é£ä¹æµè§å¨å°±ä¼ä½¿ç¨ç¦»çº¿çèµæºå 载页é¢ï¼ç¶åæµè§å¨ä¼å¯¹æ¯æ°çmanifestæä»¶ä¸æ§çmanifestæä»¶ï¼å¦ææä»¶æ²¡æåçæ¹åï¼å°±ä¸å任使ä½ï¼å¦ææä»¶æ¹åäºï¼é£ä¹å°±ä¼éæ°ä¸è½½æä»¶ä¸çèµæºå¹¶è¿è¡ç¦»çº¿åå¨ã
ç¦»çº¿çæ åµä¸ï¼æµè§å¨å°±ç´æ¥ä½¿ç¨ç¦»çº¿åå¨çèµæºã
12 请æè¿°ä¸ä¸ cookiesï¼sessionStorage å localStorage çåºå«ï¼ cookieæ¯ç½ç«ä¸ºäºæ ç¤ºç¨æ·èº«ä»½èå¨åå¨ç¨æ·æ¬å°ç»ç«¯ï¼Client Sideï¼ä¸çæ°æ®ï¼é常ç»è¿å å¯ï¼
cookieæ°æ®å§ç»å¨åæºçhttp请æ±ä¸æºå¸¦ï¼å³ä½¿ä¸éè¦ï¼ï¼è®°ä¼å¨æµè§å¨åæå¡å¨é´æ¥åä¼ é
sessionStorageålocalStorageä¸ä¼èªå¨ææ°æ®åç»æå¡å¨ï¼ä» 卿¬å°ä¿å
åå¨å¤§å°ï¼
cookieæ°æ®å¤§å°ä¸è½è¶ è¿4k sessionStorageålocalStorageè½ç¶ä¹æåå¨å¤§å°çéå¶ï¼ä½æ¯cookie大å¾å¤ï¼å¯ä»¥è¾¾å°5Mææ´å¤§ æææ¶é´ï¼
localStorage åå¨æä¹ æ°æ®ï¼æµè§å¨å ³éåæ°æ®ä¸ä¸¢å¤±é¤é主å¨å 餿°æ® sessionStorage æ°æ®å¨å½åæµè§å¨çªå£å ³éåèªå¨å é¤ cookie 设置çcookieè¿ææ¶é´ä¹åä¸ç´ææï¼å³ä½¿çªå£ææµè§å¨å ³é 13 iframeæé£äºç¼ºç¹ï¼ iframeä¼é»å¡ä¸»é¡µé¢çOnloadäºä»¶ æç´¢å¼æçæ£ç´¢ç¨åºæ æ³è§£è¯»è¿ç§é¡µé¢ï¼ä¸å©äºSEO iframeå主页é¢å ±äº«è¿æ¥æ± ï¼èæµè§å¨å¯¹ç¸ååçè¿æ¥æéå¶ï¼æä»¥ä¼å½±å页é¢çå¹¶è¡å è½½ 使ç¨iframeä¹åéè¦èèè¿ä¸¤ä¸ªç¼ºç¹ã妿éè¦ä½¿ç¨iframeï¼æå¥½æ¯éè¿javascript卿ç»iframeæ·»å src屿§å¼ï¼è¿æ ·å¯ä»¥ç»å¼ä»¥ä¸ä¸¤ä¸ªé®é¢ 14 WEBæ å以åW3Cæ 忝ä»ä¹? æ ç¾éåãæ ç¾å°åãä¸ä¹±åµå¥ã使ç¨å¤é¾cssåjsãç»æè¡ä¸ºè¡¨ç°çå离 15 xhtmlåhtmlæä»ä¹åºå«? ä¸ä¸ªæ¯åè½ä¸çå·®å«
ä¸»è¦æ¯XHTMLå¯å ¼å®¹å大æµè§å¨ãææºä»¥åPDAï¼å¹¶ä¸æµè§å¨ä¹è½å¿«éæ£ç¡®å°ç¼è¯ç½é¡µ å¦å¤æ¯ä¹¦åä¹ æ¯çå·®å«
XHTML å ç´ å¿ é¡»è¢«æ£ç¡®å°åµå¥ï¼éåï¼åºå大å°åï¼ææ¡£å¿ é¡»æ¥ææ ¹å ç´ 16 Doctypeä½ç¨? ä¸¥æ ¼æ¨¡å¼ä¸æ··ææ¨¡å¼å¦ä½åºåï¼å®ä»¬æä½æä¹? 页é¢è¢«å è½½çæ¶ï¼linkä¼åæ¶è¢«å è½½ï¼è@imort页é¢è¢«å è½½çæ¶ï¼linkä¼åæ¶è¢«å è½½ï¼è@importå¼ç¨çCSSä¼çå°é¡µé¢è¢«å è½½å®åå è½½ importåªå¨IE5以䏿è½è¯å«ï¼èlinkæ¯XHTMLæ ç¾ï¼æ å ¼å®¹é®é¢ linkæ¹å¼çæ ·å¼çæé é«äº@importçæé
声æä½äºææ¡£ä¸çæåé¢ï¼å¤äº æ ç¾ä¹åãåç¥æµè§å¨çè§£æå¨ï¼ ç¨ä»ä¹ææ¡£ç±»å è§èæ¥è§£æè¿ä¸ªææ¡£ä¸¥æ ¼æ¨¡å¼çæçå JS è¿ä½æ¨¡å¼æ¯ 以该æµè§å¨æ¯æçæé«æ åè¿è¡ 卿··ææ¨¡å¼ä¸ï¼é¡µé¢ä»¥å®½æ¾çååå ¼å®¹çæ¹å¼æ¾ç¤ºã模æè弿µè§å¨çè¡ä¸ºä»¥é²æ¢ç«ç¹æ æ³å·¥ä½ã DOCTYPEä¸åå¨ææ ¼å¼ä¸æ£ç¡®ä¼å¯¼è´ææ¡£ä»¥æ··ææ¨¡å¼åç° 17 è¡å å ç´ æåªäºï¼å级å ç´ æåªäºï¼ 空(void)å ç´ æé£äºï¼è¡å å ç´ åå级å ç´ æä»ä¹åºå«ï¼ è¡å å ç´ æï¼a b span img input select strong å级å ç´ æï¼div ul ol li dl dt dd h1 h2 h3 h4â¦p 空å ç´ ï¼
è¡å å ç´ ä¸å¯ä»¥è®¾ç½®å®½é«ï¼ä¸ç¬å ä¸è¡ å级å ç´ å¯ä»¥è®¾ç½®å®½é«ï¼ç¬å ä¸è¡ 18 HTMLå ¨å±å±æ§(global attribute)æåªäº class:为å ç´ è®¾ç½®ç±»æ è¯ data-*: 为å ç´ å¢å èªå®ä¹å±æ§ draggable: 设置å ç´ æ¯å¦å¯ææ½ id: å ç´ idï¼ææ¡£å å¯ä¸ lang: å ç´ å 容ççè¯è¨ style: è¡å cssæ ·å¼ title: å ç´ ç¸å ³çå»ºè®®ä¿¡æ¯ 19 CanvasåSVGæä»ä¹åºå«ï¼ svgç»å¶åºæ¥çæ¯ä¸ä¸ªå¾å½¢çå ç´ é½æ¯ç¬ç«çDOMèç¹ï¼è½å¤æ¹ä¾¿çç»å®äºä»¶æç¨æ¥ä¿®æ¹ãcanvasè¾åºçæ¯ä¸æ´å¹ ç»å¸ svgè¾åºçå¾å½¢æ¯ç¢éå¾å½¢ï¼åæå¯ä»¥ä¿®æ¹åæ°æ¥èªç±æ¾å¤§ç¼©å°ï¼ä¸ä¼æ¯çåé¯é½¿ãècanvasè¾åºæ éç»å¸ï¼å°±åä¸å¼ å¾ç䏿 ·ï¼æ¾å¤§ä¼å¤±çæè é¯é½¿ 20 HTML5 为ä»ä¹åªéè¦å HTML5 ä¸åºäº SGMLï¼å æ¤ä¸éè¦å¯¹DTDè¿è¡å¼ç¨ï¼ä½æ¯éè¦doctypeæ¥è§èæµè§å¨çè¡ä¸º èHTML4.01åºäºSGML,æä»¥éè¦å¯¹DTDè¿è¡å¼ç¨ï¼æè½åç¥æµè§å¨ææ¡£æä½¿ç¨çææ¡£ç±»å 21 å¦ä½å¨é¡µé¢ä¸å®ç°ä¸ä¸ªåå½¢çå¯ç¹å»åºåï¼ svg border-radius 纯jså®ç° éè¦æ±ä¸ä¸ªç¹å¨ä¸å¨åä¸ç®åç®æ³ãè·åé¼ æ åæ çç 22 ç½é¡µéªè¯ç æ¯å¹²åçï¼æ¯ä¸ºäºè§£å³ä»ä¹å®å ¨é®é¢ åºåç¨æ·æ¯è®¡ç®æºè¿æ¯äººçå ¬å ±å ¨èªå¨ç¨åºãå¯ä»¥é²æ¢æ¶æç ´è§£å¯ç ãå·ç¥¨ã论åçæ°´ ææé²æ¢é»å®¢å¯¹æä¸ä¸ªç¹å®æ³¨åç¨æ·ç¨ç¹å®ç¨åºæ´åç ´è§£æ¹å¼è¿è¡ä¸æçç»éå°è¯ 23 viewport // width 设置viewport宽度ï¼ä¸ºä¸ä¸ªæ£æ´æ°ï¼æå符串âdevice-widthâ // device-width 设å¤å®½åº¦ // height 设置viewporté«åº¦ï¼ä¸è¬è®¾ç½®äºå®½åº¦ï¼ä¼èªå¨è§£æåºé«åº¦ï¼å¯ä»¥ä¸ç¨è®¾ç½® // initial-scale é»è®¤ç¼©æ¾æ¯ä¾ï¼åå§ç¼©æ¾æ¯ä¾ï¼ï¼ä¸ºä¸ä¸ªæ°åï¼å¯ä»¥å¸¦å°æ° // minimum-scale å è®¸ç¨æ·æå°ç¼©æ¾æ¯ä¾ï¼ä¸ºä¸ä¸ªæ°åï¼å¯ä»¥å¸¦å°æ° // maximum-scale å è®¸ç¨æ·æå¤§ç¼©æ¾æ¯ä¾ï¼ä¸ºä¸ä¸ªæ°åï¼å¯ä»¥å¸¦å°æ° // user-scalable æ¯å¦å 许æå¨ç¼©æ¾ 延伸æé® ææ ·å¤ç ç§»å¨ç«¯ 1px 被 æ¸²ææ 2px é®é¢ å±é¨å¤ç
mateæ ç¾ä¸ç viewport屿§ ï¼initial-scale 设置为 1 rem æç §è®¾è®¡ç¨¿æ åèµ°ï¼å¤å å©ç¨transfrome çscale(0.5) 缩å°ä¸åå³å¯ï¼ å ¨å±å¤ç
mateæ ç¾ä¸ç viewport屿§ ï¼initial-scale 设置为 0.5 rem æç §è®¾è®¡ç¨¿æ åèµ°å³å¯ 24 渲æä¼å ç¦æ¢ä½¿ç¨iframeï¼é»å¡ç¶ææ¡£onloadäºä»¶ï¼
iframeä¼é»å¡ä¸»é¡µé¢çOnloadäºä»¶ æç´¢å¼æçæ£ç´¢ç¨åºæ æ³è§£è¯»è¿ç§é¡µé¢ï¼ä¸å©äºSEO iframeå主页é¢å ±äº«è¿æ¥æ± ï¼èæµè§å¨å¯¹ç¸ååçè¿æ¥æéå¶ï¼æä»¥ä¼å½±å页é¢çå¹¶è¡å è½½ 使ç¨iframeä¹åéè¦èèè¿ä¸¤ä¸ªç¼ºç¹ã妿éè¦ä½¿ç¨iframeï¼æå¥½æ¯éè¿javascript 卿ç»iframeæ·»å src屿§å¼ï¼è¿æ ·å¯ä»¥ç»å¼ä»¥ä¸ä¸¤ä¸ªé®é¢ ç¦æ¢ä½¿ç¨gifå¾çå®ç°loadingææï¼éä½CPUæ¶èï¼æåæ¸²ææ§è½ï¼
使ç¨CSS3代ç 代æ¿JSå¨ç»ï¼å°½å¯è½é¿å éç»éæä»¥ååæµï¼
对äºä¸äºå°å¾æ ï¼å¯ä»¥ä½¿ç¨base64ä½ç¼ç ï¼ä»¥åå°ç½ç»è¯·æ±ãä½ä¸å»ºè®®å¤§å¾ä½¿ç¨ï¼æ¯è¾èè´¹CPU
å°å¾æ ä¼å¿å¨äº åå°HTTPè¯·æ± é¿å æä»¶è·¨å ä¿®æ¹åæ¶çæ 页é¢å¤´é¨ç <script ä¼é»å¡é¡µé¢ï¼ï¼å 为 Rendererè¿ç¨ä¸ JS线ç¨å渲æçº¿ç¨æ¯äºæ¥çï¼
页é¢ä¸ç©ºç href å src ä¼é»å¡é¡µé¢å ¶ä»èµæºçå è½½ (é»å¡ä¸è½½è¿ç¨)
ç½é¡µGzipï¼CDNæç®¡ï¼dataç¼å ï¼å¾çæå¡å¨
åç«¯æ¨¡æ¿ JS+æ°æ®ï¼åå°ç±äºHTMLæ ç¾å¯¼è´ç带宽浪费ï¼å端ç¨åéä¿åAJAX请æ±ç»æï¼æ¯æ¬¡æä½æ¬å°åéï¼ä¸ç¨è¯·æ±ï¼åå°è¯·æ±æ¬¡æ°
ç¨innerHTML代æ¿DOMæä½ï¼åå°DOMæä½æ¬¡æ°ï¼ä¼åjavascriptæ§è½
å½éè¦è®¾ç½®çæ ·å¼å¾å¤æ¶è®¾ç½®classNameè䏿¯ç´æ¥æä½style
å°ç¨å ¨å±åéãç¼åDOMèç¹æ¥æ¾çç»æãåå°IO读åæä½
å¾çé¢å è½½ï¼å°æ ·å¼è¡¨æ¾å¨é¡¶é¨ï¼å°èæ¬æ¾å¨åºé¨ å 䏿¶é´æ³
对æ®éçç½ç«æä¸ä¸ªç»ä¸çæè·¯ï¼å°±æ¯å°½éåå端ä¼åãåå°æ°æ®åºæä½ãåå°ç£çIO
25 meta viewportç¸å ³
26 ä½ åç页é¢å¨åªäºæµè§å¨æµè¯è¿ï¼è¿äºæµè§å¨çå æ ¸å嫿¯ä»ä¹? IE: tridentå æ ¸ Firefoxï¼geckoå æ ¸ Safari:webkitå æ ¸ Opera:以忝prestoå æ ¸ï¼Operaç°å·²æ¹ç¨Google - ChromeçBlinkå æ ¸ Chrome:Blink(åºäºwebkitï¼Googleä¸Opera Softwareå ±åå¼å) 27 div+cssçå¸å±è¾tableå¸å±æä»ä¹ä¼ç¹ï¼ æ¹ççæ¶åæ´æ¹ä¾¿ åªè¦æ¹cssæä»¶ã 页é¢å è½½é度æ´å¿«ãç»æåæ¸ æ°ã页颿¾ç¤ºç®æ´ã 表ç°ä¸ç»æç¸åç¦»ã æäºä¼åï¼seoï¼æç´¢å¼ææ´åå¥½ï¼æåæ´å®¹æé åã 28 aï¼imgçaltä¸titleæä½å¼åï¼bï¼strongä¸emçå¼åï¼ alt(alt text):为ä¸è½æ¾ç¤ºå¾åãçªä½æappletsçç¨æ·ä»£çï¼UAï¼ï¼alt屿§ç¨æ¥æå®æ¿æ¢æåãæ¿æ¢æåçè¯è¨ç±lang屿§æå®ã(å¨IEæµè§å¨ä¸ä¼å¨æ²¡ætitleæ¶æalt彿 tool tipæ¾ç¤º)title(tool tip):è¯¥å±æ§ä¸ºè®¾ç½®è¯¥å±æ§çå ç´ æä¾å»ºè®®æ§çä¿¡æ¯
strong:ç²ä½å¼ºè°æ ç¾ï¼å¼ºè°ï¼è¡¨ç¤ºå 容çéè¦æ§
em:æä½å¼ºè°æ ç¾ï¼æ´å¼ºç强è°ï¼è¡¨ç¤ºå 容ç强è°ç¹
29 ä½ è½æè¿°ä¸ä¸æ¸è¿å¢å¼ºåä¼é é级ä¹é´çä¸åå æ¸è¿å¢å¼ºï¼é对ä½çæ¬æµè§å¨è¿è¡æå»ºé¡µé¢ï¼ä¿è¯æåºæ¬çåè½ï¼ç¶ååé对é«çº§æµè§å¨è¿è¡ææã交äºçæ¹è¿å追å åè½è¾¾å°æ´å¥½çç¨æ·ä½éªã ä¼é é级ï¼ä¸å¼å§å°±æå»ºå®æ´çåè½ï¼ç¶ååé对ä½çæ¬æµè§å¨è¿è¡å ¼å®¹ã åºå«ï¼ä¼é é级æ¯ä»å¤æçç°ç¶å¼å§ï¼å¹¶è¯å¾åå°ç¨æ·ä½éªçä¾ç»ï¼èæ¸è¿å¢å¼ºåæ¯ä»ä¸ä¸ªé常åºç¡çï¼è½å¤èµ·ä½ç¨ççæ¬å¼å§ï¼å¹¶ä¸ææ©å ï¼ä»¥éåºæªæ¥ç¯å¢çéè¦ãé级ï¼åè½è¡°åï¼æå³çå¾åçï¼èæ¸è¿å¢å¼ºåæå³çæåçï¼åæ¶ä¿è¯å ¶æ ¹åºå¤äºå®å ¨å°å¸¦
30 为ä»ä¹å©ç¨å¤ä¸ªå忥åå¨ç½ç«èµæºä¼æ´ææï¼ CDNç¼åæ´æ¹ä¾¿ çªç ´æµè§å¨å¹¶åéå¶ è约cookie带宽 è约主ååçè¿æ¥æ°ï¼ä¼å页é¢ååºé度 鲿¢ä¸å¿ è¦çå®å ¨é®é¢ 31 ç®è¿°ä¸ä¸srcä¸hrefçåºå« srcç¨äºæ¿æ¢å½åå ç´ ï¼hrefç¨äºå¨å½åææ¡£åå¼ç¨èµæºä¹é´ç¡®ç«èç³»ã srcæ¯sourceç缩åï¼æåå¤é¨èµæºçä½ç½®ï¼æåçå 容å°ä¼åµå ¥å°ææ¡£ä¸å½åæ ç¾æå¨ä½ç½®ï¼å¨è¯·æ±srcèµæºæ¶ä¼å°å ¶æåçèµæºä¸è½½å¹¶åºç¨å°ææ¡£å ï¼ä¾å¦jsèæ¬ï¼imgå¾çåframeçå ç´
彿µè§å¨è§£æå°è¯¥å ç´ æ¶ï¼ä¼æåå ¶ä»èµæºçä¸è½½åå¤çï¼ç´å°å°è¯¥èµæºå è½½ãç¼è¯ãæ§è¡å®æ¯ï¼å¾çåæ¡æ¶çå ç´ ä¹å¦æ¤ï¼ç±»ä¼¼äºå°ææåèµæºåµå ¥å½åæ ç¾å ãè¿ä¹æ¯ä¸ºä»ä¹å°jsèæ¬æ¾å¨åºé¨è䏿¯å¤´é¨hrefæ¯Hypertext Referenceç缩åï¼æåç½ç»èµæºæå¨ä½ç½®ï¼å»ºç«åå½åå ç´ ï¼éç¹ï¼æå½åææ¡£ï¼é¾æ¥ï¼ä¹é´ç龿¥ï¼å¦ææä»¬å¨ææ¡£ä¸æ·»å
é£ä¹æµè§å¨ä¼è¯å«è¯¥ææ¡£ä¸ºcssæä»¶ï¼å°±ä¼å¹¶è¡ä¸è½½èµæºå¹¶ä¸ä¸ä¼åæ¢å¯¹å½åææ¡£çå¤çãè¿ä¹æ¯ä¸ºä»ä¹å»ºè®®ä½¿ç¨linkæ¹å¼æ¥å è½½cssï¼è䏿¯ä½¿ç¨@importæ¹å¼ 32 ç¥éçç½é¡µå¶ä½ä¼ç¨å°çå¾çæ ¼å¼æåªäºï¼ png-8ï¼png-24ï¼jpegï¼gifï¼svg 使¯ä¸é¢çé£äºé½ä¸æ¯é¢è¯å®æ³è¦çæåçæ¡ãé¢è¯å®å¸æå¬å°æ¯Webp,Apngãï¼æ¯å¦æå ³æ³¨æ°ææ¯ï¼æ°é²äºç©ï¼Webpï¼WebPæ ¼å¼ï¼è°·æï¼googleï¼å¼åçä¸ç§æ¨å¨å å¿«å¾çå è½½é度çå¾çæ ¼å¼ãå¾çå缩ä½ç§¯å¤§çº¦åªæJPEGç2/3ï¼å¹¶è½èç大éçæå¡å¨å¸¦å®½èµæºåæ°æ®ç©ºé´ãFacebook Ebayçç¥åç½ç«å·²ç»å¼å§æµè¯å¹¶ä½¿ç¨WebPæ ¼å¼ã å¨è´¨éç¸åçæ åµä¸ï¼WebPæ ¼å¼å¾åçä½ç§¯è¦æ¯JPEGæ ¼å¼å¾åå°40%ã Apngï¼å ¨ç§°æ¯âAnimated Portable Network Graphicsâ, æ¯PNGçä½å¾å¨ç»æ©å±ï¼å¯ä»¥å®ç°pngæ ¼å¼ç卿å¾çææã04å¹´è¯çï¼ä½ä¸ç´å¾ä¸å°å大æµè§å¨ååçæ¯æï¼ç´å°æ¥åå¾å° iOS safari 8çæ¯æï¼ææä»£æ¿GIFæä¸ºä¸ä¸ä»£å¨æå¾æ å 33 å¨css/js代ç ä¸çº¿ä¹åå¼å人åç»å¸¸ä¼ä¼åæ§è½ï¼ä»ç¨æ·å·æ°ç½é¡µå¼å§ï¼ä¸æ¬¡js请æ±ä¸è¬æ åµä¸æåªäºå°æ¹ä¼æç¼åå¤çï¼ dnsç¼åï¼cdnç¼åï¼æµè§å¨ç¼åï¼æå¡å¨ç¼å
33 ä¸ä¸ªé¡µé¢ä¸æå¤§éçå¾çï¼å¤§åçµåç½ç«ï¼ï¼å è½½å¾æ ¢ï¼ä½ æåªäºæ¹æ³ä¼åè¿äºå¾ççå è½½ï¼ç»ç¨æ·æ´å¥½çä½éªã å¾çæå è½½ï¼å¨é¡µé¢ä¸çæªå¯è§åºåå¯ä»¥æ·»å ä¸ä¸ªæ»å¨æ¡äºä»¶ï¼å¤æå¾çä½ç½®ä¸æµè§å¨é¡¶ç«¯çè·ç¦»ä¸é¡µé¢çè·ç¦»ï¼å¦æåè å°äºåè ï¼ä¼å å è½½ã å¦æä¸ºå¹»ç¯çãç¸åçï¼å¯ä»¥ä½¿ç¨å¾çé¢å è½½ææ¯ï¼å°å½åå±ç¤ºå¾ççåä¸å¼ ååä¸å¼ ä¼å ä¸è½½ã 妿å¾ç为csså¾çï¼å¯ä»¥ä½¿ç¨CSSspriteï¼SVGspriteï¼IconfontãBase64çææ¯ã 妿å¾çè¿å¤§ï¼å¯ä»¥ä½¿ç¨ç¹æ®ç¼ç çå¾çï¼å è½½æ¶ä¼å å è½½ä¸å¼ å缩çç¹å«å害ç缩ç¥å¾ï¼ä»¥æé«ç¨æ·ä½éªã 妿å¾çå±ç¤ºåºåå°äºå¾çççå®å¤§å°ï¼åå 卿å¡å¨ç«¯æ ¹æ®ä¸å¡éè¦å è¡è¿è¡å¾çå缩ï¼å¾çå缩å大å°ä¸å±ç¤ºä¸è´ã 34 å¸¸è§æåºç®æ³çæ¶é´å¤æåº¦,空é´å¤æåº¦
35 webå¼åä¸ä¼è¯è·è¸ªçæ¹æ³æåªäº cookie session urléå éèinput ipå°å 36 HTTP requestæ¥æç»ææ¯ææ ·ç é¦è¡æ¯Request-Lineå æ¬ï¼è¯·æ±æ¹æ³ï¼è¯·æ±URIï¼åè®®çæ¬ï¼CRLF é¦è¡ä¹åæ¯è¥å¹²è¡è¯·æ±å¤´ï¼å æ¬general-headerï¼request-headeræè entity-headerï¼æ¯ä¸ªä¸è¡ä»¥CRLFç»æ 请æ±å¤´åæ¶æ¯å®ä½ä¹é´æä¸ä¸ªCRLFåé æ ¹æ®å®é 请æ±éè¦å¯è½å å«ä¸ä¸ªæ¶æ¯å®ä½ ä¸ä¸ªè¯·æ±æ¥æä¾åå¦ä¸ï¼ GET /Protocols/rfc2616/rfc2616-sec5.html HTTP/1.1 Host: www.w3.org Connection: keep-alive Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 Referer: https://www.google.com.hk/ Accept-Encoding: gzip,deflate,sdch Accept-Language: zh-CN,zh;q=0.8,en;q=0.6 Cookie: authorstyle=yes If-None-Match: "2cc8-3e3073913b100" If-Modified-Since: Wed, 01 Sep 2004 13:24:52 GMT
name=qiu&age=25 37 HTTP responseæ¥æç»ææ¯ææ ·ç é¦è¡æ¯ç¶æè¡å æ¬ï¼HTTPçæ¬ï¼ç¶æç ï¼ç¶ææè¿°ï¼åé¢è·ä¸ä¸ªCRLF é¦è¡ä¹åæ¯è¥å¹²è¡ååºå¤´ï¼å æ¬ï¼éç¨å¤´é¨ï¼ååºå¤´é¨ï¼å®ä½å¤´é¨ ååºå¤´é¨åååºå®ä½ä¹é´ç¨ä¸ä¸ªCRLF空è¡åé æåæ¯ä¸ä¸ªå¯è½çæ¶æ¯å®ä½ ååºæ¥æä¾åå¦ä¸ï¼ HTTP/1.1 200 OK Date: Tue, 08 Jul 2014 05:28:43 GMT Server: Apache/2 Last-Modified: Wed, 01 Sep 2004 13:24:52 GMT ETag: "40d7-3e3073913b100" Accept-Ranges: bytes Content-Length: 16599 Cache-Control: max-age=21600 Expires: Tue, 08 Jul 2014 11:28:43 GMT P3P: policyref="http://www.w3.org/2001/05/P3P/p3p.xml" Content-Type: text/html; charset=iso-8859-1
{"name": "qiu", "age": 25} äºãCSSé¨å 1 css spriteæ¯ä»ä¹,æä»ä¹ä¼ç¼ºç¹ æ¦å¿µï¼å°å¤ä¸ªå°å¾çæ¼æ¥å°ä¸ä¸ªå¾çä¸ãéè¿background-positionåå ç´ å°ºå¯¸è°èéè¦æ¾ç¤ºçèæ¯å¾æ¡ã
ä¼ç¹ï¼
åå°HTTPè¯·æ±æ°ï¼æå¤§å°æé«é¡µé¢å è½½é度 å¢å å¾çä¿¡æ¯éå¤åº¦ï¼æé«å缩æ¯ï¼åå°å¾çå¤§å° æ´æ¢é£æ ¼æ¹ä¾¿ï¼åªéå¨ä¸å¼ æå å¼ å¾çä¸ä¿®æ¹é¢è²ææ ·å¼å³å¯å®ç° 缺ç¹ï¼
å¾çåå¹¶éº»ç¦ ç»´æ¤éº»ç¦ï¼ä¿®æ¹ä¸ä¸ªå¾çå¯è½éè¦ä»æ°å¸å±æ´ä¸ªå¾çï¼æ ·å¼ 2 display: none;ä¸visibility: hidden;çåºå« èç³»ï¼å®ä»¬é½è½è®©å ç´ ä¸å¯è§
åºå«ï¼
display:none;ä¼è®©å ç´ å®å ¨ä»æ¸²ææ 䏿¶å¤±ï¼æ¸²æçæ¶åä¸å æ®ä»»ä½ç©ºé´ï¼visibility: hidden;ä¸ä¼è®©å ç´ ä»æ¸²ææ æ¶å¤±ï¼æ¸²æå¸å ç´ ç»§ç»å æ®ç©ºé´ï¼åªæ¯å 容ä¸å¯è§ display: none;æ¯éç»§æ¿å±æ§ï¼ååèç¹æ¶å¤±ç±äºå ç´ ä»æ¸²ææ æ¶å¤±é æï¼éè¿ä¿®æ¹ååèç¹å±æ§æ æ³æ¾ç¤ºï¼visibility: hidden;æ¯ç»§æ¿å±æ§ï¼ååèç¹æ¶å¤±ç±äºç»§æ¿äºhiddenï¼éè¿è®¾ç½®visibility: visible;å¯ä»¥è®©ååèç¹æ¾å¼ ä¿®æ¹å¸¸è§æµä¸å ç´ çdisplayé常ä¼é æææ¡£éæãä¿®æ¹visibility屿§åªä¼é ææ¬å ç´ çéç»ã 读å±å¨ä¸ä¼è¯»ådisplay: none;å ç´ å 容ï¼ä¼è¯»åvisibility: hidden;å ç´ å 容 3 linkä¸@importçåºå« linkæ¯HTMLæ¹å¼ï¼ @importæ¯CSSæ¹å¼ linkæå¤§éåº¦æ¯æå¹¶è¡ä¸è½½ï¼@importè¿å¤åµå¥å¯¼è´ä¸²è¡ä¸è½½ï¼åºç°FOUC linkå¯ä»¥éè¿rel="alternate stylesheet"æå®åéæ ·å¼ æµè§å¨å¯¹linkæ¯ææ©äº@importï¼å¯ä»¥ä½¿ç¨@importå¯¹èæµè§å¨éèæ ·å¼ @importå¿ é¡»å¨æ ·å¼è§åä¹åï¼å¯ä»¥å¨cssæä»¶ä¸å¼ç¨å ¶ä»æä»¶ æ»ä½æ¥è¯´ï¼linkä¼äº@import 4 ä»ä¹æ¯FOUC?å¦ä½é¿å Flash Of Unstyled Contentï¼ç¨æ·å®ä¹æ ·å¼è¡¨å è½½ä¹åæµè§å¨ä½¿ç¨é»è®¤æ ·å¼æ¾ç¤ºææ¡£ï¼ç¨æ·æ ·å¼å 载渲æä¹åå仿°æ¾ç¤ºææ¡£ï¼é æé¡µé¢éªçã è§£å³æ¹æ³ï¼ææ ·å¼è¡¨æ¾å°ææ¡£çhead 5 å¦ä½å建åçº§æ ¼å¼åä¸ä¸æ(block formatting context),BFCæä»ä¹ç¨ å建è§åï¼
æ ¹å ç´ æµ®å¨å ç´ ï¼float䏿¯noneï¼ ç»å¯¹å®ä½å ç´ ï¼positionåå¼ä¸ºabsoluteæfixedï¼ displayåå¼ä¸ºinline-block,table-cell, table-caption,flex, inline-flexä¹ä¸çå ç´ overflow䏿¯visibleçå ç´ ä½ç¨ï¼
å¯ä»¥å 嫿µ®å¨å ç´ ä¸è¢«æµ®å¨å ç´ è¦ç 黿¢ç¶åå ç´ çmarginæå 6 display,float,positionçå ³ç³» 妿display为noneï¼é£ä¹positionåfloaté½ä¸èµ·ä½ç¨ï¼è¿ç§æ åµä¸å ç´ ä¸äº§çæ¡ å¦åï¼å¦æpositionå¼ä¸ºabsoluteæè fixedï¼æ¡å°±æ¯ç»å¯¹å®ä½çï¼floatç计ç®å¼ä¸ºnoneï¼displayæ ¹æ®ä¸é¢çè¡¨æ ¼è¿è¡è°æ´ã å¦åï¼å¦æfloat䏿¯noneï¼æ¡æ¯æµ®å¨çï¼displayæ ¹æ®ä¸è¡¨è¿è¡è°æ´ å¦åï¼å¦æå ç´ æ¯æ ¹å ç´ ï¼displayæ ¹æ®ä¸è¡¨è¿è¡è°æ´ å ¶ä»æ åµä¸displayçå¼ä¸ºæå®å¼ æ»ç»èµ·æ¥ï¼ç»å¯¹å®ä½ãæµ®å¨ãæ ¹å ç´ é½éè¦è°æ´display 7 æ¸ é¤æµ®å¨çå ç§æ¹å¼ï¼åèªçä¼ç¼ºç¹ ç¶çº§divå®ä¹height ç»å°¾å¤å 空divæ ç¾clear:both ç¶çº§divå®ä¹ä¼ªç±»:afteråzoom ç¶çº§divå®ä¹overflow:hidden ç¶çº§div乿µ®å¨ï¼éè¦å®ä¹å®½åº¦ ç»å°¾å¤å bræ ç¾clear:both æ¯è¾å¥½çæ¯ç¬¬3ç§æ¹å¼ï¼å¥½å¤ç½ç«é½è¿ä¹ç¨ 8 为ä»ä¹è¦åå§åCSSæ ·å¼? å 为æµè§å¨çå ¼å®¹é®é¢ï¼ä¸åæµè§å¨å¯¹æäºæ ç¾çé»è®¤å¼æ¯ä¸åçï¼å¦ææ²¡å¯¹CSSåå§åå¾å¾ä¼åºç°æµè§å¨ä¹é´ç页颿¾ç¤ºå·®å¼ã å½ç¶ï¼åå§åæ ·å¼ä¼å¯¹SEOæä¸å®çå½±åï¼ä½é±¼åçæä¸å¯å ¼å¾ï¼ä½åæ±å½±åæå°çæ åµä¸åå§å 9 css3æåªäºæ°ç¹æ§ æ°å¢åç§csséæ©å¨ åè§ border-radius å¤åå¸å± é´å½±ååå° æåç¹ætext-shadow çº¿æ§æ¸å æè½¬transform CSS3æ°å¢ä¼ªç±»æé£äºï¼
p:first-of-type éæ©å±äºå ¶ç¶å ç´ çé¦ä¸ª
å ç´ çæ¯ä¸ª
å ç´ ã p:last-of-type éæ©å±äºå ¶ç¶å ç´ çæå
å ç´ çæ¯ä¸ª
å ç´ ã p:only-of-type éæ©å±äºå ¶ç¶å ç´ å¯ä¸ç
å ç´ çæ¯ä¸ª
å ç´ ã p:only-child éæ©å±äºå ¶ç¶å ç´ çå¯ä¸åå ç´ çæ¯ä¸ª
å ç´ ã p:nth-child(2) éæ©å±äºå ¶ç¶å ç´ ç第äºä¸ªåå ç´ çæ¯ä¸ª
å ç´ ã :after å¨å ç´ ä¹åæ·»å å 容,ä¹å¯ä»¥ç¨æ¥åæ¸ é¤æµ®å¨ã :before å¨å ç´ ä¹åæ·»å å 容 :enabled :disabled æ§å¶è¡¨åæ§ä»¶çç¦ç¨ç¶æã :checked åéæ¡æå¤éæ¡è¢«éä¸ 10 displayæåªäºå¼ï¼è¯´æä»ä»¬çä½ç¨ block 象åç±»åå ç´ ä¸æ ·æ¾ç¤ºã none 缺çå¼ã象è¡å å ç´ ç±»å䏿 ·æ¾ç¤ºã inline-block 象è¡å å ç´ ä¸æ ·æ¾ç¤ºï¼ä½å ¶å 容象åç±»åå ç´ ä¸æ ·æ¾ç¤ºã list-item 象åç±»åå ç´ ä¸æ ·æ¾ç¤ºï¼å¹¶æ·»å æ ·å¼å表æ è®°ã table æ¤å ç´ ä¼ä½ä¸ºåçº§è¡¨æ ¼æ¥æ¾ç¤º inherit è§å®åºè¯¥ä»ç¶å ç´ ç»§æ¿ display 屿§çå¼ 11 ä»ç»ä¸ä¸æ åçCSSçç忍¡åï¼ä½çæ¬IEçç忍¡åæä»ä¹ä¸åçï¼ æä¸¤ç§ï¼ IE ç忍¡åãW3C ç忍¡åï¼ çæ¨¡åï¼ å 容(content)ãå¡«å (padding)ãè¾¹ç(margin)ã è¾¹æ¡(border)ï¼ åº å«ï¼ IEçcontenté¨åæ border å padding计ç®äºè¿å»; 12 CSSä¼å çº§ç®æ³å¦ä½è®¡ç®ï¼ ä¼å 级就è¿ååï¼åæéæ åµä¸æ ·å¼å®ä¹æè¿è 为å è½½å ¥æ ·å¼ä»¥æåè½½å ¥çå®ä½ä¸ºå ä¼å 级为: !important > id > class > tag important æ¯ å èä¼å çº§é« 13 对BFCè§èççè§£ï¼ å®å³å®äºå ç´ å¦ä½å¯¹å ¶å 容è¿è¡å®ä½,以åä¸å ¶ä»å ç´ çå ³ç³»åç¸äºä½ç¨ 14 è°è°æµ®å¨åæ¸ é¤æµ®å¨ æµ®å¨çæ¡å¯ä»¥åå·¦æåå³ç§»å¨ï¼ç´å°ä»çå¤è¾¹ç¼ç¢°å°å 嫿¡æå¦ä¸ä¸ªæµ®å¨æ¡çè¾¹æ¡ä¸ºæ¢ãç±äºæµ®å¨æ¡ä¸å¨ææ¡£çæ®éæµä¸ï¼æä»¥ææ¡£çæ®éæµçåæ¡è¡¨ç°å¾å°±åæµ®å¨æ¡ä¸åå¨ä¸æ ·ãæµ®å¨ç忡伿¼æµ®å¨ææ¡£æ®éæµçåæ¡ä¸ 15 positionçå¼ï¼ relativeåabsoluteå®ä½åç¹æ¯ absoluteï¼çæç»å¯¹å®ä½çå ç´ ï¼ç¸å¯¹äº static å®ä½ä»¥å¤ç第ä¸ä¸ªç¶å ç´ è¿è¡å®ä½ fixedï¼çæç»å¯¹å®ä½çå ç´ ï¼ç¸å¯¹äºæµè§å¨çªå£è¿è¡å®ä½ relativeï¼çæç¸å¯¹å®ä½çå ç´ ï¼ç¸å¯¹äºå ¶æ£å¸¸ä½ç½®è¿è¡å®ä½ static é»è®¤å¼ã没æå®ä½ï¼å ç´ åºç°å¨æ£å¸¸çæµä¸ inherit è§å®ä»ç¶å ç´ ç»§æ¿ position 屿§çå¼ 16 display:inline-block ä»ä¹æ¶åä¸ä¼æ¾ç¤ºé´éï¼(æºç¨) ç§»é¤ç©ºæ ¼ 使ç¨marginè´å¼ 使ç¨font-size:0 letter-spacing word-spacing 17 PNG,GIF,JPGçåºå«åå¦ä½é GIF
8ä½åç´ ï¼256è² æ æå缩 æ¯æç®åå¨ç» æ¯æbooleanéæ éåç®åå¨ç» JPEG
é¢è²éäº256 ææå缩 坿§å¶å缩质é 䏿¯æéæ éåç §ç PNG
æPNG8åtruecolor PNG PNG8类似GIFé¢è²ä¸é为256ï¼æä»¶å°ï¼æ¯æalphaéæåº¦ï¼æ å¨ç» éå徿 ãèæ¯ãæé® 18 è¡å å ç´ float:left忝å¦å为å级å ç´ ï¼ æµ®å¨åï¼è¡å å ç´ ä¸ä¼æä¸ºåç¶å ç´ ï¼ä½æ¯å¯ä»¥è®¾ç½®å®½é«ãè¡å å ç´ è¦æ³åæåç¶å ç´ ï¼å ä¸è¡ï¼ç´æ¥è®¾ç½®display:block;ãä½å¦æå ç´ è®¾ç½®äºæµ®å¨åå设置display:block;é£å°±ä¸ä¼å ä¸è¡ã 19 å¨ç½é¡µä¸çåºè¯¥ä½¿ç¨å¥æ°è¿æ¯å¶æ°çåä½ï¼ä¸ºä»ä¹å¢ï¼ å¶æ°åå·ç¸å¯¹æ´å®¹æå web 设计çå ¶ä»é¨åæææ¯ä¾å ³ç³» 20 ::before å :afterä¸ååå·åååå· æä»ä¹åºå«ï¼è§£éä¸ä¸è¿2个伪å ç´ çä½ç¨ ååå·(:)ç¨äºCSS3伪类ï¼ååå·(::)ç¨äºCSS3伪å ç´ ç¨äºåºå伪类å伪å ç´ 21 妿éè¦æå¨åå¨ç»ï¼ä½ 认为æå°æ¶é´é´éæ¯å¤ä¹ ï¼ä¸ºä»ä¹ï¼ï¼é¿éï¼ å¤æ°æ¾ç¤ºå¨é»è®¤é¢çæ¯60Hzï¼å³1ç§å·æ°60æ¬¡ï¼æä»¥çè®ºä¸æå°é´é为1/60ï¼1000ms ï¼ 16.7ms 22 CSSåå¹¶æ¹æ³ é¿å 使ç¨@importå¼å ¥å¤ä¸ªcssæä»¶ï¼å¯ä»¥ä½¿ç¨CSSå·¥å ·å°CSSå并为ä¸ä¸ªCSSæä»¶ï¼ä¾å¦ä½¿ç¨Sass\Compassç 23 CSSä¸åéæ©å¨çæé(CSSå±å çè§å) ï¼importantè§åæéè¦ï¼å¤§äºå ¶å®è§å è¡å æ ·å¼è§åï¼å 1000 对äºéæ©å¨ä¸ç»å®çå个ID屿§å¼ï¼å 100 对äºéæ©å¨ä¸ç»å®çåä¸ªç±»å±æ§ã屿§éæ©å¨æè ä¼ªç±»éæ©å¨ï¼å 10 对äºéæ©å ¶ä¸ç»å®çå个å ç´ æ ç¾éæ©å¨ï¼å 1 妿æå¼ä¸æ ·ï¼åæç §æ ·å¼è§åçå åé¡ºåºæ¥åºç¨ï¼é¡ºåºé åçè¦çé åçè§å 24 ååºä½ æç¥éå¯ä»¥æ¹å页é¢å¸å±ç屿§ positionãdisplayãfloatãwidthãheightãmarginãpaddingãtopãleftãrightã` 25 CSS卿§è½ä¼åæ¹é¢çå®è·µ csså缩ä¸åå¹¶ãGzipå缩 cssæä»¶æ¾å¨headéãä¸è¦ç¨@import å°½éç¨ç¼©åãé¿å ç¨æ»¤éãåç使ç¨éæ©å¨ 26 CSS3å¨ç»ï¼ç®åå¨ç»çå®ç°ï¼å¦æè½¬çï¼ ä¾é CSS3䏿åºçä¸ä¸ªå±æ§ï¼transitionãtransformãanimation transitionï¼å®ä¹äºå ç´ å¨ååè¿ç¨ä¸æ¯æä¹æ ·çï¼å å«transition-propertyãtransition-durationãtransition-timing-functionãtransition-delayã transformï¼å®ä¹å ç´ çååç»æï¼å å«rotateãscaleãskewãtranslateã animationï¼å¨ç»å®ä¹äºå¨ä½çæ¯ä¸å¸§ï¼@keyframesï¼æä»ä¹ææï¼å æ¬animation-nameï¼animation-durationãanimation-timing-functionãanimation-delayãanimation-iteration-countãanimation-direction 27 base64çåçåä¼ç¼ºç¹ ä¼ç¹å¯ä»¥å å¯ï¼åå°äºhttpè¯·æ± ç¼ºç¹æ¯éè¦æ¶èCPUè¿è¡ç¼è§£ç 28 å ç§å¸¸è§çCSSå¸å± æµä½å¸å± .left { float: left; width: 100px; height: 200px; background: red; } .right { float: right; width: 200px; height: 200px; background: blue; } .main { margin-left: 120px; margin-right: 220px; height: 200px; background: green; }
壿¯å¸å± .container { margin-left: 120px; margin-right: 220px; } .main { float: left; width: 100%; height:300px; background: green; } .left { position: relative; left: -120px; float: left; height: 300px; width: 100px; margin-left: -100%; background: red; } .right { position: relative; right: -220px; float: right; height: 300px; width: 200px; margin-left: -200px; background: blue; }åé£ç¿¼å¸å± .content { float: left; width: 100%; } .main { height: 200px; margin-left: 110px; margin-right: 220px; background: green; } .main::after { content: ''; display: block; font-size:0; height: 0; zoom: 1; clear: both; } .left { float:left; height: 200px; width: 100px; margin-left: -100%; background: red; } .right { float: right; height: 200px; width: 200px; margin-left: -200px; background: blue; }29 stylus/sass/lessåºå« åå ·æâåéâãâæ··åâãâåµå¥âãâç»§æ¿âãâé¢è²æ··åâäºå¤§åºæ¬ç¹æ§ ScssåLESSè¯æ³è¾ä¸ºä¸¥è°¨ï¼LESSè¦æ±ä¸å®è¦ä½¿ç¨å¤§æ¬å·â{}âï¼ScssåStyluså¯ä»¥éè¿ç¼©è¿è¡¨ç¤ºå±æ¬¡ä¸åµå¥å ³ç³» Scssæ å ¨å±åéçæ¦å¿µï¼LESSåStylusæç±»ä¼¼äºå ¶å®è¯è¨çä½ç¨åæ¦å¿µ Sassæ¯åºäºRubyè¯è¨çï¼èLESSåStyluså¯ä»¥åºäºNodeJS NPMä¸è½½ç¸åºåºåè¿è¡ç¼è¯ï¼ 30 postcssçä½ç¨ å¯ä»¥ç´è§çç解为ï¼å®å°±æ¯ä¸ä¸ªå¹³å°ã为ä»ä¹è¯´å®æ¯ä¸ä¸ªå¹³å°å¢ï¼å 为æä»¬ç´æ¥ç¨å®ï¼æè§ä¸è½å¹²ä»ä¹äºæ ï¼ä½æ¯å¦æè®©ä¸äºæä»¶å¨å®ä¸é¢è·ï¼é£ä¹å°ä¼å¾å¼ºå¤§ PostCSS æä¾äºä¸ä¸ªè§£æå¨ï¼å®è½å¤å° CSS è§£æææ½è±¡è¯æ³æ éè¿å¨ PostCSS è¿ä¸ªå¹³å°ä¸ï¼æä»¬è½å¤å¼åä¸äºæä»¶ï¼æ¥å¤çæä»¬çCSSï¼æ¯å¦çé¨çï¼autoprefixer postcsså¯ä»¥å¯¹sasså¤çè¿åçcssåå¤ç æå¸¸è§çå°±æ¯autoprefixer 31 cssæ ·å¼ï¼éæ©å¨ï¼çä¼å 级 è®¡ç®æéç¡®å® !important å èæ ·å¼ ååçä¼å çº§é« 32 èªå®ä¹åä½ç使ç¨åºæ¯ å®£ä¼ /åç/bannerçåºå®ææ¡ åä½å¾æ 33 å¦ä½ç¾åCheckBox labelï¼forï¼ åid éèåçç input :checked + label 34 伪类å伪å ç´ çåºå« ä¼ªç±»è¡¨ç¶æ 伪å ç´ æ¯ççæå ç´ åè ååå·ï¼åè ååå· 35 base64çä½¿ç¨ ç¨äºåå° HTTP è¯·æ± éç¨äºå°å¾ç base64çä½ç§¯çº¦ä¸ºåå¾ç4/3 36 èªéåºå¸å± æè·¯ï¼å·¦ä¾§æµ®å¨æè ç»å¯¹å®ä½ï¼ç¶åå³ä¾§marginæå¼ 使ç¨divå å«ï¼ç¶åé è´marginå½¢æbfc 使ç¨flex 37 请ç¨Cssåä¸ä¸ªç®åçå¹»ç¯çææé¡µé¢ ç¥éæ¯è¦ç¨css3ã使ç¨animationå¨ç»å®ç°ä¸ä¸ªç®åçå¹»ç¯çææ
/css/ .ani{ width:480px; height:320px; margin:50px auto; overflow: hidden; box-shadow:0 0 5px rgba(0,0,0,1); background-size: cover; background-position: center; -webkit-animation-name: "loops"; -webkit-animation-duration: 20s; -webkit-animation-iteration-count: infinite; } @-webkit-keyframes "loops" { 0% { background:url(http://d.hiphotos.baidu.com/image/w%3D400/sign=c01e6adca964034f0fcdc3069fc27980/e824b899a9014c08e5e38ca4087b02087af4f4d3.jpg) no-repeat;
} 25% { background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=edee1572e9f81a4c2632edc9e72b6029/30adcbef76094b364d72bceba1cc7cd98c109dd0.jpg) no-repeat; } 50% { background:url(http://b.hiphotos.baidu.com/image/w%3D400/sign=937dace2552c11dfded1be2353266255/d8f9d72a6059252d258e7605369b033b5bb5b912.jpg) no-repeat; } 75% { background:url(http://g.hiphotos.baidu.com/image/w%3D400/sign=7d37500b8544ebf86d71653fe9f9d736/0df431adcbef76095d61f0972cdda3cc7cd99e4b.jpg) no-repeat; } 100% { background:url(http://c.hiphotos.baidu.com/image/w%3D400/sign=cfb239ceb0fb43161a1f7b7a10a54642/3b87e950352ac65ce2e73f76f9f2b21192138ad1.jpg) no-repeat; } } 38 ä»ä¹æ¯å¤è¾¹è·éå ï¼éå çç»ææ¯ä»ä¹ï¼ å¤è¾¹è·éå å°±æ¯margin-collapseå¨CSSå½ä¸ï¼ç¸é»ç两个çåï¼å¯è½æ¯å å¼å ³ç³»ä¹å¯è½æ¯ç¥å å ³ç³»ï¼çå¤è¾¹è·å¯ä»¥ç»åæä¸ä¸ªåç¬çå¤è¾¹è·ãè¿ç§åå¹¶å¤è¾¹è·çæ¹å¼è¢«ç§°ä¸ºæå ï¼å¹¶ä¸å èæç»åæçå¤è¾¹è·ç§°ä¸ºæå å¤è¾¹è·ã æå ç»æéµå¾ªä¸å计ç®è§åï¼
两个ç¸é»çå¤è¾¹è·é½æ¯æ£æ°æ¶ï¼æå ç»ææ¯å®ä»¬ä¸¤è ä¹é´è¾å¤§çå¼ã 两个ç¸é»çå¤è¾¹è·é½æ¯è´æ°æ¶ï¼æå ç»ææ¯ä¸¤è ç»å¯¹å¼çè¾å¤§å¼ã 两个å¤è¾¹è·ä¸æ£ä¸è´æ¶ï¼æå ç»ææ¯ä¸¤è çç¸å çåã 39 rgba()åopacityçéææææä»ä¹ä¸åï¼ rgba()åopacityé½è½å®ç°éæææï¼ä½æå¤§çä¸åæ¯opacityä½ç¨äºå ç´ ï¼ä»¥åå ç´ å çææå 容çéæåº¦ï¼ èrgba()åªä½ç¨äºå ç´ çé¢è²æå ¶èæ¯è²ãï¼è®¾ç½®rgbaéæçå ç´ çåå ç´ ä¸ä¼ç»§æ¿éæææï¼ï¼ 40 cssä¸å¯ä»¥è®©æåå¨åç´åæ°´å¹³æ¹åä¸éå çä¸¤ä¸ªå±æ§æ¯ä»ä¹ï¼ åç´æ¹åï¼line-height æ°´å¹³æ¹åï¼letter-spacing 41 å¦ä½åç´å± ä¸ä¸ä¸ªæµ®å¨å ç´ ï¼ /æ¹æ³ä¸ï¼å·²ç¥å ç´ çé«å®½/
#div1{ background-color:#6699FF; width:200px; height:200px;
position: absolute; //ç¶å ç´ éè¦ç¸å¯¹å®ä½ top: 50%; left: 50%; margin-top:-100px ; //äºåä¹ä¸çheightï¼width margin-left: -100px; }
/æ¹æ³äº:/
#div1{ width: 200px; height: 200px; background-color: #6699FF;
margin:auto; position: absolute; //ç¶å ç´ éè¦ç¸å¯¹å®ä½ left: 0; top: 0; right: 0; bottom: 0; } å¦ä½åç´å± ä¸ä¸ä¸ª
?ï¼ç¨æ´ç®ä¾¿çæ¹æ³ãï¼
#container /
ç容å¨è®¾ç½®å¦ä¸/ { display:table-cell; text-align:center; vertical-align:middle; } 42 pxåemçåºå« pxåem齿¯é¿åº¦åä½ï¼åºå«æ¯ï¼pxç弿¯åºå®çï¼æå®æ¯å¤å°å°±æ¯å¤å°ï¼è®¡ç®æ¯è¾å®¹æãemå¾å¼ä¸æ¯åºå®çï¼å¹¶ä¸emä¼ç»§æ¿ç¶çº§å ç´ çåä½å¤§å°ã æµè§å¨çé»è®¤åä½é«é½æ¯16pxãæä»¥æªç»è°æ´çæµè§å¨é½ç¬¦å: 1em=16pxãé£ä¹12px=0.75em, 10px=0.625emã 43 SassãLESSæ¯ä»ä¹ï¼å¤§å®¶ä¸ºä»ä¹è¦ä½¿ç¨ä»ä»¬ï¼ ä»ä»¬æ¯CSSé¢å¤çå¨ã仿¯CSSä¸çä¸ç§æ½è±¡å±ãä»ä»¬æ¯ä¸ç§ç¹æ®çè¯æ³/è¯è¨ç¼è¯æCSSã ä¾å¦Lessæ¯ä¸ç§å¨ææ ·å¼è¯è¨. å°CSSèµäºäºå¨æè¯è¨çç¹æ§ï¼å¦åéï¼ç»§æ¿ï¼è¿ç®ï¼ 彿°. LESS æ¢å¯ä»¥å¨å®¢æ·ç«¯ä¸è¿è¡ (æ¯æIE 6+, Webkit, Firefox)ï¼ä¹å¯ä¸å¨æå¡ç«¯è¿è¡ (åå© Node.js) 为ä»ä¹è¦ä½¿ç¨å®ä»¬ï¼
ç»ææ¸ æ°ï¼ä¾¿äºæ©å±ã å¯ä»¥æ¹ä¾¿å°å±è½æµè§å¨ç§æè¯æ³å·®å¼ãè¿ä¸ªä¸ç¨å¤è¯´ï¼å°è£ 对- æµè§å¨è¯æ³å·®å¼çéå¤å¤çï¼åå°æ æä¹çæºæ¢°å³å¨ã å¯ä»¥è½»æ¾å®ç°å¤éç»§æ¿ã å®å ¨å ¼å®¹ CSS 代ç ï¼å¯ä»¥æ¹ä¾¿å°åºç¨å°è项ç®ä¸ãLESS åª- æ¯å¨ CSS è¯æ³ä¸åäºæ©å±ï¼æä»¥èç CSS 代ç ä¹å¯ä»¥ä¸ LESS 代ç ä¸åç¼è¯ 44 ç¥écssæä¸ªcontent屿§åï¼æä»ä¹ä½ç¨ï¼æä»ä¹åºç¨ï¼ cssçcontent屿§ä¸é¨åºç¨å¨ before/after 伪å ç´ ä¸ï¼ç¨äºæ¥æå ¥çæå 容ãæå¸¸è§çåºç¨æ¯å©ç¨ä¼ªç±»æ¸ 餿µ®å¨ã
/ä¸ç§å¸¸è§å©ç¨ä¼ªç±»æ¸ 餿µ®å¨ç代ç / .clearfix:after { content:"."; //è¿éå©ç¨å°äºcontent屿§ display:block; height:0; visibility:hidden; clear:both; }
.clearfix { *zoom:1; } 45 æ°´å¹³å± ä¸çæ¹æ³ å ç´ ä¸ºè¡å å ç´ ï¼è®¾ç½®ç¶å ç´ text-align:center 妿å ç´ å®½åº¦åºå®ï¼å¯ä»¥è®¾ç½®å·¦å³margin为auto; 妿å ç´ ä¸ºç»å¯¹å®ä½ï¼è®¾ç½®ç¶å ç´ position为relativeï¼å ç´ è®¾left:0;right:0;margin:auto; 使ç¨flex-boxå¸å±ï¼æå®justify-content屿§ä¸ºcenter display设置为tabel-ceil 46 åç´å± ä¸çæ¹æ³ å°æ¾ç¤ºæ¹å¼è®¾ç½®ä¸ºè¡¨æ ¼ï¼display:table-cell,åæ¶è®¾ç½®vertial-alignï¼middle 使ç¨flexå¸å±ï¼è®¾ç½®ä¸ºalign-itemï¼center ç»å¯¹å®ä½ä¸è®¾ç½®bottom:0,top:0,并设置margin:auto ç»å¯¹å®ä½ä¸åºå®é«åº¦æ¶è®¾ç½®top:50%ï¼margin-topå¼ä¸ºé«åº¦ä¸åçè´å¼ ææ¬åç´å± ä¸è®¾ç½®line-height为heightå¼ 47 å¦ä½ä½¿ç¨CSSå®ç°ç¡¬ä»¶å éï¼ ç¡¬ä»¶å 鿝æéè¿å建ç¬ç«çå¤åå¾å±ï¼è®©GPUæ¥æ¸²æè¿ä¸ªå¾å±ï¼ä»èæé«æ§è½ï¼
ä¸è¬è§¦å硬件å éçCSS屿§ætransformãopacityãfilterï¼ä¸ºäºé¿å 2Då¨ç»å¨ å¼å§åç»æçæ¶åçrepaintæä½ï¼ä¸è¬ä½¿ç¨tranform:translateZ(0) 48 éç»ååæµï¼éæï¼æ¯ä»ä¹ï¼å¦ä½é¿å ï¼ DOMçååå½±åå°äºå ç´ çå ä½å±æ§ï¼å®½é«ï¼,æµè§å¨éæ°è®¡ç®å ç´ çå ä½å±æ§ï¼å ¶ä»å ç´ çå ä½ å±æ§åä½ç½®ä¹ä¼åå°å½±åï¼æµè§å¨éè¦éæ°æé æ¸²ææ ï¼è¿ä¸ªè¿ç¨ç§°ä¸ºéæï¼æµè§å¨å°åå°å½±åçé¨å éæ°ç»å¶å°å±å¹ä¸çè¿ç¨ç§°ä¸ºéç»ãå¼èµ·éæçåå æ æ·»å æè å é¤å¯è§çDOMå ç´ ï¼ å ç´ ä½ç½®ã尺寸ãå 容æ¹åï¼ æµè§å¨é¡µé¢åå§åï¼ æµè§å¨çªå£å°ºå¯¸æ¹åï¼éæä¸å®éç»ï¼éç»ä¸ä¸å®éæï¼ åå°éç»åéæçæ¹æ³ï¼
ä¸å¨å¸å±ä¿¡æ¯æ¹åæ¶åDOMæ¥è¯¢ 使ç¨cssTextæè className䏿¬¡æ§æ¹å屿§ 使ç¨fragment 对äºå¤æ¬¡éæçå ç´ ï¼å¦å¨ç»ï¼ä½¿ç¨ç»å¯¹å®ä½è±ç¦»ææ¡£æµï¼è®©ä»çæ¹åä¸å½±åå°å ¶ä»å ç´ 49 说ä¸è¯´css3çanimation css3çanimationæ¯css3æ°å¢çå¨ç»å±æ§ï¼è¿ä¸ªcss3å¨ç»çæ¯ä¸å¸§æ¯éè¿@keyframesæ¥å£°æçï¼keyframes声æäºå¨ç»çåç§°ï¼éè¿fromãtoæè æ¯ç¾åæ¯æ¥å®ä¹ æ¯ä¸å¸§å¨ç»å ç´ çç¶æï¼éè¿animation-nameæ¥å¼ç¨è¿ä¸ªå¨ç»ï¼åæ¶css3å¨ç»ä¹å¯ä»¥å®ä¹å¨ç»è¿è¡çæ¶é¿ãå¨ç»å¼å§æ¶é´ãå¨ç»ææ¾æ¹åãå¨ç»å¾ªç¯æ¬¡æ°ãå¨ç»ææ¾çæ¹å¼ï¼ è¿äºç¸å ³çå¨ç»å屿§æï¼animation-nameå®ä¹å¨ç»åãanimation-durationå®ä¹å¨ç»ææ¾çæ¶é¿ãanimation-delayå®ä¹å¨ç»å»¶è¿ææ¾çæ¶é´ãanimation-directionå®ä¹ å¨ç»çææ¾æ¹åãanimation-iteration-countå®ä¹ææ¾æ¬¡æ°ãanimation-fill-modeå®ä¹å¨ç»ææ¾ä¹åçç¶æãanimation-play-stateå®ä¹ææ¾ç¶æï¼å¦æåè¿è¡çãanimation-timing-function å®ä¹ææ¾çæ¹å¼ï¼å¦æéææ¾ãè°æ¶©ææ¾çã 50 左边宽度åºå®ï¼å³è¾¹èªéåº å·¦ä¾§åºå®å®½åº¦ï¼å³ä¾§èªéåºå®½åº¦ç两åå¸å±å®ç°
htmlç»æ
å¨å¤å±divï¼ç±»å为outerï¼çdivä¸ï¼æä¸¤ä¸ªådivï¼ç±»ååå«ä¸ºleftårightï¼å ¶ä¸left为åºå®å®½åº¦ï¼èright为èªéåºå®½åº¦åºå®å®½åº¦èªéåºå®½åº¦æ¹æ³1ï¼å·¦ä¾§divè®¾ç½®ææµ®å¨ï¼float: leftï¼å³ä¾§div宽度ä¼èªæåéåº
.outer { width: 100%; height: 500px; background-color: yellow; } .left { width: 200px; height: 200px; background-color: red; float: left; } .right { height: 200px; background-color: blue; } æ¹æ³2ï¼å¯¹å³ä¾§:divè¿è¡ç»å¯¹å®ä½ï¼ç¶åå设置right=0ï¼å³å¯ä»¥å®ç°å®½åº¦èªéåº
ç»å¯¹å®ä½å ç´ ç第ä¸ä¸ªé«çº§ç¹æ§å°±æ¯å ¶å ·æèªå¨ä¼¸ç¼©çåè½ï¼å½æä»¬å° width 设置为 auto çæ¶åï¼æè ä¸è®¾ç½®ï¼é»è®¤ä¸º auto ï¼ï¼ç»å¯¹å®ä½å ç´ ä¼æ ¹æ®å ¶ left å right èªå¨ä¼¸ç¼©å ¶å¤§å°
.outer { width: 100%; height: 500px; background-color: yellow; position: relative; } .left { width: 200px; height: 200px; background-color: red; } .right { height: 200px; background-color: blue; position: absolute; left: 200px; top:0;
right: 0; } æ¹æ³3ï¼å°å·¦ä¾§divè¿è¡ç»å¯¹å®ä½ï¼ç¶åå³ä¾§div设置margin-left: 200px.outer { width: 100%; height: 500px; background-color: yellow; position: relative; } .left { width: 200px; height: 200px; background-color: red; position: absolute; } .right { height: 200px; background-color: blue; margin-left: 200px; } æ¹æ³4ï¼ä½¿ç¨flexå¸å±
.outer { width: 100%; height: 500px; background-color: yellow; display: flex; flex-direction: row; } .left { width: 200px; height: 200px; background-color: red; } .right { height: 200px; background-color: blue; flex: 1; } ä¸ãJavaScript 1 éå éå å°±æ¯è½å¤è¯»åå ¶ä»å½æ°å é¨åéç彿°
éå æ¯æææè®¿é®å¦ä¸ä¸ªå½æ°ä½ç¨åä¸åéç彿°ï¼å建éå çæå¸¸è§çæ¹å¼å°±æ¯å¨ä¸ä¸ªå½æ°å å建å¦ä¸ä¸ªå½æ°ï¼éè¿å¦ä¸ä¸ªå½æ°è®¿é®è¿ä¸ªå½æ°çå±é¨åé,å©ç¨éå å¯ä»¥çªç ´ä½ç¨é¾å
éå çç¹æ§ï¼
彿°å ååµå¥å½æ° å é¨å½æ°å¯ä»¥å¼ç¨å¤å±çåæ°ååé åæ°ååéä¸ä¼è¢«åå¾åæ¶æºå¶åæ¶ è¯´è¯´ä½ å¯¹éå ççè§£
使ç¨éå ä¸»è¦æ¯ä¸ºäºè®¾è®¡ç§æçæ¹æ³ååéãéå çä¼ç¹æ¯å¯ä»¥é¿å å ¨å±åéçæ±¡æï¼ç¼ºç¹æ¯éå ä¼å¸¸é©»å åï¼ä¼å¢å¤§å å使ç¨éï¼ä½¿ç¨ä¸å½å¾å®¹æé æå åæ³é²ãå¨jsä¸ï¼å½æ°å³éå ï¼åªæå½æ°æä¼äº§çä½ç¨åçæ¦å¿µ
éå çæå¤§ç¨å¤æä¸¤ä¸ªï¼ä¸ä¸ªæ¯å¯ä»¥è¯»å彿°å é¨çåéï¼å¦ä¸ä¸ªå°±æ¯è®©è¿äºåéå§ç»ä¿æå¨å åä¸
éå çå¦ä¸ä¸ªç¨å¤ï¼æ¯å°è£ 对象çç§æå±æ§åç§ææ¹æ³
好å¤ï¼è½å¤å®ç°å°è£ åç¼åçï¼
åå¤ï¼å°±æ¯æ¶èå åã䏿£å½ä½¿ç¨ä¼é æå åæº¢åºçé®é¢
使ç¨éå çæ³¨æç¹
ç±äºéå ä¼ä½¿å¾å½æ°ä¸çåéé½è¢«ä¿åå¨å åä¸ï¼å åæ¶èå¾å¤§ï¼æä»¥ä¸è½æ»¥ç¨éå ï¼å¦åä¼é æç½é¡µçæ§è½é®é¢ï¼å¨IEä¸å¯è½å¯¼è´å åæ³é² è§£å³æ¹æ³æ¯ï¼å¨éåºå½æ°ä¹åï¼å°ä¸ä½¿ç¨çå±é¨åéå ¨é¨å é¤ 2 è¯´è¯´ä½ å¯¹ä½ç¨åé¾ççè§£ ä½ç¨åé¾çä½ç¨æ¯ä¿è¯æ§è¡ç¯å¢éææè®¿é®çåéå彿°æ¯æåºçï¼ä½ç¨åé¾çåéåªè½åä¸è®¿é®ï¼åé访é®å°window对象å³è¢«ç»æ¢ï¼ä½ç¨åé¾åä¸è®¿é®å鿝ä¸è¢«å 许ç ç®åç说ï¼ä½ç¨åå°±æ¯åéä¸å½æ°çå¯è®¿é®èå´ï¼å³ä½ç¨åæ§å¶çåéä¸å½æ°çå¯è§æ§åçå½å¨æ 3 JavaScriptååï¼ååé¾ ? æä»ä¹ç¹ç¹ï¼ æ¯ä¸ªå¯¹è±¡é½ä¼å¨å ¶å é¨åå§åä¸ä¸ªå±æ§ï¼å°±æ¯prototype(åå)ï¼å½æä»¬è®¿é®ä¸ä¸ªå¯¹è±¡ç屿§æ¶
妿è¿ä¸ªå¯¹è±¡å é¨ä¸åå¨è¿ä¸ªå±æ§ï¼é£ä¹ä»å°±ä¼å»prototypeéæ¾è¿ä¸ªå±æ§ï¼è¿ä¸ªprototypeå伿èªå·±çprototypeï¼äºæ¯å°±è¿æ ·ä¸ç´æ¾ä¸å»ï¼ä¹å°±æ¯æä»¬å¹³æ¶æè¯´çååé¾çæ¦å¿µ
å ³ç³»ï¼instance.constructor.prototype = instance.proto
ç¹ç¹ï¼
JavaScript对象æ¯éè¿å¼ç¨æ¥ä¼ éçï¼æä»¬åå»ºçæ¯ä¸ªæ°å¯¹è±¡å®ä½ä¸å¹¶æ²¡æä¸ä»½å±äºèªå·±çåå坿¬ãå½æä»¬ä¿®æ¹ååæ¶ï¼ä¸ä¹ç¸å ³ç对象ä¹ä¼ç»§æ¿è¿ä¸æ¹å 彿们éè¦ä¸ä¸ªå±æ§çæ¶ï¼Javascript弿ä¼å çå½åå¯¹è±¡ä¸æ¯å¦æè¿ä¸ªå±æ§ï¼ å¦ææ²¡æç
就伿¥æ¾ä»çPrototype对象æ¯å¦æè¿ä¸ªå±æ§ï¼å¦æ¤éæ¨ä¸å»ï¼ä¸ç´æ£ç´¢å° Object å 建对象
4 请解éä»ä¹æ¯äºä»¶ä»£ç äºä»¶ä»£çï¼Event Delegationï¼ï¼åç§°ä¹ä¸ºäºä»¶å§æãæ¯ JavaScript ä¸å¸¸ç¨ç»å®äºä»¶çå¸¸ç¨æå·§ã顾åæä¹ï¼âäºä»¶ä»£çâ峿¯æåæ¬éè¦ç»å®çäºä»¶å§æç»ç¶å ç´ ï¼è®©ç¶å ç´ æ å½äºä»¶çå¬çèå¡ãäºä»¶ä»£ççåçæ¯DOMå ç´ çäºä»¶å泡ã使ç¨äºä»¶ä»£çç好夿¯å¯ä»¥æé«æ§è½ å¯ä»¥å¤§éèçå åå ç¨ï¼åå°äºä»¶æ³¨åï¼æ¯å¦å¨tableä¸ä»£çæætdçclickäºä»¶å°±éå¸¸æ£ å¯ä»¥å®ç°å½æ°å¢åå¯¹è±¡æ¶æ é忬¡å¯¹å ¶ç»å® 5 Javascriptå¦ä½å®ç°ç»§æ¿ï¼ æé ç»§æ¿
ååç»§æ¿
å®ä¾ç»§æ¿
æ·è´ç»§æ¿
ååprototypeæºå¶æapplyåcallæ¹æ³å»å®ç°è¾ç®åï¼å»ºè®®ä½¿ç¨æé 彿°ä¸ååæ··åæ¹å¼
function Parent(){ this.name = 'wang'; }
function Child(){ this.age = 28; } Child.prototype = new Parent();//ç»§æ¿äºParentï¼éè¿åå var demo = new Child(); alert(demo.age); alert(demo.name);//å¾å°è¢«ç»§æ¿ç屿§} 6 è°è°This对象ççè§£ thisæ»æ¯æå彿°çç´æ¥è°ç¨è ï¼èéé´æ¥è°ç¨è ï¼ å¦æænewå ³é®åï¼thisæånewåºæ¥çé£ä¸ªå¯¹è±¡ å¨äºä»¶ä¸ï¼thisæå触åè¿ä¸ªäºä»¶ç对象ï¼ç¹æ®çæ¯ï¼IEä¸çattachEventä¸çthisæ»æ¯æåå ¨å±å¯¹è±¡Window 7 äºä»¶æ¨¡å W3Cä¸å®ä¹äºä»¶çåçç»åä¸ä¸ªé¶æ®µï¼æè·é¶æ®µï¼capturingï¼ãç®æ é¶æ®µï¼targetinï¼ãåæ³¡é¶æ®µï¼bubblingï¼
åæ³¡åäºä»¶ï¼å½ä½ 使ç¨äºä»¶å泡æ¶ï¼å级å ç´ å 触åï¼ç¶çº§å ç´ åè§¦å æè·åäºä»¶ï¼å½ä½ 使ç¨äºä»¶æè·æ¶ï¼ç¶çº§å ç´ å 触åï¼å级å ç´ å触å DOMäºä»¶æµï¼åæ¶æ¯æä¸¤ç§äºä»¶æ¨¡åï¼æè·åäºä»¶ååæ³¡åäºä»¶ 黿¢å泡ï¼å¨W3cä¸ï¼ä½¿ç¨stopPropagationï¼ï¼æ¹æ³ï¼å¨IEä¸è®¾ç½®cancelBubble = true 黿¢æè·ï¼é»æ¢äºä»¶çé»è®¤è¡ä¸ºï¼ä¾å¦click - åç跳转ãå¨W3cä¸ï¼ä½¿ç¨preventDefaultï¼ï¼æ¹æ³ï¼å¨IEä¸è®¾ç½®window.event.returnValue = false 8 newæä½ç¬¦å ·ä½å¹²äºä»ä¹å¢? å建ä¸ä¸ªç©ºå¯¹è±¡ï¼å¹¶ä¸ this åéå¼ç¨è¯¥å¯¹è±¡ï¼åæ¶è¿ç»§æ¿äºè¯¥å½æ°çåå 屿§åæ¹æ³è¢«å å ¥å° this å¼ç¨çå¯¹è±¡ä¸ æ°å建çå¯¹è±¡ç± this æå¼ç¨ï¼å¹¶ä¸æåéå¼çè¿å this 9 Ajaxåç Ajaxçåçç®åæ¥è¯´æ¯å¨ç¨æ·åæå¡å¨ä¹é´å äºâ个ä¸é´å±(AJAX弿)ï¼éè¿XmlHttpRequest对象æ¥åæå¡å¨å弿¥è¯·æ±ï¼ä»æå¡å¨è·å¾æ°æ®ï¼ç¶åç¨javascriptæ¥æä½DOMèæ´æ°é¡µé¢ãä½¿ç¨æ·æä½ä¸æå¡å¨ååºå¼æ¥åãè¿å ¶ä¸æå ³é®ç䏿¥å°±æ¯ä»æå¡å¨è·å¾è¯·æ±æ°æ® Ajaxçè¿ç¨åªæ¶åJavaScriptãXMLHttpRequeståDOMãXMLHttpRequestæ¯ajaxçæ ¸å¿æºå¶ // 1. åå»ºè¿æ¥ var xhr = null; xhr = new XMLHttpRequest() // 2. è¿æ¥æå¡å¨ xhr.open('get', url, true) // 3. åéè¯·æ± xhr.send(null); // 4. æ¥åè¯·æ± xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ if(xhr.status == 200){ success(xhr.responseText); } else { // fail fail && fail(xhr.status); } } } ajax æé£äºä¼ç¼ºç¹?
ä¼ç¹ï¼ éè¿å¼æ¥æ¨¡å¼ï¼æåäºç¨æ·ä½éª. ä¼åäºæµè§å¨åæå¡å¨ä¹é´çä¼ è¾ï¼åå°ä¸å¿ è¦çæ°æ®å¾è¿ï¼åå°äºå¸¦å®½å ç¨. Ajaxå¨å®¢æ·ç«¯è¿è¡ï¼æ¿æ äºä¸é¨åæ¬æ¥ç±æå¡å¨æ¿æ çå·¥ä½ï¼åå°äºå¤§ç¨æ·éä¸çæå¡å¨è´è½½ã Ajaxå¯ä»¥å®ç°å¨æä¸å·æ°ï¼å±é¨å·æ°ï¼ 缺ç¹ï¼ å®å ¨é®é¢ AJAXæ´é²äºä¸æå¡å¨äº¤äºçç»èã 对æç´¢å¼æçæ¯ææ¯è¾å¼±ã ä¸å®¹æè°è¯ã 10 å¦ä½è§£å³è·¨åé®é¢? é¦å äºè§£ä¸æµè§å¨çåæºçç¥ åæºçç¥/SOPï¼Same origin policyï¼æ¯ä¸ç§çº¦å®ï¼ç±Netscapeå ¬å¸1995å¹´å¼å ¥æµè§å¨ï¼å®æ¯æµè§å¨ææ ¸å¿ä¹æåºæ¬çå®å ¨åè½ï¼å¦æç¼ºå°äºåæºçç¥ï¼æµè§å¨å¾å®¹æåå°XSSãCSFRçæ»å»ãæè°åæºæ¯æ"åè®®+åå+端å£"ä¸è ç¸åï¼å³ä¾¿ä¸¤ä¸ªä¸åçååæååä¸ä¸ªipå°åï¼ä¹éåæº
é£ä¹ææ ·è§£å³è·¨åé®é¢çå¢ï¼
éè¿jsonpè·¨å var script = document.createElement('script'); script.type = 'text/javascript';
// ä¼ åå¹¶æå®åè°æ§è¡å½æ°ä¸ºonBack script.src = 'http://www.....:8080/login?user=admin&callback=onBack'; document.head.appendChild(script);
// åè°æ§è¡å½æ° function onBack(res) { alert(JSON.stringify(res)); } document.domain + iframeè·¨å æ¤æ¹æ¡ä» é主åç¸åï¼ååä¸åçè·¨ååºç¨åºæ¯
1.ï¼ç¶çªå£ï¼(http://www.domain.com/a.html)
2.ï¼åçªå£ï¼(http://child.domain.com/b.html)document.domain = 'domain.com'; // è·åç¶çªå£ä¸åé alert('get js data from parent ---> ' + window.parent.user); nginx代çè·¨å nodejsä¸é´ä»¶ä»£çè·¨å å端å¨å¤´é¨ä¿¡æ¯éé¢è®¾ç½®å®å ¨åå 11 模ååå¼åæä¹åï¼ ç«å³æ§è¡å½æ°,䏿´é²ç§ææå var module1 = (function(){ ããããvar _count = 0; ããããvar m1 = function(){ ãããããã//... ãããã}; ããããvar m2 = function(){ ãããããã//... ãããã}; ããããreturn { ããããããm1 : m1, ããããããm2 : m2 ãããã}; ãã})(); 12 弿¥å è½½JSçæ¹å¼æåªäºï¼ deferï¼åªæ¯æIE asyncï¼ å建scriptï¼æå ¥å°DOMä¸ï¼å è½½å®æ¯åcallBack 13 é£äºæä½ä¼é æå åæ³æ¼ï¼ å åæ³æ¼æä»»ä½å¯¹è±¡å¨æ¨ä¸åæ¥ææéè¦å®ä¹åä»ç¶åå¨ setTimeout ç第ä¸ä¸ªåæ°ä½¿ç¨å符串èé彿°çè¯ï¼ä¼å¼åå åæ³æ¼ éå 使ç¨ä¸å½ 14 XMLåJSONçåºå«ï¼ æ°æ®ä½ç§¯æ¹é¢
JSONç¸å¯¹äºXMLæ¥è®²ï¼æ°æ®çä½ç§¯å°ï¼ä¼ éçé度æ´å¿«äºã æ°æ®äº¤äºæ¹é¢
JSONä¸JavaScriptçäº¤äºæ´å æ¹ä¾¿ï¼æ´å®¹æè§£æå¤çï¼æ´å¥½çæ°æ®äº¤äº æ°æ®æè¿°æ¹é¢
JSONå¯¹æ°æ®çæè¿°æ§æ¯XMLè¾å·® ä¼ è¾é度æ¹é¢
JSONçé度è¦è¿è¿å¿«äºXML 15 è°è°ä½ 对webpackççæ³ WebPack æ¯ä¸ä¸ªæ¨¡åæå å·¥å ·ï¼ä½ å¯ä»¥ä½¿ç¨WebPack管çä½ çæ¨¡åä¾èµï¼å¹¶ç¼ç»è¾åºæ¨¡å们æéçéææä»¶ãå®è½å¤å¾å¥½å°ç®¡çãæå Webå¼å䏿ç¨å°çHTMLãJavascriptãCSS以ååç§éææä»¶ï¼å¾çãåä½çï¼ï¼è®©å¼åè¿ç¨æ´å 髿ã对äºä¸åç±»åçèµæºï¼webpackæå¯¹åºç模åå è½½å¨ãwebpack模åæå å¨ä¼åææ¨¡åé´çä¾èµå ³ç³»ï¼æå çæäºä¼åä¸åå¹¶åçéæèµæº 16 è¯´è¯´ä½ å¯¹AMDåCommonjsççè§£ CommonJSæ¯æå¡å¨ç«¯æ¨¡åçè§èï¼Node.jséç¨äºè¿ä¸ªè§èãCommonJSè§èå è½½æ¨¡åæ¯åæ¥çï¼ä¹å°±æ¯è¯´ï¼åªæå è½½å®æï¼æè½æ§è¡åé¢çæä½ãAMDè§è忝é忥å 载模åï¼å 许æå®åè°å½æ° AMDæ¨èç飿 ¼éè¿è¿åä¸ä¸ªå¯¹è±¡å为模å对象ï¼CommonJSç飿 ¼éè¿å¯¹module.exportsæexportsç屿§èµå¼æ¥è¾¾å°æ´é²æ¨¡å对象çç®ç 17 常è§webå®å ¨å鲿¤åç sqlæ³¨å ¥åç
å°±æ¯éè¿æSQLå½ä»¤æå ¥å°Web表åé交æè¾å ¥ååæé¡µé¢è¯·æ±çæ¥è¯¢åç¬¦ä¸²ï¼æç»è¾¾å°æ¬ºéªæå¡å¨æ§è¡æ¶æçSQLå½ä»¤ æ»çæ¥è¯´æä»¥ä¸å ç¹
æ°¸è¿ä¸è¦ä¿¡ä»»ç¨æ·çè¾å ¥ï¼è¦å¯¹ç¨æ·çè¾å ¥è¿è¡æ ¡éªï¼å¯ä»¥éè¿æ£å表达å¼ï¼æéå¶é¿åº¦ï¼å¯¹åå¼å·åå"-"è¿è¡è½¬æ¢ç æ°¸è¿ä¸è¦ä½¿ç¨å¨ææ¼è£ SQLï¼å¯ä»¥ä½¿ç¨åæ°åçSQLæè ç´æ¥ä½¿ç¨åå¨è¿ç¨è¿è¡æ°æ®æ¥è¯¢åå æ°¸è¿ä¸è¦ä½¿ç¨ç®¡çåæéçæ°æ®åºè¿æ¥ï¼ä¸ºæ¯ä¸ªåºç¨ä½¿ç¨åç¬çæéæéçæ°æ®åºè¿æ¥ ä¸è¦ææºå¯ä¿¡æ¯ææåæ¾ï¼è¯·å 坿è hashæå¯ç åææçä¿¡æ¯ XSSåçåé²è
Xss(cross-site scripting)æ»å»æçæ¯æ»å»è å¾Web页é¢éæå ¥æ¶æhtmlæ ç¾æè javascript代ç ãæ¯å¦ï¼æ»å»è å¨è®ºå䏿¾ä¸ä¸ªçä¼¼å®å ¨ç龿¥ï¼éªåç¨æ·ç¹å»åï¼çªåcookieä¸çç¨æ·ç§å¯ä¿¡æ¯ï¼æè æ»å»è å¨è®ºåä¸å ä¸ä¸ªæ¶æè¡¨åï¼å½ç¨æ·æäº¤è¡¨åçæ¶åï¼å´æä¿¡æ¯ä¼ éå°æ»å»è çæå¡å¨ä¸ï¼è䏿¯ç¨æ·åæ¬ä»¥ä¸ºçä¿¡ä»»ç«ç¹ XSSé²èæ¹æ³
é¦å 代ç éå¯¹ç¨æ·è¾å ¥çå°æ¹ååéé½éè¦ä»ç»æ£æ¥é¿åº¦å对â<â,â>â,â;â,âââçå符åè¿æ»¤ï¼å ¶æ¬¡ä»»ä½å 容åå°é¡µé¢ä¹åé½å¿ é¡»å 以encodeï¼é¿å ä¸å°å¿æhtml tag å¼åºæ¥ãè¿ä¸ä¸ªå±é¢å好ï¼è³å°å¯ä»¥å µä½è¶ è¿ä¸åçXSS æ»å» XSSä¸CSRFæä»ä¹åºå«åï¼
XSSæ¯è·åä¿¡æ¯ï¼ä¸éè¦æåç¥éå ¶ä»ç¨æ·é¡µé¢ç代ç åæ°æ®å ãCSRFæ¯ä»£æ¿ç¨æ·å®ææå®çå¨ä½ï¼éè¦ç¥éå ¶ä»ç¨æ·é¡µé¢ç代ç åæ°æ®å ãè¦å®æä¸æ¬¡CSRFæ»å»ï¼å害è å¿ é¡»ä¾æ¬¡å®æä¸¤ä¸ªæ¥éª¤
ç»å½åä¿¡ä»»ç½ç«Aï¼å¹¶å¨æ¬å°çæCookie
å¨ä¸ç»åºAçæ åµä¸ï¼è®¿é®å±é©ç½ç«B
CSRFçé²å¾¡
æå¡ç«¯çCSRFæ¹å¼æ¹æ³å¾å¤æ ·ï¼ä½æ»çææ³é½æ¯ä¸è´çï¼å°±æ¯å¨å®¢æ·ç«¯é¡µé¢å¢å ä¼ªéæºæ° éè¿éªè¯ç çæ¹æ³ 18 ç¨è¿åªäºè®¾è®¡æ¨¡å¼ï¼ 工忍¡å¼ï¼
工忍¡å¼è§£å³äºéå¤å®ä¾åçé®é¢ï¼ä½è¿æä¸ä¸ªé®é¢,é£å°±æ¯è¯å«é®é¢ï¼å ä¸ºæ ¹æ¬æ æ³ ä¸»è¦å¥½å¤å°±æ¯å¯ä»¥æ¶é¤å¯¹è±¡é´çè¦åï¼éè¿ä½¿ç¨å·¥ç¨æ¹æ³è䏿¯newå ³é®å æé 彿°æ¨¡å¼
ä½¿ç¨æé 彿°çæ¹æ³ï¼å³è§£å³äºéå¤å®ä¾åçé®é¢ï¼åè§£å³äºå¯¹è±¡è¯å«çé®é¢ï¼è¯¥æ¨¡å¼ä¸å·¥å模å¼çä¸åä¹å¤å¨äº ç´æ¥å°å±æ§åæ¹æ³èµå¼ç» this 对象; 19 为ä»ä¹è¦æåæºéå¶ï¼ åæºçç¥æçæ¯ï¼åè®®ï¼ååï¼ç«¯å£ç¸åï¼åæºçç¥æ¯ä¸ç§å®å ¨åè®® 举ä¾è¯´æï¼æ¯å¦ä¸ä¸ªé»å®¢ç¨åºï¼ä»å©ç¨Iframeæçæ£çé¶è¡ç»å½é¡µé¢åµå°ä»ç页é¢ä¸ï¼å½ä½ 使ç¨çå®çç¨æ·åï¼å¯ç ç»å½æ¶ï¼ä»ç页é¢å°±å¯ä»¥éè¿Javascript读åå°ä½ ç表åä¸inputä¸çå 容ï¼è¿æ ·ç¨æ·åï¼å¯ç 就轻æ¾å°æäºã 20 offsetWidth/offsetHeight,clientWidth/clientHeightä¸scrollWidth/scrollHeightçåºå« offsetWidth/offsetHeightè¿åå¼å å«content + padding + borderï¼ææä¸e.getBoundingClientRect()ç¸å clientWidth/clientHeightè¿åå¼åªå å«content + paddingï¼å¦æææ»å¨æ¡ï¼ä¹ä¸å 嫿»å¨æ¡ scrollWidth/scrollHeightè¿åå¼å å«content + padding + 溢åºå 容ç尺寸 21 javascriptæåªäºæ¹æ³å®ä¹å¯¹è±¡ 对象åé¢éï¼ var obj = {}; æé 彿°ï¼ var obj = new Object(); Object.create(): var obj = Object.create(Object.prototype); 22 常è§å ¼å®¹æ§é®é¢ï¼ png24ä½çå¾çå¨iE6æµè§å¨ä¸åºç°èæ¯ï¼è§£å³æ¹æ¡æ¯åæPNG8 æµè§å¨é»è®¤çmarginåpaddingä¸åãè§£å³æ¹æ¡æ¯å ä¸ä¸ªå ¨å±ç*{margin:0;padding:0;}æ¥ç»ä¸,ï¼ä½æ¯å ¨å±æçå¾ä½ï¼ä¸è¬æ¯å¦ä¸è¿æ ·è§£å³ï¼ body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{ margin:0; padding:0; } IEä¸,event对象æx,y屿§,使¯æ²¡æpageX,pageY屿§ Firefoxä¸,event对象æpageX,pageY屿§,使¯æ²¡æx,y屿§. 23 è¯´è¯´ä½ å¯¹promiseçäºè§£ ä¾ç § Promise/A+ çå®ä¹ï¼Promise æåç§ç¶æï¼
pending: åå§ç¶æ, é fulfilled æ rejected.
fulfilled: æåçæä½.
rejected: 失败çæä½.
settled: Promise已被fulfilledærejectedï¼ä¸ä¸æ¯pending
å¦å¤ï¼ fulfilled ä¸ rejected ä¸èµ·åç§° settled
Promise å¯¹è±¡ç¨æ¥è¿è¡å»¶è¿(deferred) å弿¥(asynchronous ) 计ç®
Promise çæé 彿°
æé ä¸ä¸ª Promiseï¼æåºæ¬çç¨æ³å¦ä¸ï¼ var promise = new Promise(function(resolve, reject) {
if (...) { // succeed resolve(result); } else { // fails reject(Error(errMessage)); } });Promise å®ä¾æ¥æ then æ¹æ³ï¼å ·æ then æ¹æ³ç对象ï¼é常被称为thenableï¼ãå®çä½¿ç¨æ¹æ³å¦ä¸ï¼ promise.then(onFulfilled, onRejected) æ¥æ¶ä¸¤ä¸ªå½æ°ä½ä¸ºåæ°ï¼ä¸ä¸ªå¨ fulfilled çæ¶å被è°ç¨ï¼ä¸ä¸ªå¨rejectedçæ¶å被è°ç¨ï¼æ¥æ¶åæ°å°±æ¯ futureï¼onFulfilled å¯¹åº resolve, onRejected å¯¹åº reject 24 ä½ è§å¾jQueryæºç æåªäºåç好çå°æ¹ jqueryæºç å°è£ å¨ä¸ä¸ªå¿å彿°çèªæ§è¡ç¯å¢ä¸ï¼æå©äºé²æ¢åéçå ¨å±æ±¡æï¼ç¶åéè¿ä¼ å ¥windowå¯¹è±¡åæ°ï¼å¯ä»¥ä½¿window对象ä½ä¸ºå±é¨åé使ç¨ï¼å¥½å¤æ¯å½jqueryä¸è®¿é®windowå¯¹è±¡çæ¶åï¼å°±ä¸ç¨å°ä½ç¨åé¾éåå°é¡¶å±ä½ç¨åäºï¼ä»èå¯ä»¥æ´å¿«ç访é®window对象ãåæ ·ï¼ä¼ å ¥undefinedåæ°ï¼å¯ä»¥ç¼©çæ¥æ¾undefinedæ¶çä½ç¨åé¾ jqueryå°ä¸äºåå屿§åæ¹æ³å°è£ å¨äºjquery.prototypeä¸ï¼ä¸ºäºç¼©çåç§°ï¼åèµå¼ç»äºjquery.fnï¼è¿æ¯å¾å½¢è±¡çåæ³ æä¸äºæ°ç»æå¯¹è±¡çæ¹æ³ç»å¸¸è½ä½¿ç¨å°ï¼jQueryå°å ¶ä¿å为å±é¨åé以æé«è®¿é®é度 jqueryå®ç°çé¾å¼è°ç¨å¯ä»¥è约代ç ï¼æè¿åç齿¯åä¸ä¸ªå¯¹è±¡ï¼å¯ä»¥æé«ä»£ç æç 25 vueãreactãangular Vue.js ä¸ä¸ªç¨äºå建 web 交äºçé¢çåºï¼æ¯ä¸ä¸ªç²¾ç®ç MVVMãå®éè¿ååæ°æ®ç»å®æ View å±å Model å±è¿æ¥äºèµ·æ¥ãå®é ç DOM å°è£ åè¾åºæ ¼å¼é½è¢«æ½è±¡ä¸ºäºDirectives å Filters
AngularJS æ¯ä¸ä¸ªæ¯è¾å®åçå端MVVMæ¡æ¶ï¼å 嫿¨¡æ¿ï¼æ°æ®ååç»å®ï¼è·¯ç±ï¼æ¨¡ååï¼æå¡ï¼ä¾èµæ³¨å ¥çææåè½ï¼æ¨¡æ¿åè½å¼ºå¤§ä¸°å¯ï¼èªå¸¦äºä¸°å¯ç Angular æä»¤
react React ä» ä» æ¯ VIEW 屿¯facebookå ¬å¸ãæ¨åºçä¸ä¸ªç¨äºæå»ºUIçä¸ä¸ªåºï¼è½å¤å®ç°æå¡å¨ç«¯ç渲æãç¨äºvirtual domï¼æä»¥æ§è½å¾å¥½ã
26 Nodeçåºç¨åºæ¯ ç¹ç¹ï¼
1ã宿¯ä¸ä¸ªJavascriptè¿è¡ç¯å¢ 2ãä¾èµäºChrome V8弿è¿è¡ä»£ç è§£é 3ãäºä»¶é©±å¨ 4ãéé»å¡I/O 5ãåè¿ç¨ï¼åçº¿ç¨ ä¼ç¹ï¼
é«å¹¶åï¼æéè¦çä¼ç¹ï¼ 缺ç¹ï¼
1ãåªæ¯æåæ ¸CPUï¼ä¸è½å åå©ç¨CPU 2ãå¯é æ§ä½ï¼ä¸æ¦ä»£ç æä¸ªç¯èå´©æºï¼æ´ä¸ªç³»ç»é½å´©æº 27 è°è°ä½ 对AMDãCMDççè§£ CommonJSæ¯æå¡å¨ç«¯æ¨¡åçè§èï¼Node.jséç¨äºè¿ä¸ªè§èãCommonJSè§èå è½½æ¨¡åæ¯åæ¥çï¼ä¹å°±æ¯è¯´ï¼åªæå è½½å®æï¼æè½æ§è¡åé¢çæä½ãAMDè§è忝é忥å 载模åï¼å 许æå®åè°å½æ°
AMDæ¨èç飿 ¼éè¿è¿åä¸ä¸ªå¯¹è±¡å为模å对象ï¼CommonJSç飿 ¼éè¿å¯¹module.exportsæexportsç屿§èµå¼æ¥è¾¾å°æ´é²æ¨¡å对象çç®ç
es6模å commonjs amd cmd
CommonJS çè§èä¸ï¼æ¯ä¸ª JavaScript æä»¶å°±æ¯ä¸ä¸ªç¬ç«ç模åä¸ä¸æï¼module contextï¼ï¼å¨è¿ä¸ªä¸ä¸æä¸é»è®¤å建ç屿§é½æ¯ç§æçãä¹å°±æ¯è¯´ï¼å¨ä¸ä¸ªæä»¶å®ä¹çåéï¼è¿å æ¬å½æ°åç±»ï¼ï¼é½æ¯ç§æçï¼å¯¹å ¶ä»æä»¶æ¯ä¸å¯è§çã CommonJSæ¯åæ¥å 载模å,卿µè§å¨ä¸ä¼åºç°å µå¡æ åµï¼æä»¥ä¸éç¨ AMD 弿¥ï¼éè¦å®ä¹åè°defineæ¹å¼ es6 ä¸ä¸ªæ¨¡åå°±æ¯ä¸ä¸ªç¬ç«çæä»¶ï¼è¯¥æä»¶å é¨çææåéï¼å¤é¨æ æ³è·åãå¦æä½ å¸æå¤é¨è½å¤è¯»å模åå é¨çæä¸ªåéï¼å°±å¿ 须使ç¨exportå ³é®åè¾åºè¯¥åé es6è¿å¯ä»¥å¯¼åºç±»ãæ¹æ³ï¼èªå¨éç¨ä¸¥æ ¼æ¨¡å¼ 28 é£äºæä½ä¼é æå åæ³æ¼ å åæ³æ¼æä»»ä½å¯¹è±¡å¨æ¨ä¸åæ¥ææéè¦å®ä¹åä»ç¶åå¨ setTimeout ç第ä¸ä¸ªåæ°ä½¿ç¨å符串èé彿°çè¯ï¼ä¼å¼åå åæ³æ¼ éå ãæ§å¶å°æ¥å¿ã循ç¯ï¼å¨ä¸¤ä¸ªå¯¹è±¡å½¼æ¤å¼ç¨ä¸å½¼æ¤ä¿çæ¶ï¼å°±ä¼äº§çä¸ä¸ªå¾ªç¯ï¼ 29 webå¼åä¸ä¼è¯è·è¸ªçæ¹æ³æåªäº cookie session urléå éèinput ipå°å 30 ä»ç»jsçåºæ¬æ°æ®ç±»å UndefinedãNullãBooleanãNumberãString 31 ä»ç»jsæåªäºå 置对象 Object æ¯ JavaScript 䏿æå¯¹è±¡çç¶å¯¹è±¡ æ°æ®å°è£ 类对象ï¼ObjectãArrayãBooleanãNumber å String å ¶ä»å¯¹è±¡ï¼FunctionãArgumentsãMathãDateãRegExpãError 32 è¯´å æ¡åJavaScriptçåºæ¬è§è ä¸è¦å¨åä¸è¡å£°æå¤ä¸ªåé è¯·ä½¿ç¨ ===/!==æ¥æ¯è¾true/falseæè æ°å¼ 使ç¨å¯¹è±¡åé¢éæ¿ä»£new Arrayè¿ç§å½¢å¼ ä¸è¦ä½¿ç¨å ¨å±å½æ° Switchè¯å¥å¿ 须带ædefault忝 Ifè¯å¥å¿ 须使ç¨å¤§æ¬å· for-in循ç¯ä¸çåé åºè¯¥ä½¿ç¨varå ³é®åæç¡®éå®ä½ç¨åï¼ä»èé¿å ä½ç¨å污 33 JavaScriptæå ç§ç±»åçå¼ æ ï¼åå§æ°æ®ç±»åï¼Undefinedï¼Nullï¼Booleanï¼NumberãStringï¼ å ï¼å¼ç¨æ°æ®ç±»åï¼å¯¹è±¡ãæ°ç»å彿°ï¼ 两ç§ç±»åçåºå«æ¯ï¼åå¨ä½ç½®ä¸åï¼ åå§æ°æ®ç±»åç´æ¥åå¨å¨æ (stack)ä¸çç®åæ°æ®æ®µï¼å æ®ç©ºé´å°ã大å°åºå®ï¼å±äºè¢«é¢ç¹ä½¿ç¨æ°æ®ï¼æä»¥æ¾å ¥æ ä¸åå¨ï¼ å¼ç¨æ°æ®ç±»ååå¨å¨å (heap)ä¸ç对象,å æ®ç©ºé´å¤§ã大å°ä¸åºå®,妿åå¨å¨æ ä¸ï¼å°ä¼å½±åç¨åºè¿è¡çæ§è½ï¼å¼ç¨æ°æ®ç±»å卿 ä¸åå¨äºæéï¼è¯¥æéæåå ä¸è¯¥å®ä½çèµ·å§å°åãå½è§£éå¨å¯»æ¾å¼ç¨å¼æ¶ï¼ä¼é¦å æ£ç´¢å ¶ 卿 ä¸çå°åï¼åå¾å°ååä»å ä¸è·å¾å®ä½
34 javascriptå建对象çå ç§æ¹å¼ javascriptå建对象ç®åç说,æ éå°±æ¯ä½¿ç¨å 置对象æåç§èªå®ä¹å¯¹è±¡ï¼å½ç¶è¿å¯ä»¥ç¨JSONï¼ä½åæ³æå¾å¤ç§ï¼ä¹è½æ··å使ç¨
对象åé¢éçæ¹å¼ person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"}; ç¨functionæ¥æ¨¡ææ åçæé 彿° function Person(){} var person=new Person();//å®ä¹ä¸ä¸ªfunctionï¼å¦æä½¿ç¨new"å®ä¾å",该functionå¯ä»¥ç使¯ä¸ä¸ªClass person.name="Mark"; person.age="25"; person.work=function(){ alert(person.name+" hello..."); } person.work(); ç¨functionæ¥æ¨¡æåæé 彿°æ¥å®ç°ï¼ç¨thiså ³é®åå®ä¹æé çä¸ä¸æå±æ§ï¼ function Pet(name,age,hobby){ this.name=name;//thisä½ç¨åï¼å½å对象 this.age=age; this.hobby=hobby; this.eat=function(){ alert("æå«"+this.name+",æå欢"+this.hobby+",æ¯ä¸ªç¨åºå"); } } var maidou =new Pet("麦å ",25,"coding");//å®ä¾åãå建对象 maidou.eat();//è°ç¨eatæ¹æ³ ç¨å·¥åæ¹å¼æ¥å建ï¼å ç½®å¯¹è±¡ï¼ var wcDog =new Object(); wcDog.name="æºè´¢"; wcDog.age=3; wcDog.work=function(){ alert("ææ¯"+wcDog.name+",汪汪汪......"); } wcDog.work(); ç¨å忹弿¥å建 function Dog(){
} Dog.prototype.name="æºè´¢"; Dog.prototype.eat=function(){ alert(this.name+"æ¯ä¸ªåè´§"); } var wangcai =new Dog(); wangcai.eat();ç¨æ··åæ¹å¼æ¥å建 function Car(name,price){ this.name=name; this.price=price; } Car.prototype.sell=function(){ alert("ææ¯"+this.name+"ï¼æç°å¨å"+this.price+"ä¸å "); } var camry =new Car("å¯ç¾ç",27); camry.sell(); 35 evalæ¯åä»ä¹ç å®çåè½æ¯æå¯¹åºçå符串解ææJS代ç å¹¶è¿è¡ åºè¯¥é¿å 使ç¨evalï¼ä¸å®å ¨ï¼éå¸¸èæ§è½ï¼2次ï¼ä¸æ¬¡è§£ææjsè¯å¥ï¼ä¸æ¬¡æ§è¡ï¼ ç±JSONå符串转æ¢ä¸ºJSONå¯¹è±¡çæ¶åå¯ä»¥ç¨evalï¼var obj =eval('('+ str +')') 36 nullï¼undefined çåºå« undefined 表示ä¸åå¨è¿ä¸ªå¼ã
undefined :æ¯ä¸ä¸ªè¡¨ç¤º"æ "çåå§å¼æè 说表示"缺å°å¼"ï¼å°±æ¯æ¤å¤åºè¯¥æä¸ä¸ªå¼ï¼ä½æ¯è¿æ²¡æå®ä¹ãå½å°è¯è¯»åæ¶ä¼è¿å undefined
ä¾å¦åé被声æäºï¼ä½æ²¡æèµå¼æ¶ï¼å°±çäºundefined
null 表示ä¸ä¸ªå¯¹è±¡è¢«å®ä¹äºï¼å¼ä¸ºâ空å¼â
null : æ¯ä¸ä¸ªå¯¹è±¡(空对象, 没æä»»ä½å±æ§åæ¹æ³)
ä¾å¦ä½ä¸ºå½æ°çåæ°ï¼è¡¨ç¤ºè¯¥å½æ°ç忰䏿¯å¯¹è±¡ï¼
å¨éªè¯nullæ¶ï¼ä¸å®è¦ä½¿ç¨ã=== ï¼å 为 == æ æ³åå« null åãundefined
37 ["1", "2", "3"].map(parseInt) çæ¡æ¯å¤å° [1, NaN, NaN] å 为 parseInt éè¦ä¸¤ä¸ªåæ° (val, radix)ï¼å ¶ä¸ radix è¡¨ç¤ºè§£ææ¶ç¨çåºæ°ã map ä¼ äº 3 个 (element, index, array)ï¼å¯¹åºç radix ä¸åæ³å¯¼è´è§£æå¤±è´¥ã 38 javascript 代ç ä¸ç"use strict";æ¯ä»ä¹ææ use strictæ¯ä¸ç§ECMAscript 5 æ·»å çï¼ä¸¥æ ¼ï¼è¿è¡æ¨¡å¼,è¿ç§æ¨¡å¼ä½¿å¾ Javascript 卿´ä¸¥æ ¼çæ¡ä»¶ä¸è¿è¡,使JSç¼ç æ´å è§èåçæ¨¡å¼,æ¶é¤Javascriptè¯æ³çä¸äºä¸åçãä¸ä¸¥è°¨ä¹å¤ï¼åå°ä¸äºæªå¼è¡ä¸º 39 JSON çäºè§£ JSON(JavaScript Object Notation) æ¯ä¸ç§è½»éçº§çæ°æ®äº¤æ¢æ ¼å¼
宿¯åºäºJavaScriptçä¸ä¸ªåéãæ°æ®æ ¼å¼ç®å, æäºè¯»å, å ç¨å¸¦å®½å°
JSONå符串转æ¢ä¸ºJSON对象:
var obj =eval('('+ str +')'); var obj = str.parseJSON(); var obj = JSON.parse(str); JSON对象转æ¢ä¸ºJSONåç¬¦ä¸²ï¼ var last=obj.toJSONString(); var last=JSON.stringify(obj); 40 jså»¶è¿å è½½çæ¹å¼æåªäº deferåasyncã卿å建DOMæ¹å¼ï¼ç¨å¾æå¤ï¼ãæé弿¥è½½å ¥js 41 忥å弿¥çåºå« åæ¥ï¼æµè§å¨è®¿é®æå¡å¨è¯·æ±ï¼ç¨æ·çå¾å°é¡µé¢å·æ°ï¼éæ°å请æ±,ç请æ±å®ï¼é¡µé¢å·æ°ï¼æ°å 容åºç°ï¼ç¨æ·çå°æ°å 容,è¿è¡ä¸ä¸æ¥æä½ 弿¥ï¼æµè§å¨è®¿é®æå¡å¨è¯·æ±ï¼ç¨æ·æ£å¸¸æä½ï¼æµè§å¨å端è¿è¡è¯·æ±ãç请æ±å®ï¼é¡µé¢ä¸å·æ°ï¼æ°å 容ä¹ä¼åºç°ï¼ç¨æ·çå°æ°å 容 42 æ¸è¿å¢å¼ºåä¼é é级 æ¸è¿å¢å¼º ï¼é对ä½çæ¬æµè§å¨è¿è¡æå»ºé¡µé¢ï¼ä¿è¯æåºæ¬çåè½ï¼ç¶ååé对é«çº§æµè§å¨è¿è¡ææã交äºçæ¹è¿å追å åè½è¾¾å°æ´å¥½çç¨æ·ä½éªã ä¼é é级 ï¼ä¸å¼å§å°±æå»ºå®æ´çåè½ï¼ç¶ååé对ä½çæ¬æµè§å¨è¿è¡å ¼å®¹ 43 deferåasync deferå¹¶è¡å è½½jsæä»¶ï¼ä¼æç §é¡µé¢ä¸scriptæ ç¾çé¡ºåºæ§è¡ asyncå¹¶è¡å è½½jsæä»¶ï¼ä¸è½½å®æç«å³æ§è¡ï¼ä¸ä¼æç §é¡µé¢ä¸scriptæ ç¾çé¡ºåºæ§è¡ 44 è¯´è¯´ä¸¥æ ¼æ¨¡å¼çéå¶ åéå¿ é¡»å£°æååä½¿ç¨ å½æ°çåæ°ä¸è½æåå屿§ï¼å¦åæ¥é ä¸è½ä½¿ç¨withè¯å¥ ç¦æ¢thisæåå ¨å±å¯¹è±¡ 45 attributeåpropertyçåºå«æ¯ä»ä¹ attributeæ¯domå ç´ å¨ææ¡£ä¸ä½ä¸ºhtmlæ ç¾æ¥æç屿§ï¼ propertyå°±æ¯domå ç´ å¨jsä¸ä½ä¸ºå¯¹è±¡æ¥æç屿§ã 对äºhtmlçæ å屿§æ¥è¯´ï¼attributeåpropertyæ¯åæ¥çï¼æ¯ä¼èªå¨æ´æ°ç 使¯å¯¹äºèªå®ä¹ç屿§æ¥è¯´ï¼ä»ä»¬æ¯ä¸åæ¥ç 46 è°è°ä½ 对ES6ççè§£ æ°å¢æ¨¡æ¿å符串ï¼ä¸ºJavaScriptæä¾äºç®åçå符串æå¼åè½ï¼ ç®å¤´å½æ° for-ofï¼ç¨æ¥éåæ°æ®âä¾å¦æ°ç»ä¸çå¼ãï¼ arguments对象å¯è¢«ä¸å®åæ°åé»è®¤åæ°å®ç¾ä»£æ¿ã ES6å°promiseå¯¹è±¡çº³å ¥è§èï¼æä¾äºåççPromise对象ã å¢å äºletåconstå½ä»¤ï¼ç¨æ¥å£°æåéã å¢å äºå级ä½ç¨åã letå½ä»¤å®é ä¸å°±å¢å äºå级ä½ç¨åã è¿æå°±æ¯å¼å ¥module模åçæ¦å¿µ 47 ECMAScript6 æä¹åclassä¹ è¿ä¸ªè¯æ³ç³å¯ä»¥è®©æOOPåºç¡ç人æ´å¿«ä¸æjsï¼è³å°æ¯ä¸ä¸ªå®æ¹çå®ç°äº ä½å¯¹çæjsç人æ¥è¯´ï¼è¿ä¸ªä¸è¥¿æ²¡å¥å¤§å½±åï¼ä¸ä¸ªObject.creat()æå®ç»§æ¿ï¼æ¯classç®æ´æ¸ æ°çå¤ 48 ä»ä¹æ¯é¢å对象ç¼ç¨åé¢åè¿ç¨ç¼ç¨ï¼å®ä»¬çå¼ååä¼ç¼ºç¹ é¢åè¿ç¨å°±æ¯åæåºè§£å³é®é¢æéè¦çæ¥éª¤ï¼ç¶åç¨å½æ°æè¿äºæ¥éª¤ä¸æ¥ä¸æ¥å®ç°ï¼ä½¿ç¨çæ¶åä¸ä¸ªä¸ä¸ªä¾æ¬¡è°ç¨å°±å¯ä»¥äº é¢åå¯¹è±¡æ¯æææé®é¢äºå¡åè§£æå个对象ï¼å»ºç«å¯¹è±¡çç®ç䏿¯ä¸ºäºå®æä¸ä¸ªæ¥éª¤ï¼èæ¯ä¸ºäºæåæä¸ªäºç©å¨æ´ä¸ªè§£å³é®é¢çæ¥éª¤ä¸çè¡ä¸º é¢å对象æ¯ä»¥åè½æ¥ååé®é¢ï¼è䏿¯æ¥éª¤ 49 é¢å对象ç¼ç¨ææ³ åºæ¬ææ³æ¯ä½¿ç¨å¯¹è±¡ï¼ç±»ï¼ç»§æ¿ï¼å°è£ çåºæ¬æ¦å¿µæ¥è¿è¡ç¨åºè®¾è®¡ ä¼ç¹ æç»´æ¤ éç¨é¢åå¯¹è±¡ææ³è®¾è®¡çç»æï¼å¯è¯»æ§é«ï¼ç±äºç»§æ¿çåå¨ï¼å³ä½¿æ¹åéæ±ï¼é£ä¹ç»´æ¤ä¹åªæ¯å¨å±é¨æ¨¡åï¼æä»¥ç»´æ¤èµ·æ¥æ¯é常æ¹ä¾¿åè¾ä½ææ¬ç ææ©å± å¼åå·¥ä½çéç¨æ§ãç»§æ¿æ§é«ï¼éä½éå¤å·¥ä½éã 缩çäºå¼å卿 50 对webæ åãå¯ç¨æ§ãå¯è®¿é®æ§ççè§£ å¯ç¨æ§ï¼Usabilityï¼ï¼äº§åæ¯å¦å®¹æä¸æï¼ç¨æ·è½å¦å®æä»»å¡ï¼æçå¦ä½ï¼ä»¥åè¿è¿ç¨ä¸ç¨æ·çä¸»è§æåå¯å¥½ï¼æ¯ä»ç¨æ·çè§åº¦æ¥ç产åçè´¨éãå¯ç¨æ§å¥½æå³ç产åè´¨éé«ï¼æ¯ä¼ä¸çæ ¸å¿ç«äºå å¯è®¿é®æ§ï¼Accessibilityï¼ï¼Webå å®¹å¯¹äºæ®éç¨æ·çå¯é 读åå¯çè§£æ§ å¯ç»´æ¤æ§ï¼Maintainabilityï¼ï¼ä¸è¬å å«ä¸¤ä¸ªå±æ¬¡ï¼ä¸æ¯å½ç³»ç»åºç°é®é¢æ¶ï¼å¿«éå®ä½å¹¶è§£å³é®é¢çææ¬ï¼ææ¬ä½åå¯ç»´æ¤æ§å¥½ãäºæ¯ä»£ç æ¯å¦å®¹æè¢«äººçè§£ï¼æ¯å¦å®¹æä¿®æ¹åå¢å¼ºåè½ã 51 å¦ä½éè¿JS夿ä¸ä¸ªæ°ç» instanceofæ¹æ³ instanceof è¿ç®ç¬¦æ¯ç¨æ¥æµè¯ä¸ä¸ªå¯¹è±¡æ¯å¦å¨å ¶ååé¾ååæé 彿°ç屿§ var arr = []; arr instanceof Array; // true constructoræ¹æ³ constructor 屿§è¿å对å建æ¤å¯¹è±¡çæ°ç»å½æ°çå¼ç¨ï¼å°±æ¯è¿å对象ç¸å¯¹åºçæé 彿° var arr = []; arr.constructor == Array; //true æç®åçæ¹æ³ è¿ç§åæ³ï¼æ¯ jQuery æ£å¨ä½¿ç¨ç Object.prototype.toString.call(value) == '[object Array]' // å©ç¨è¿ä¸ªæ¹æ³ï¼å¯ä»¥åä¸ä¸ªè¿åæ°æ®ç±»åçæ¹æ³ var isType = function (obj) { return Object.prototype.toString.call(obj).slice(8,-1); } ES5æ°å¢æ¹æ³isArray() var a = new Array(123); var b = new Date(); console.log(Array.isArray(a)); //true console.log(Array.isArray(b)); //false 52 è°ä¸è°letä¸varçåºå« letå½ä»¤ä¸åå¨åéæåï¼å¦æå¨letå使ç¨ï¼ä¼å¯¼è´æ¥é 妿ååºä¸åå¨letåconstå½ä»¤ï¼å°±ä¼å½¢æå°éä½ç¨å ä¸å 许éå¤å£°æï¼å æ¤ï¼ä¸è½å¨å½æ°å é¨éæ°å£°æåæ° 53 mapä¸forEachçåºå« forEachæ¹æ³ï¼æ¯æåºæ¬çæ¹æ³ï¼å°±æ¯éåä¸å¾ªç¯ï¼é»è®¤æ3ä¸ªä¼ åï¼å嫿¯éåçæ°ç»å 容itemãæ°ç»ç´¢å¼indexãåå½åéåæ°ç»Array mapæ¹æ³ï¼åºæ¬ç¨æ³ä¸forEachä¸è´ï¼ä½æ¯ä¸åçï¼å®ä¼è¿åä¸ä¸ªæ°çæ°ç»ï¼æä»¥å¨callbackéè¦æreturnå¼ï¼å¦ææ²¡æï¼ä¼è¿åundefined 54 è°ä¸è°ä½ çè§£ç彿°å¼ç¼ç¨ ç®å说ï¼"彿°å¼ç¼ç¨"æ¯ä¸ç§"ç¼ç¨èå¼"ï¼programming paradigmï¼ï¼ä¹å°±æ¯å¦ä½ç¼åç¨åºçæ¹æ³è®º å®å ·æä»¥ä¸ç¹æ§ï¼éå åé«é¶å½æ°ãæ°æ§è®¡ç®ãéå½ã彿°æ¯"第ä¸çå ¬æ°"ãåªç¨"表达å¼" 55 è°ä¸è°ç®å¤´å½æ°ä¸æ®é彿°çåºå«ï¼ 彿°ä½å çthis对象ï¼å°±æ¯å®ä¹æ¶æå¨ç对象ï¼è䏿¯ä½¿ç¨æ¶æå¨ç对象 ä¸å¯ä»¥å½ä½æé 彿°ï¼ä¹å°±æ¯è¯´ï¼ä¸å¯ä»¥ä½¿ç¨newå½ä»¤ï¼å¦å伿åºä¸ä¸ªé误 ä¸å¯ä»¥ä½¿ç¨arguments对象ï¼è¯¥å¯¹è±¡å¨å½æ°ä½å ä¸åå¨ã妿è¦ç¨ï¼å¯ä»¥ç¨Reståæ°ä»£æ¿ ä¸å¯ä»¥ä½¿ç¨yieldå½ä»¤ï¼å æ¤ç®å¤´å½æ°ä¸è½ç¨ä½Generator彿° 56 è°ä¸è°å½æ°ä¸thisçæå thisçæåå¨å½æ°å®ä¹çæ¶åæ¯ç¡®å®ä¸äºçï¼åªæå½æ°æ§è¡çæ¶åæè½ç¡®å®thiså°åºæåè°ï¼å®é ä¸thisçæç»æåçæ¯é£ä¸ªè°ç¨å®ç对象
ãjavascriptè¯è¨ç²¾é«ãä¸å¤§æ¦æ¦æ¬äº4ç§è°ç¨æ¹å¼ï¼
æ¹æ³è°ç¨æ¨¡å¼
彿°è°ç¨æ¨¡å¼
æé å¨è°ç¨æ¨¡å¼
graph LR A-->B apply/callè°ç¨æ¨¡å¼ 57 弿¥ç¼ç¨çå®ç°æ¹å¼ åè°å½æ°
ä¼ç¹ï¼ç®åã容æçè§£ 缺ç¹ï¼ä¸å©äºç»´æ¤ï¼ä»£ç è¦åé« äºä»¶çå¬(éç¨æ¶é´é©±å¨æ¨¡å¼ï¼åå³äºæä¸ªäºä»¶æ¯å¦åç)ï¼
ä¼ç¹ï¼å®¹æçè§£ï¼å¯ä»¥ç»å®å¤ä¸ªäºä»¶ï¼æ¯ä¸ªäºä»¶å¯ä»¥æå®å¤ä¸ªåè°å½æ° 缺ç¹ï¼äºä»¶é©±å¨åï¼æµç¨ä¸å¤æ¸ æ° åå¸/订é (è§å¯è 模å¼)
类似äºäºä»¶çå¬ï¼ä½æ¯å¯ä»¥éè¿âæ¶æ¯ä¸å¿âï¼äºè§£ç°å¨æå¤å°åå¸è ï¼å¤å°è®¢é è Promise对象
ä¼ç¹ï¼å¯ä»¥å©ç¨thenæ¹æ³ï¼è¿è¡é¾å¼åæ³ï¼å¯ä»¥ä¹¦åé误æ¶çåè°å½æ°ï¼ 缺ç¹ï¼ç¼ååçè§£ï¼ç¸å¯¹æ¯è¾é¾ Generator彿°
ä¼ç¹ï¼å½æ°ä½å å¤çæ°æ®äº¤æ¢ãé误å¤çæºå¶ 缺ç¹ï¼æµç¨ç®¡ç䏿¹ä¾¿ async彿°
ä¼ç¹ï¼å ç½®æ§è¡å¨ãæ´å¥½çè¯ä¹ãæ´å¹¿çéç¨æ§ãè¿åçæ¯Promiseãç»ææ¸ æ°ã 缺ç¹ï¼é误å¤çæºå¶ 58 对åçJavascriptäºè§£ç¨åº¦ æ°æ®ç±»åãè¿ç®ã对象ãFunctionãç»§æ¿ãéå ãä½ç¨åãååé¾ãäºä»¶ãRegExpãJSONãAjaxãDOMãBOMãå åæ³æ¼ãè·¨åã弿¥è£ è½½ãæ¨¡æ¿å¼æãå端MVCãè·¯ç±ã模ååãCanvasãECMAScript 59 Jså¨ç»ä¸CSSå¨ç»åºå«åç¸åºå®ç° CSS3çå¨ç»çä¼ç¹ 卿§è½ä¸ä¼ç¨å¾®å¥½ä¸äºï¼æµè§å¨ä¼å¯¹CSS3çå¨ç»åä¸äºä¼å 代ç ç¸å¯¹ç®å ç¼ºç¹ å¨å¨ç»æ§å¶ä¸ä¸å¤çµæ´» å ¼å®¹æ§ä¸å¥½ JavaScriptçå¨ç»æ£å¥½å¼¥è¡¥äºè¿ä¸¤ä¸ªç¼ºç¹ï¼æ§å¶è½åå¾å¼ºï¼å¯ä»¥åå¸§çæ§å¶ã忢ï¼åæ¶åå¾å¥½å®å ¨å¯ä»¥å ¼å®¹IE6ï¼å¹¶ä¸åè½å¼ºå¤§ã对äºä¸äºå¤ææ§å¶çå¨ç»ï¼ä½¿ç¨javascript伿¯è¾é è°±ãèå¨å®ç°ä¸äºå°ç交äºå¨æçæ¶åï¼å°±å¤èèèèCSSå§ 60 JS æ°ç»å对象çéåæ¹å¼ï¼ä»¥åå ç§æ¹å¼çæ¯è¾ é常æä»¬ä¼ç¨å¾ªç¯çæ¹å¼æ¥éåæ°ç»ã使¯å¾ªç¯æ¯ 导è´js æ§è½é®é¢çåå ä¹ä¸ãä¸è¬æä»¬ä¼éç¨ä¸å ç§æ¹å¼æ¥è¿è¡æ°ç»çéå
for in 循ç¯
for 循ç¯
forEach
è¿éç forEachåè°ä¸ä¸¤ä¸ªåæ°åå«ä¸º valueï¼index forEach æ æ³éå对象 IE䏿¯æè¯¥æ¹æ³ï¼Firefox å chrome æ¯æ forEach æ æ³ä½¿ç¨ breakï¼continue è·³åºå¾ªç¯ï¼ä¸ä½¿ç¨ return æ¯è·³è¿æ¬æ¬¡å¾ªç¯ è¿ä¸¤ç§æ¹æ³åºè¯¥é常常è§ä¸ä½¿ç¨å¾é¢ç¹ãä½å®é ä¸ï¼è¿ä¸¤ç§æ¹æ³é½å卿§è½é®é¢
卿¹å¼ä¸ä¸ï¼for-inéè¦åæåºarrayçæ¯ä¸ªå±æ§ï¼è¿ä¸ªæä½æ§è½å¼éå¾å¤§ãç¨å¨ key å·²ç¥çæ°ç»ä¸æ¯é常ä¸åç®çãæä»¥å°½éä¸è¦ç¨for-inï¼é¤éä½ ä¸æ¸ æ¥è¦å¤çåªäºå±æ§ï¼ä¾å¦ JSON å¯¹è±¡è¿æ ·çæ åµ
卿¹å¼2ä¸ï¼å¾ªç¯æ¯è¿è¡ä¸æ¬¡ï¼å°±è¦æ£æ¥ä¸ä¸æ°ç»é¿åº¦ã读å屿§ï¼æ°ç»é¿åº¦ï¼è¦æ¯è¯»å±é¨åéæ ¢ï¼å°¤å ¶æ¯å½ array éåæ¾ç齿¯ DOM å ç´ ï¼å ä¸ºæ¯æ¬¡è¯»åé½ä¼æ«æä¸é页é¢ä¸çéæ©å¨ç¸å ³å ç´ ï¼é度ä¼å¤§å¤§éä½
61 gulpæ¯ä»ä¹ gulpæ¯å端å¼åè¿ç¨ä¸ä¸ç§åºäºæµçä»£ç æå»ºå·¥å ·ï¼æ¯èªå¨å项ç®çæå»ºå©å¨ï¼å®ä¸ä» è½å¯¹ç½ç«èµæºè¿è¡ä¼åï¼èä¸å¨å¼åè¿ç¨ä¸å¾å¤éå¤çä»»å¡è½å¤ä½¿ç¨æ£ç¡®çå·¥å ·èªå¨å®æ Gulpçæ ¸å¿æ¦å¿µï¼æµ æµï¼ç®åæ¥è¯´å°±æ¯å»ºç«å¨é¢å对象åºç¡ä¸çä¸ç§æ½è±¡çå¤çæ°æ®çå·¥å ·ã卿µä¸ï¼å®ä¹äºä¸äºå¤çæ°æ®çåºæ¬æä½ï¼å¦è¯»åæ°æ®ï¼åå ¥æ°æ®çï¼ç¨åºåæ¯å¯¹æµè¿è¡æææä½çï¼èä¸ç¨å ³å¿æµçå¦ä¸å¤´æ°æ®ççæ£æµå gulpæ£æ¯éè¿æµå代ç ä¼äºé ç½®ççç¥æ¥å°½éç®åä»»å¡ç¼åçå·¥ä½ Gulpçç¹ç¹ï¼ æäºä½¿ç¨ï¼éè¿ä»£ç ä¼äºé ç½®ççç¥ï¼gulp 让ç®åçä»»å¡ç®åï¼å¤æçä»»å¡å¯ç®¡ç æå»ºå¿«é å©ç¨ Node.js æµçå¨åï¼ä½ å¯ä»¥å¿«éæå»ºé¡¹ç®å¹¶åå°é¢ç¹ç IO æä½ æäºå¦ä¹ éè¿æå°ç APIï¼ææ¡ gulp 毫ä¸è´¹åï¼æå»ºå·¥ä½å°½å¨ææ¡ï¼å¦åä¸ç³»åæµç®¡é 62 说ä¸ä¸Vueçååç»å®æ°æ®çåç vue.js 忝éç¨æ°æ®å«æç»ååå¸è -订é è æ¨¡å¼çæ¹å¼ï¼éè¿Object.defineProperty()æ¥å«æåä¸ªå±æ§çsetterï¼getterï¼å¨æ°æ®å卿¶å叿¶æ¯ç»è®¢é è ï¼è§¦åç¸åºççå¬åè° 63 äºä»¶çåä¸ªé¶æ®µ 1ï¼æè·é¶æ®µ ---> 2ï¼ç®æ é¶æ®µ ---> 3ï¼åæ³¡é¶æ®µ document ---> targetç®æ ----> document ç±æ¤ï¼addEventListenerç第ä¸ä¸ªåæ°è®¾ç½®ä¸ºtrueåfalseçåºå«å·²ç»éå¸¸æ¸ æ°äº true表示该å ç´ å¨äºä»¶çâæè·é¶æ®µâï¼ç±å¤å¾å ä¼ éæ¶ï¼ååºäºä»¶ false表示该å ç´ å¨äºä»¶çâåæ³¡é¶æ®µâï¼ç±å åå¤ä¼ éæ¶ï¼ååºäºä»¶ 64 let var const let
å è®¸ä½ å£°æä¸ä¸ªä½ç¨å被éå¶å¨å级ä¸çåéãè¯å¥æè è¡¨è¾¾å¼ letç»å®ä¸ååéæåç约æï¼è¿æå³çlet声æä¸ä¼è¢«æåå°å½å 该åéå¤äºä»åå¼å§å°åå§åå¤ççâæåæ»åºâ var
声æåéçä½ç¨åéå¶å¨å ¶å£°æä½ç½®çä¸ä¸æä¸ï¼èé声æåéæ»æ¯å ¨å±ç ç±äºåé声æï¼ä»¥åå ¶ä»å£°æï¼æ»æ¯å¨ä»»æä»£ç æ§è¡ä¹åå¤ççï¼æä»¥å¨ä»£ç ä¸çä»»æä½ç½®å£°æåéæ»æ¯çæäºå¨ä»£ç å¼å¤´å£°æ const
声æå建ä¸ä¸ªå¼çåªè¯»å¼ç¨ (峿é) åºæ¬æ°æ®å½å¼åçæ¹åæ¶ï¼é£ä¹å ¶å¯¹åºçæéä¹å°åçæ¹åï¼æ é æ constç³æåºæ¬æ°æ®ç±»åæ¶ åå°å ¶å¼æ¹åæ¶ï¼å°ä¼é ææ¥éï¼ ä¾å¦ const a = 3 ; a = 5 æ¶ å°ä¼æ¥é 使¯å¦ææ¯å¤åç±»åæ¶ï¼å¦æåªæ¹åå¤åç±»åçå ¶ä¸æä¸ªValue项æ¶ï¼ å°è¿æ¯æ£å¸¸ä½¿ç¨ 65 å¿«éç让ä¸ä¸ªæ°ç»ä¹±åº var arr = [1,2,3,4,5,6,7,8,9,10]; arr.sort(function(){ return Math.random() - 0.5; }) console.log(arr); 66 å¦ä½æ¸²æå 䏿¡æ°æ®å¹¶ä¸å¡ä½çé¢ è¿éé¢èå¯äºå¦ä½å¨ä¸å¡ä½é¡µé¢çæ åµä¸æ¸²ææ°æ®ï¼ä¹å°±æ¯è¯´ä¸è½ä¸æ¬¡æ§å°å 䏿¡é½æ¸²æåºæ¥ï¼èåºè¯¥ä¸æ¬¡æ¸²æé¨å DOMï¼é£ä¹å°±å¯ä»¥éè¿ requestAnimationFrame æ¥æ¯ 16 ms å·æ°ä¸æ¬¡
Document æ§ä»¶
67 叿è·åå°é¡µé¢ä¸ææçcheckboxæä¹åï¼ ä¸ä½¿ç¨ç¬¬ä¸æ¹æ¡æ¶var domList = document.getElementsByTagName(âinputâ) var checkBoxList = []; var len = domList.length;ãã//ç¼åå°å±é¨åé while (len--) {ãã//使ç¨whileçæç伿¯forå¾ªç¯æ´é« ããif (domList[len].type == âcheckboxâ) { ããcheckBoxList.push(domList[len]); ãã} } 68 ææ ·æ·»å ãç§»é¤ãç§»å¨ãå¤å¶ãåå»ºåæ¥æ¾èç¹ å建æ°èç¹
createDocumentFragment() //å建ä¸ä¸ªDOMçæ®µ createElement() //å建ä¸ä¸ªå ·ä½çå ç´ createTextNode() //å建ä¸ä¸ªææ¬èç¹ æ·»å ãç§»é¤ãæ¿æ¢ãæå ¥
appendChild() //æ·»å removeChild() //ç§»é¤ replaceChild() //æ¿æ¢ insertBefore() //æå ¥ æ¥æ¾
getElementsByTagName() //éè¿æ ç¾åç§° getElementsByName() //éè¿å ç´ çName屿§çå¼ getElementById() //éè¿å ç´ Idï¼å¯ä¸æ§ 69 æ£åè¡¨è¾¾å¼ æ£åè¡¨è¾¾å¼æé 彿°var reg=new RegExp(âxxxâ)䏿£å表达åé¢évar reg=//æä»ä¹ä¸åï¼å¹é é®ç®±çæ£å表达å¼ï¼
å½ä½¿ç¨RegExp()æé 彿°çæ¶åï¼ä¸ä» éè¦è½¬ä¹å¼å·ï¼å³\â表示âï¼ï¼å¹¶ä¸è¿éè¦ååææ ï¼å³\表示ä¸ä¸ª\ï¼ãä½¿ç¨æ£å表达åé¢éçæçæ´é« é®ç®±çæ£åå¹é ï¼
var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/; 70 Javascriptä¸calleeåcallerçä½ç¨ï¼ calleræ¯è¿åä¸ä¸ªå¯¹å½æ°çå¼ç¨ï¼è¯¥å½æ°è°ç¨äºå½å彿°ï¼ calleeæ¯è¿åæ£å¨è¢«æ§è¡çfunction彿°ï¼ä¹å°±æ¯ææå®çfunctionå¯¹è±¡çæ£æ é£ä¹é®é¢æ¥äºï¼å¦æä¸å¯¹å 忝æçä¸å¯¹å åï¼ä¸å¯¹æ°çå ï¼ä»ç¬¬äºä¸ªæèµ·å°±å¼å§çå åï¼å宿¯å¯¹å å齿¯ä¸éä¸éï¼è¯é®ä¸å¯¹å åï¼ç¬¬n个æè½ç¹æ®æå¤å°å¯¹å åï¼ï¼ä½¿ç¨callee宿ï¼
var result=[]; function fn(n){ //å ¸åçææ³¢é£å¥æ°å if(n==1){ return 1; }else if(n==2){ return 1; }else{ if(result[n]){ return result[n]; }else{ //argument.callee()表示fn() result[n]=arguments.callee(n-1)+arguments.callee(n-2); return result[n]; } } } 71 window.onloadå$(document).ready åçJSçwindow.onloadä¸Jqueryç$(document).ready(function(){})æä»ä¹ä¸åï¼å¦ä½ç¨åçJSå®ç°Jqçreadyæ¹æ³ï¼
window.onload()æ¹æ³æ¯å¿ é¡»çå°é¡µé¢å å æ¬å¾ççææå ç´ å è½½å®æ¯åæè½æ§è¡ã $(document).ready()æ¯DOMç»æç»å¶å®æ¯åå°±æ§è¡ï¼ä¸å¿ çå°å è½½å®æ¯ function ready(fn){ if(document.addEventListener) { //æ åæµè§å¨ document.addEventListener('DOMContentLoaded', function() { //注éäºä»¶, é¿å åå¤è§¦å document.removeEventListener('DOMContentLoaded',arguments.callee, false); fn(); //æ§è¡å½æ° }, false); }else if(document.attachEvent) { //IE document.attachEvent('onreadystatechange', function() { if(document.readyState == 'complete') { document.detachEvent('onreadystatechange', arguments.callee); fn(); //彿°æ§è¡ } }); } }; 72 addEventListener()åattachEvent()çåºå« addEventListener()æ¯ç¬¦åW3Cè§èçæ åæ¹æ³; attachEvent()æ¯IEä½çæ¬çéæ åæ¹æ³ addEventListener()æ¯æäºä»¶å泡åäºä»¶æè·; - èattachEvent()åªæ¯æäºä»¶å泡 addEventListener()ç第ä¸ä¸ªåæ°ä¸,äºä»¶ç±»åä¸éè¦æ·»å on; attachEvent()éè¦æ·»å 'on' å¦æä¸ºåä¸ä¸ªå ç´ ç»å®å¤ä¸ªäºä»¶, addEventListener()ä¼æç §äºä»¶ç»å®ç顺åºä¾æ¬¡æ§è¡, attachEvent()ä¼æç §äºä»¶ç»å®ç顺åºååºæ§è¡ 73 è·å页颿æçcheckbox var resultArr= []; var input = document.querySelectorAll('input'); for( var i = 0; i < input.length; i++ ) { if( input[i].type == 'checkbox' ) { resultArr.push( input[i] ); } } //resultArrå³ä¸è·åå°äºé¡µé¢ä¸çææcheckbox 74 æ°ç»å»éæ¹æ³æ»ç»(å ç§æ¹æ³) æ¹æ³ä¸
åå±å¾ªç¯ï¼å¤å±å¾ªç¯å ç´ ï¼å å±å¾ªç¯æ¶æ¯è¾å¼ 妿æç¸åçå¼åè·³è¿ï¼ä¸ç¸ååpushè¿æ°ç» Array.prototype.distinct = function(){ var arr = this, result = [], i, j, len = arr.length; for(i = 0; i < len; i++){ for(j = i + 1; j < len; j++){ if(arr[i] === arr[j]){ j = ++i; } } result.push(arr[i]); } return result; } var arra = [1,2,3,4,4,1,1,2,1,1,1]; arra.distinct(); //è¿å[3,4,2,1] æ¹æ³äºï¼å©ç¨spliceç´æ¥å¨åæ°ç»è¿è¡æä½
åå±å¾ªç¯ï¼å¤å±å¾ªç¯å ç´ ï¼å å±å¾ªç¯æ¶æ¯è¾å¼ å¼ç¸åæ¶ï¼åå å»è¿ä¸ªå¼ 注æç¹:å é¤å ç´ ä¹åï¼éè¦å°æ°ç»çé¿åº¦ä¹å1. Array.prototype.distinct = function (){ var arr = this, i, j, len = arr.length; for(i = 0; i < len; i++){ for(j = i + 1; j < len; j++){ if(arr[i] == arr[j]){ arr.splice(j,1); len--; j--; } } } return arr; }; var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,]; var b = a.distinct(); console.log(b.toString()); //1,2,3,4,5,6,56 ä¼ç¹ï¼ç®åææ ç¼ºç¹ï¼å ç¨å åé«ï¼éåº¦æ ¢ æ¹æ³ä¸ï¼å©ç¨å¯¹è±¡ç屿§ä¸è½ç¸åçç¹ç¹è¿è¡å»é
Array.prototype.distinct = function (){ var arr = this, i, obj = {}, result = [], len = arr.length; for(i = 0; i< arr.length; i++){ if(!obj[arr[i]]){ //å¦æè½æ¥æ¾å°ï¼è¯ææ°ç»å ç´ éå¤äº obj[arr[i]] = 1; result.push(arr[i]); } } return result; }; var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,]; var b = a.distinct(); console.log(b.toString()); //1,2,3,4,5,6,56 æ¹æ³åï¼æ°ç»éå½å»é
è¿ç¨éå½çææ³ å æåºï¼ç¶å仿åå¼å§æ¯è¾ï¼éå°ç¸åï¼åå é¤ Array.prototype.distinct = function (){ var arr = this, len = arr.length; arr.sort(function(a,b){ //对æ°ç»è¿è¡æåºæè½æ¹ä¾¿æ¯è¾ return a - b; }) function loop(index){ if(index >= 1){ if(arr[index] === arr[index-1]){ arr.splice(index,1); } loop(index - 1); //éå½loop彿°è¿è¡å»é } } loop(len-1); return arr; }; var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56]; var b = a.distinct(); console.log(b.toString()); //1,2,3,4,5,6,45,56 æ¹æ³äºï¼å©ç¨indexOf以åforEach
Array.prototype.distinct = function (){ var arr = this, result = [], len = arr.length; arr.forEach(function(v, i ,arr){ //è¿éå©ç¨mapï¼filteræ¹æ³ä¹å¯ä»¥å®ç° var bool = arr.indexOf(v,i+1); //ä»ä¼ å ¥åæ°çä¸ä¸ä¸ªç´¢å¼å¼å¼å§å¯»æ¾æ¯å¦åå¨éå¤ if(bool === -1){ result.push(v); } }) return result; }; var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3]; var b = a.distinct(); console.log(b.toString()); //1,23,2,3 æ¹æ³å ï¼å©ç¨ES6çset
Setæ°æ®ç»æï¼å®ç±»ä¼¼äºæ°ç»ï¼å ¶æåçå¼é½æ¯å¯ä¸çã å©ç¨Array.fromå°Setç»æè½¬æ¢ææ°ç» function dedupe(array){ return Array.from(new Set(array)); } dedupe([1,1,2,3]) //[1,2,3] æå±è¿ç®ç¬¦(...)å é¨ä½¿ç¨for...of循ç¯
let arr = [1,2,3,3]; let resultarr = [...new Set(arr)]; console.log(resultarr); //[1,2,3] 75 ï¼è®¾è®¡é¢ï¼æ³å®ç°ä¸ä¸ªå¯¹é¡µé¢æä¸ªèç¹çææ³ï¼å¦ä½åï¼ï¼ä½¿ç¨åçJSï¼ ç»éè¦ææ½çèç¹ç»å®mousedown, mousemove, mouseupäºä»¶ mousedownäºä»¶è§¦ååï¼å¼å§ææ½ mousemoveæ¶ï¼éè¦éè¿event.clientXåclientYè·åææ½ä½ç½®ï¼å¹¶å®æ¶æ´æ°ä½ç½® mouseupæ¶ï¼ææ½ç»æ éè¦æ³¨ææµè§å¨è¾¹ççæ åµ 76 Javascriptå ¨å±å½æ°åå ¨å±åé å ¨å±åé
Infinity 代表æ£çæ ç©·å¤§çæ°å¼ã NaN æç¤ºæä¸ªå¼æ¯ä¸æ¯æ°åå¼ã undefined æç¤ºæªå®ä¹çå¼ã å ¨å±å½æ°
decodeURI() è§£ç æä¸ªç¼ç ç URIã decodeURIComponent() è§£ç ä¸ä¸ªç¼ç ç URI ç»ä»¶ã `encodeURI() æå符串ç¼ç 为 URIã encodeURIComponent() æå符串ç¼ç 为 URI ç»ä»¶ã escape() 对å符串è¿è¡ç¼ç ã eval() è®¡ç® JavaScript å符串ï¼å¹¶æå®ä½ä¸ºèæ¬ä»£ç æ¥æ§è¡ã isFinite() æ£æ¥æä¸ªå¼æ¯å¦ä¸ºæç©·å¤§çæ°ã isNaN() æ£æ¥æä¸ªå¼æ¯å¦æ¯æ°åã Number() æå¯¹è±¡çå¼è½¬æ¢ä¸ºæ°åã parseFloat() è§£æä¸ä¸ªå符串并è¿åä¸ä¸ªæµ®ç¹æ°ã parseInt() è§£æä¸ä¸ªå符串并è¿åä¸ä¸ªæ´æ°ã String() æå¯¹è±¡çå¼è½¬æ¢ä¸ºå符串ã unescape() å¯¹ç± escape() ç¼ç çå符串è¿è¡è§£ç 77 使ç¨jså®ç°ä¸ä¸ªæç»çå¨ç»ææ 宿¶å¨æè·¯
var e = document.getElementById('e') var flag = true; var left = 0; setInterval(() => { left == 0 ? flag = true : left == 100 ? flag = false : '' flag ? e.style.left =
${left++}px: e.style.left =${left--}px}, 1000 / 60) requestAnimationFrame//å ¼å®¹æ§å¤ç window.requestAnimFrame = (function(){ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback){ window.setTimeout(callback, 1000 / 60); }; })();
var e = document.getElementById("e"); var flag = true; var left = 0;
function render() { left == 0 ? flag = true : left == 100 ? flag = false : ''; flag ? e.style.left =
${left++}px: e.style.left =${left--}px; }(function animloop() { render(); requestAnimFrame(animloop); })(); 使ç¨csså®ç°ä¸ä¸ªæç»çå¨ç»ææ
animation:mymove 5s infinite; @keyframes mymove { from {top:0px;} to {top:200px;} } animation-name è§å®éè¦ç»å®å°éæ©å¨ç keyframe åç§°ã animation-duration è§å®å®æå¨ç»æè±è´¹çæ¶é´ï¼ä»¥ç§ææ¯«ç§è®¡ã animation-timing-function è§å®å¨ç»çé度æ²çº¿ã animation-delay è§å®å¨å¨ç»å¼å§ä¹åçå»¶è¿ã animation-iteration-count è§å®å¨ç»åºè¯¥ææ¾ç次æ°ã animation-direction è§å®æ¯å¦åºè¯¥è½®æµååææ¾å¨ç» 78 å°è£ ä¸ä¸ªå½æ°ï¼åæ°æ¯å®æ¶å¨çæ¶é´ï¼.thenæ§è¡åè°å½æ° function sleep (time) { return new Promise((resolve) => setTimeout(resolve, time)); } 79 æä¹å¤æä¸¤ä¸ªå¯¹è±¡ç¸çï¼ obj={ a:1, b:2 } obj2={ a:1, b:2 } obj3={ a:1, b:'2' } å¯ä»¥è½¬æ¢ä¸ºå符串æ¥å¤æ
JSON.stringify(obj)==JSON.stringify(obj2);//true JSON.stringify(obj)==JSON.stringify(obj3);//false 80 项ç®åè¿åªäºæ§è½ä¼åï¼ åå° HTTP` è¯·æ±æ° åå° DNS æ¥è¯¢ ä½¿ç¨ CDN é¿å éå®å å¾çæå è½½ åå° DOM å ç´ æ°é åå° DOM æä½ 使ç¨å¤é¨ JavaScript å CSS å缩 JavaScript ã CSS ãåä½ãå¾çç ä¼å CSS Sprite ä½¿ç¨ iconfont åä½è£åª å¤ååååååå 容å°ä¸ååå å°½éåå° iframe ä½¿ç¨ é¿å å¾ç src 为空 ææ ·å¼è¡¨æ¾å¨link ä¸ æèæ¬æ¾å¨é¡µé¢åºé¨ 81 æµè§å¨ç¼å æµè§å¨ç¼åå为强ç¼ååååç¼åãå½å®¢æ·ç«¯è¯·æ±æä¸ªèµæºæ¶ï¼è·åç¼åçæµç¨å¦ä¸
å æ ¹æ®è¿ä¸ªèµæºçä¸äº http header 夿宿¯å¦å½ä¸å¼ºç¼åï¼å¦æå½ä¸ï¼åç´æ¥ä»æ¬å°è·åç¼åèµæºï¼ä¸ä¼å请æ±å°æå¡å¨ï¼ å½å¼ºç¼å没æå½ä¸æ¶ï¼å®¢æ·ç«¯ä¼åé请æ±å°æå¡å¨ï¼æå¡å¨éè¿å¦ä¸äºrequest headeréªè¯è¿ä¸ªèµæºæ¯å¦å½ä¸ååç¼åï¼ç§°ä¸ºhttpåéªè¯ï¼å¦æå½ä¸ï¼æå¡å¨å°è¯·æ±è¿åï¼ä½ä¸è¿åèµæºï¼èæ¯åè¯å®¢æ·ç«¯ç´æ¥ä»ç¼åä¸è·åï¼å®¢æ·ç«¯æ¶å°è¿ååå°±ä¼ä»ç¼åä¸è·åèµæºï¼ 强ç¼ååååç¼åå ±åä¹å¤å¨äºï¼å¦æå½ä¸ç¼åï¼æå¡å¨é½ä¸ä¼è¿åèµæºï¼ åºå«æ¯ï¼å¼ºç¼åä¸å¯¹åé请æ±å°æå¡å¨ï¼ä½ååç¼åä¼ã å½ååç¼å乿²¡å½ä¸æ¶ï¼æå¡å¨å°±ä¼å°èµæºåéå客æ·ç«¯ã å½ ctrl+f5 强å¶å·æ°ç½é¡µæ¶ï¼ç´æ¥ä»æå¡å¨å è½½ï¼è·³è¿å¼ºç¼ååååç¼åï¼ å½ f5 å·æ°ç½é¡µæ¶ï¼è·³è¿å¼ºç¼åï¼ä½æ¯ä¼æ£æ¥ååç¼åï¼ å¼ºç¼å
Expiresï¼è¯¥åæ®µæ¯ http1.0 æ¶çè§èï¼å¼ä¸ºä¸ä¸ªç»å¯¹æ¶é´ç GMT æ ¼å¼çæ¶é´å符串ï¼ä»£è¡¨ç¼åèµæºçè¿ææ¶é´ï¼ Cache-Control:max-ageï¼è¯¥åæ®µæ¯ http1.1 çè§èï¼å¼ºç¼åå©ç¨å ¶ max-age 弿¥å¤æç¼åèµæºçæå¤§çå½å¨æï¼å®çå¼åä½ä¸ºç§ï¼ ååç¼å
Last-Modifiedï¼å¼ä¸ºèµæºæåæ´æ°æ¶é´ï¼éæå¡å¨responseè¿åï¼ If-Modified-Sinceï¼éè¿æ¯è¾ä¸¤ä¸ªæ¶é´æ¥å¤æèµæºå¨ä¸¤æ¬¡è¯·æ±æé´æ¯å¦æè¿ä¿®æ¹ï¼å¦ææ²¡æä¿®æ¹ï¼åå½ä¸ååç¼åï¼ ETagï¼è¡¨ç¤ºèµæºå 容çå¯ä¸æ è¯ï¼éæå¡å¨responseè¿åï¼ If-None-Matchï¼æå¡å¨éè¿æ¯è¾è¯·æ±å¤´é¨çIf-None-Matchä¸å½åèµæºçETagæ¯å¦ä¸è´æ¥å¤æèµæºæ¯å¦å¨ä¸¤æ¬¡è¯·æ±ä¹é´æè¿ä¿®æ¹ï¼å¦ææ²¡æä¿®æ¹ï¼åå½ä¸ååç¼åï¼ 82 WebSocket ç±äº http åå¨ä¸ä¸ªææ¾çå¼ç«¯ï¼æ¶æ¯åªè½æå®¢æ·ç«¯æ¨éå°æå¡å¨ç«¯ï¼èæå¡å¨ç«¯ä¸è½ä¸»å¨æ¨éå°å®¢æ·ç«¯ï¼ï¼å¯¼è´å¦ææå¡å¨å¦ææè¿ç»çååï¼è¿æ¶åªè½ä½¿ç¨è½®è¯¢ï¼è轮询æçè¿ä½ï¼å¹¶ä¸éåãäºæ¯ WebSocket 被åæåºæ¥
ç¸æ¯ä¸ http å ·æä»¥ä¸æç¹
æ¯æååéä¿¡ï¼å®æ¶æ§æ´å¼ºï¼ å¯ä»¥åéææ¬ï¼ä¹å¯ä»¥äºè¿å¶æä»¶ï¼ åè®®æ è¯ç¬¦æ¯ wsï¼å å¯åæ¯ wss ï¼ è¾å°çæ§å¶å¼éãè¿æ¥å建åï¼ws客æ·ç«¯ãæå¡ç«¯è¿è¡æ°æ®äº¤æ¢æ¶ï¼åè®®æ§å¶çæ°æ®å 头é¨è¾å°ãå¨ä¸å å«å¤´é¨çæ åµä¸ï¼æå¡ç«¯å°å®¢æ·ç«¯çå å¤´åªæ2~10åèï¼åå³äºæ°æ®å é¿åº¦ï¼ï¼å®¢æ·ç«¯å°æå¡ç«¯ççè¯ï¼éè¦å ä¸é¢å¤ç4åèçæ©ç ãèHTTPåè®®æ¯æ¬¡éä¿¡é½éè¦æºå¸¦å®æ´ç头é¨ï¼ æ¯ææ©å±ãwsåè®®å®ä¹äºæ©å±ï¼ç¨æ·å¯ä»¥æ©å±åè®®ï¼æè å®ç°èªå®ä¹çååè®®ãï¼æ¯å¦æ¯æèªå®ä¹åç¼©ç®æ³çï¼ æ è·¨åé®é¢ã å®ç°æ¯è¾ç®åï¼æå¡ç«¯åºå¦ socket.ioãws ï¼å¯ä»¥å¾å¥½çå¸®å©æä»¬å ¥é¨ãè客æ·ç«¯ä¹åªéè¦åç § api å®ç°å³å¯
83 å°½å¯è½å¤ç说åºä½ 对 Electron ççè§£ ææéè¦çä¸ç¹ï¼electron å®é 䏿¯ä¸ä¸ªå¥äº Chrome ç node ç¨åº
æä»¥åºè¯¥æ¯ä»ä¸¤ä¸ªæ¹é¢è¯´å¼æ¥
Chrome ï¼æ åç§å ¼å®¹æ§é®é¢ï¼ï¼ Nodeï¼Node è½åçå®ä¹è½åï¼ 84 æ·±æµ æ·è´ æµ æ·è´
Object.assign æè å±å¼è¿ç®ç¬¦ æ·±æ·è´
å¯ä»¥éè¿ JSON.parse(JSON.stringify(object)) æ¥è§£å³ let a = { age: 1, jobs: { first: 'FE' } } let b = JSON.parse(JSON.stringify(a)) a.jobs.first = 'native' console.log(b.jobs.first) // FE è¯¥æ¹æ³ä¹æ¯æå±éæ§ç
ä¼å¿½ç¥ undefined ä¸è½åºåå彿° ä¸è½è§£å³å¾ªç¯å¼ç¨ç对象 85 鲿/èæµ 鲿
卿»å¨äºä»¶ä¸éè¦åä¸ªå¤æè®¡ç®æè å®ç°ä¸ä¸ªæé®çé²äºæ¬¡ç¹å»æä½ãå¯ä»¥éè¿å½æ°é²æå¨æ¥å®ç°
// ä½¿ç¨ underscore çæºç æ¥è§£é鲿å¨
/**
underscore 鲿彿°ï¼è¿å彿°è¿ç»è°ç¨æ¶ï¼ç©ºé²æ¶é´å¿ é¡»å¤§äºæçäº waitï¼func æä¼æ§è¡
@param {function} func åè°å½æ°
@param {number} wait 表示æ¶é´çªå£çé´é
@param {boolean} immediate 设置为tureæ¶ï¼æ¯å¦ç«å³è°ç¨å½æ°
@return {function} è¿å客æ·è°ç¨å½æ° */ _.debounce = function(func, wait, immediate) { var timeout, args, context, timestamp, result;
var later = function() { // ç°å¨åä¸ä¸æ¬¡æ¶é´æ³æ¯è¾ var last = _.now() - timestamp; // 妿å½åé´éæ¶é´å°äºè®¾å®æ¶é´ä¸å¤§äº0å°±éæ°è®¾ç½®å®æ¶å¨ if (last < wait && last >= 0) { timeout = setTimeout(later, wait - last); } else { // å¦åçè¯å°±æ¯æ¶é´å°äºæ§è¡åè°å½æ° timeout = null; if (!immediate) { result = func.apply(context, args); if (!timeout) context = args = null; } } };
return function() { context = this; args = arguments; // è·å¾æ¶é´æ³ timestamp = _.now(); // 妿宿¶å¨ä¸åå¨ä¸ç«å³æ§è¡å½æ° var callNow = immediate && !timeout; // 妿宿¶å¨ä¸åå¨å°±å建ä¸ä¸ª if (!timeout) timeout = setTimeout(later, wait); if (callNow) { // 妿éè¦ç«å³æ§è¡å½æ°çè¯ éè¿ apply æ§è¡ result = func.apply(context, args); context = args = null; }
return result; }; }; æ´ä½å½æ°å®ç°
å¯¹äºæé®é²ç¹å»æ¥è¯´çå®ç°
å¼å§ä¸ä¸ªå®æ¶å¨ï¼åªè¦æå®æ¶å¨è¿å¨ï¼ä¸ç®¡ä½ æä¹ç¹å»é½ä¸ä¼æ§è¡åè°å½æ°ã䏿¦å®æ¶å¨ç»æå¹¶è®¾ç½®ä¸º nullï¼å°±å¯ä»¥å次ç¹å»äº 对äºå»¶æ¶æ§è¡å½æ°æ¥è¯´çå®ç°ï¼æ¯æ¬¡è°ç¨é²æå¨å½æ°é½ä¼å¤ææ¬æ¬¡è°ç¨åä¹åçæ¶é´é´éï¼å¦æå°äºéè¦çæ¶é´é´éï¼å°±ä¼éæ°å建ä¸ä¸ªå®æ¶å¨ï¼å¹¶ä¸å®æ¶å¨çå»¶æ¶ä¸ºè®¾å®æ¶é´åå»ä¹åçæ¶é´é´éã䏿¦æ¶é´å°äºï¼å°±ä¼æ§è¡ç¸åºçåè°å½æ° èæµ
鲿å¨åèæµæ¬è´¨æ¯ä¸ä¸æ ·çã鲿卿¯å°å¤æ¬¡æ§è¡å为æå䏿¬¡æ§è¡ï¼èæµæ¯å°å¤æ¬¡æ§è¡åææ¯é䏿®µæ¶é´æ§è¡
/**
- underscore èæµå½æ°ï¼è¿å彿°è¿ç»è°ç¨æ¶ï¼func æ§è¡é¢çéå®ä¸º 次 / wait
- @param {function} func åè°å½æ°
- @param {number} wait 表示æ¶é´çªå£çé´é
- @param {object} options 妿æ³å¿½ç¥å¼å§å½æ°ççè°ç¨ï¼ä¼ å ¥{leading: false}ã
妿æ³å¿½ç¥ç»å°¾å½æ°çè°ç¨ï¼ä¼ å ¥{trailing: false}两è ä¸è½å ±åï¼å¦å彿°ä¸è½æ§è¡- @return {function} è¿å客æ·è°ç¨å½æ°
*/ _.throttle = function(func, wait, options) { var context, args, result; var timeout = null; // ä¹åçæ¶é´æ³ var previous = 0; // 妿 options æ²¡ä¼ å设为空对象 if (!options) options = {}; // 宿¶å¨åè°å½æ° var later = function() { // å¦æè®¾ç½®äº leadingï¼å°±å° previous 设为 0 // ç¨äºä¸é¢å½æ°ç第ä¸ä¸ª if 夿 previous = options.leading === false ? 0 : _.now(); // ç½®ç©ºä¸æ¯ä¸ºäºé²æ¢å åæ³æ¼ï¼äºæ¯ä¸ºäºä¸é¢ç宿¶å¨å¤æ timeout = null; result = func.apply(context, args); if (!timeout) context = args = null; }; return function() { // è·å¾å½åæ¶é´æ³ var now = _.now(); // 馿¬¡è¿å ¥åè è¯å®ä¸º true // 妿éè¦ç¬¬ä¸æ¬¡ä¸æ§è¡å½æ° // å°±å°ä¸æ¬¡æ¶é´æ³è®¾ä¸ºå½åç // è¿æ ·å¨æ¥ä¸æ¥è®¡ç® remaining ç弿¶ä¼å¤§äº0 if (!previous && options.leading === false) previous = now; // 计ç®å©ä½æ¶é´ var remaining = wait - (now - previous); context = this; args = arguments; // 妿å½åè°ç¨å·²ç»å¤§äºä¸æ¬¡è°ç¨æ¶é´ + wait // æè ç¨æ·æå¨è°äºæ¶é´ // å¦æè®¾ç½®äº trailingï¼åªä¼è¿å ¥è¿ä¸ªæ¡ä»¶ // å¦ææ²¡æè®¾ç½® leadingï¼é£ä¹ç¬¬ä¸æ¬¡ä¼è¿å ¥è¿ä¸ªæ¡ä»¶ // è¿æä¸ç¹ï¼ä½ å¯è½ä¼è§å¾å¼å¯äºå®æ¶å¨é£ä¹åºè¯¥ä¸ä¼è¿å ¥è¿ä¸ª if æ¡ä»¶äº // å ¶å®è¿æ¯ä¼è¿å ¥çï¼å ä¸ºå®æ¶å¨çå»¶æ¶ // 并䏿¯åç¡®çæ¶é´ï¼å¾å¯è½ä½ 设置äº2ç§ // 使¯ä»éè¦2.2ç§æè§¦åï¼è¿æ¶åå°±ä¼è¿å ¥è¿ä¸ªæ¡ä»¶ if (remaining <= 0 || remaining > wait) { // 妿åå¨å®æ¶å¨å°±æ¸ çæå¦åä¼è°ç¨äºæ¬¡åè° if (timeout) { clearTimeout(timeout); timeout = null; } previous = now; result = func.apply(context, args); if (!timeout) context = args = null; } else if (!timeout && options.trailing !== false) { // 夿æ¯å¦è®¾ç½®äºå®æ¶å¨å trailing // 没æçè¯å°±å¼å¯ä¸ä¸ªå®æ¶å¨ // å¹¶ä¸ä¸è½ä¸è½åæ¶è®¾ç½® leading å trailing timeout = setTimeout(later, remaining); } return result; }; }; 86 è°è°åéæåï¼ å½æ§è¡ JS ä»£ç æ¶ï¼ä¼çææ§è¡ç¯å¢ï¼åªè¦ä»£ç 䏿¯åå¨å½æ°ä¸çï¼å°±æ¯å¨å ¨å±æ§è¡ç¯å¢ä¸ï¼å½æ°ä¸ç代ç ä¼äº§ç彿°æ§è¡ç¯å¢ï¼åªæ¤ä¸¤ç§æ§è¡ç¯å¢æ¥ä¸æ¥è®©æä»¬çä¸ä¸ªèç常è°çä¾åï¼var b() // call b console.log(a) // undefined
var a = 'Hello world'
function b() { console.log('call b') } ::: tip åéæå è¿æ¯å ä¸ºå½æ°ååéæåçåå ãé常æåçè§£éæ¯è¯´å°å£°æç代ç ç§»å¨å°äºé¡¶é¨ï¼è¿å ¶å®æ²¡æä»ä¹é误ï¼ä¾¿äºå¤§å®¶çè§£ã使¯æ´åç¡®çè§£éåºè¯¥æ¯ï¼å¨çææ§è¡ç¯å¢æ¶ï¼ä¼æä¸¤ä¸ªé¶æ®µã第ä¸ä¸ªé¶æ®µæ¯å建çé¶æ®µï¼JS è§£éå¨ä¼æ¾åºéè¦æåçåéå彿°ï¼å¹¶ä¸ç»ä»ä»¬æåå¨å åä¸å¼è¾å¥½ç©ºé´ï¼å½æ°çè¯ä¼å°æ´ä¸ªå½æ°åå ¥å åä¸ï¼åéåªå£°æå¹¶ä¸èµå¼ä¸º undefinedï¼æä»¥å¨ç¬¬äºä¸ªé¶æ®µï¼ä¹å°±æ¯ä»£ç æ§è¡é¶æ®µï¼æä»¬å¯ä»¥ç´æ¥æåä½¿ç¨ :::
卿åçè¿ç¨ä¸ï¼ç¸åç彿°ä¼è¦çä¸ä¸ä¸ªå½æ°ï¼å¹¶ä¸å½æ°ä¼å äºåéæå
b() // call b second
function b() { console.log('call b fist') } function b() { console.log('call b second') } var b = 'Hello world' å¤å¶ä»£ç var ä¼äº§çå¾å¤éè¯¯ï¼æä»¥å¨ ES6ä¸å¼å ¥äº letãlet ä¸è½å¨å£°æå使ç¨ï¼ä½æ¯è¿å¹¶ä¸æ¯å¸¸è¯´ç let ä¸ä¼æåï¼let æåäºï¼å¨ç¬¬ä¸é¶æ®µå åä¹å·²ç»ä¸ºä»å¼è¾å¥½äºç©ºé´ï¼ä½æ¯å 为è¿ä¸ªå£°æçç¹æ§å¯¼è´äºå¹¶ä¸è½å¨å£°æå使ç¨
åãjQuery 1 ä½ è§å¾jQueryæzeptoæºç æåªäºåç好çå°æ¹ jqueryæºç å°è£ å¨ä¸ä¸ªå¿å彿°çèªæ§è¡ç¯å¢ä¸ï¼æå©äºé²æ¢åéçå ¨å±æ±¡æï¼ç¶åéè¿ä¼ å ¥windowå¯¹è±¡åæ°ï¼å¯ä»¥ä½¿window对象ä½ä¸ºå±é¨åé使ç¨ï¼å¥½å¤æ¯å½jqueryä¸è®¿é®windowå¯¹è±¡çæ¶åï¼å°±ä¸ç¨å°ä½ç¨åé¾éåå°é¡¶å±ä½ç¨åäºï¼ä»èå¯ä»¥æ´å¿«ç访é®window对象ãåæ ·ï¼ä¼ å ¥undefinedåæ°ï¼å¯ä»¥ç¼©çæ¥æ¾undefinedæ¶çä½ç¨åé¾ (function( window, undefined ) {
//ç¨ä¸ä¸ªå½æ°åå èµ·æ¥ï¼å°±æ¯æè°çæ²ç®± //å¨è¿éè¾¹varå®ä¹çåéï¼å±äºè¿ä¸ªå½æ°åå çå±é¨åéï¼é¿å 污æå ¨å± //æå½åæ²ç®±éè¦çå¤é¨åééè¿å½æ°åæ°å¼å ¥è¿æ¥ //åªè¦ä¿è¯åæ°å¯¹å æä¾çæ¥å£çä¸è´æ§ï¼ä½ è¿å¯ä»¥éææ¿æ¢ä¼ è¿æ¥çè¿ä¸ªåæ° window.jQuery = window.$ = jQuery; })( window );jqueryå°ä¸äºåå屿§åæ¹æ³å°è£ å¨äºjquery.prototypeä¸ï¼ä¸ºäºç¼©çåç§°ï¼åèµå¼ç»äºjquery.fnï¼è¿æ¯å¾å½¢è±¡çåæ³ æä¸äºæ°ç»æå¯¹è±¡çæ¹æ³ç»å¸¸è½ä½¿ç¨å°ï¼jQueryå°å ¶ä¿å为å±é¨åé以æé«è®¿é®é度 jqueryå®ç°çé¾å¼è°ç¨å¯ä»¥è约代ç ï¼æè¿åç齿¯åä¸ä¸ªå¯¹è±¡ï¼å¯ä»¥æé«ä»£ç æç 2 jQuery çå®ç°åç (function(window, undefined) {})(window);
jQuery å©ç¨ JS 彿°ä½ç¨åçç¹æ§ï¼éç¨ç«å³è°ç¨è¡¨è¾¾å¼å 裹äºèªèº«ï¼è§£å³å½å空é´ååéæ±¡æé®é¢
window.jQuery = window.$ = jQuery;
å¨éå å½ä¸å° jQuery å $ ç»å®å° window ä¸ï¼ä»èå° jQuery å $ æ´é²ä¸ºå ¨å±åé
3 jQuery.fn ç init æ¹æ³è¿åç this æçæ¯ä»ä¹å¯¹è±¡ jQuery.fn ç init æ¹æ³ è¿åç this å°±æ¯ jQuery 对象 ç¨æ·ä½¿ç¨ jQuery() æ $() å³å¯åå§å jQuery 对象ï¼ä¸éè¦å¨æçå»è°ç¨ init æ¹æ³ 4 jQuery.extend ä¸ jQuery.fn.extend çåºå« $.fn.extend() å $.extend() æ¯ jQuery 为æ©å±æä»¶ææ±äºä¸¤ä¸ªæ¹æ³ $.extend(object); // 为jQueryæ·»å âéææ¹æ³âï¼å·¥å ·æ¹æ³ï¼ $.extend({ ããmin: function(a, b) { return a < b ? a : b; }, ããmax: function(a, b) { return a > b ? a : b; } }); $.min(2,3); // 2 $.max(4,5); // 5 $.extend([true,] targetObject, object1[, object2]); // 对targt对象è¿è¡æ©å± var settings = {validate:false, limit:5}; var options = {validate:true, name:"bar"}; $.extend(settings, options); // 注æï¼ä¸æ¯æç¬¬ä¸ä¸ªåæ°ä¼ false // settings == {validate:true, limit:5, name:"bar"} $.fn.extend(json); // 为jQueryæ·»å âæå彿°âï¼å®ä¾æ¹æ³ï¼ $.fn.extend({ alertValue: function() { $(this).click(function(){ alert($(this).val()); }); } });
$("#email").alertValue(); 5 jQuery ç屿§æ·è´(extend)çå®ç°åçæ¯ä»ä¹ï¼å¦ä½å®ç°æ·±æ·è´ æµ æ·è´ï¼åªå¤å¶ä¸ä»½åå§å¯¹è±¡çå¼ç¨ï¼ var newObject = $.extend({}, oldObject);
æ·±æ·è´ï¼å¯¹åå§å¯¹è±¡å±æ§æå¼ç¨ç对象è¿è¡è¿è¡é彿·è´ï¼ var newObject = $.extend(true, {}, oldObject);
6 jQuery çé忝å¦ä½å®ç°ç jQuery æ ¸å¿ä¸æä¸ç»éåæ§å¶æ¹æ³ï¼ç± queue()/dequeue()/clearQueue() ä¸ä¸ªæ¹æ³ç»æã 主è¦åºç¨äº animate()ï¼ajaxï¼å ¶ä»è¦ææ¶é´é¡ºåºæ§è¡çäºä»¶ä¸ var func1 = function(){alert('äºä»¶1');} var func2 = function(){alert('äºä»¶2');} var func3 = function(){alert('äºä»¶3');} var func4 = function(){alert('äºä»¶4');}
// å ¥æ éåäºä»¶ $('#box').queue("queue1", func1); // push func1 to queue1 $('#box').queue("queue1", func2); // push func2 to queue1
// æ¿æ¢éåäºä»¶ $('#box').queue("queue1", []); // delete queue1 with empty array $('#box').queue("queue1", [func3, func4]); // replace queue1
// è·åéåäºä»¶ï¼è¿åä¸ä¸ªå½æ°æ°ç»ï¼ $('#box').queue("queue1"); // [func3(), func4()]
// åºæ éåäºä»¶å¹¶æ§è¡ $('#box').dequeue("queue1"); // return func3 and do func3 $('#box').dequeue("queue1"); // return func4 and do func4
// æ¸ ç©ºæ´ä¸ªéå $('#box').clearQueue("queue1"); // delete queue1 with clearQueue 7 jQuery ä¸ç bind(), live(), delegate(), on()çåºå« bind ç´æ¥ç»å®å¨ç®æ å ç´ ä¸ live éè¿åæ³¡ä¼ æäºä»¶ï¼é»è®¤documentä¸ï¼æ¯æå¨ææ°æ® delegate æ´ç²¾ç¡®çå°èå´ä½¿ç¨äºä»¶ä»£çï¼æ§è½ä¼äº live on æ¯ææ°ç1.9çæ¬æ´åäºä¹åçä¸ç§æ¹å¼çæ°äºä»¶ç»å®æºå¶ 8 æ¯å¦ç¥éèªå®ä¹äºä»¶ äºä»¶å³âåå¸/订é âæ¨¡å¼ï¼èªå®ä¹äºä»¶å³âæ¶æ¯åå¸âï¼äºä»¶ççå¬å³â订é 订é â JS åçæ¯æèªå®ä¹äºä»¶ï¼ç¤ºä¾ï¼ document.createEvent(type); // å建äºä»¶ event.initEvent(eventType, canBubble, prevent); // åå§åäºä»¶ target.addEventListener('dataavailable', handler, false); // çå¬äºä»¶ target.dispatchEvent(e); // 触åäºä»¶ jQuery éç fire 彿°ç¨äºè°ç¨jQueryèªå®ä¹äºä»¶å表ä¸çäºä»¶ 9 jQuery éè¿åªä¸ªæ¹æ³å Sizzle éæ©å¨ç»åç Sizzle éæ©å¨éå Right To Left çå¹é 模å¼ï¼å æå¯»ææå¹é æ ç¾ï¼å夿å®çç¶èç¹ jQuery éè¿ $(selecter).find(selecter); å Sizzle éæ©å¨ç»å 10 jQuery ä¸å¦ä½å°æ°ç»è½¬å为 JSON å符串ï¼ç¶åå转å忥 // éè¿åç JSON.stringify/JSON.parse æ©å± jQuery å®ç° $.array2json = function(array) { return JSON.stringify(array); }
$.json2array = function(array) { // $.parseJSON(array); // 3.0 å¼å§ï¼å·²è¿æ¶ return JSON.parse(array); }
// è°ç¨ var json = $.array2json(['a', 'b', 'c']); var array = $.json2array(json); 11 jQuery ä¸ä¸ªå¯¹è±¡å¯ä»¥åæ¶ç»å®å¤ä¸ªäºä»¶ï¼è¿æ¯å¦ä½å®ç°ç $("#btn").on("mouseover mouseout", func);
$("#btn").on({ mouseover: func1, mouseout: func2, click: func3 }); 12 é对 jQuery çä¼åæ¹æ³ ç¼åé¢ç¹æä½DOM对象 å°½é使ç¨idéæ©å¨ä»£æ¿classéæ©å¨ æ»æ¯ä»#id鿩卿¥ç»§æ¿ å°½é使ç¨é¾å¼æä½ ä½¿ç¨æ¶é´å§æ on ç»å®äºä»¶ éç¨jQueryçå é¨å½æ°data()æ¥å卿°æ® ä½¿ç¨ææ°çæ¬ç jQuery 13 jQuery ç slideUp å¨ç»ï¼å½é¼ æ å¿«éè¿ç»è§¦å, å¨ç»ä¼æ»åå夿§è¡ï¼è¯¥å¦ä½å¤çå¢ å¨è§¦åå ç´ ä¸çäºä»¶è®¾ç½®ä¸ºå»¶è¿å¤çï¼ä½¿ç¨ JS åç setTimeout æ¹æ³ å¨è§¦åå ç´ çäºä»¶æ¶é¢å 忢ææçå¨ç»ï¼åæ§è¡ç¸åºçå¨ç»äºä»¶ï¼$('.tab').stop().slideUp(); 14 jQuery UI å¦ä½èªå®ä¹ç»ä»¶ éè¿å $.widget() ä¼ éç»ä»¶åç§°åä¸ä¸ªåå对象æ¥å®æ $.widget("ns.widgetName", [baseWidget], widgetPrototype); 15 jQuery ä¸ jQuery UIãjQuery Mobile åºå« jQuery æ¯ JS åºï¼å ¼å®¹åç§PCæµè§å¨ï¼ä¸»è¦ç¨ä½æ´æ¹ä¾¿å°å¤ç DOMãäºä»¶ãå¨ç»ãAJAX
jQuery UI æ¯å»ºç«å¨ jQuery åºä¸çä¸ç»ç¨æ·çé¢äº¤äºãç¹æãå°é¨ä»¶å主é¢
jQuery Mobile 以 jQuery 为åºç¡ï¼ç¨äºå建âç§»å¨Webåºç¨âçæ¡æ¶
16 jQuery å Zepto çåºå«ï¼ åèªç使ç¨åºæ¯ jQuery 主è¦ç®æ æ¯PCçç½é¡µä¸ï¼å ¼å®¹å ¨é¨ä¸»æµæµè§å¨ãå¨ç§»å¨è®¾å¤æ¹é¢ï¼åç¬æ¨åº
jQuery Mobile Zepto ä»ä¸å¼å§å°±å®ä½ç§»å¨è®¾å¤ï¼ç¸å¯¹æ´è½»é级ãå®ç API åºæ¬å ¼å®¹ jQueryï¼ä½å¯¹PCæµè§å¨å ¼å®¹ä¸çæ³ 17 jQuery对象çç¹ç¹ åªæ JQuery 对象æè½ä½¿ç¨ JQuery æ¹æ³ JQuery 对象æ¯ä¸ä¸ªæ°ç»å¯¹è±¡ äºãBootstrap 1 ä»ä¹æ¯Bootstrapï¼ä»¥å为ä»ä¹è¦ä½¿ç¨Bootstrapï¼ Bootstrap æ¯ä¸ä¸ªç¨äºå¿«éå¼å Web åºç¨ç¨åºåç½ç«çåç«¯æ¡æ¶ãBootstrap æ¯åºäº HTMLãCSSãJAVASCRIPT çBootstrapå ·æç§»å¨è®¾å¤ä¼å ãæµè§å¨æ¯æè¯å¥½ã容æä¸æãååºå¼è®¾è®¡çä¼ç¹ï¼æä»¥Bootstrap被广æ³åºç¨ 2 使ç¨Bootstrapæ¶ï¼è¦å£°æçææ¡£ç±»åæ¯ä»ä¹ï¼ä»¥å为ä»ä¹è¦è¿æ ·å£°æï¼ 使ç¨Bootstrapæ¶ï¼éè¦ä½¿ç¨ HTML5 ææ¡£ç±»åï¼Doctypeï¼ã å 为Bootstrap 使ç¨äºä¸äº HTML5 å ç´ å CSS 屿§ï¼å¦æå¨ Bootstrap å建çç½é¡µå¼å¤´ä¸ä½¿ç¨ HTML5 çææ¡£ç±»åï¼Doctypeï¼ï¼å¯è½ä¼é¢ä¸´ä¸äºæµè§å¨æ¾ç¤ºä¸ä¸è´çé®é¢ï¼çè³å¯è½é¢ä¸´ä¸äºç¹å®æ å¢ä¸çä¸ä¸è´ï¼ä»¥è´äºä»£ç ä¸è½éè¿ W3C æ åçéªè¯ 3 ä»ä¹æ¯Bootstrapç½æ ¼ç³»ç» Bootstrap å å«äºä¸ä¸ªååºå¼çãç§»å¨è®¾å¤ä¼å çãä¸åºå®çç½æ ¼ç³»ç»ï¼å¯ä»¥éçè®¾å¤æè§å£å¤§å°çå¢å èéå½å°æ©å±å° 12 åãå®å å«äºç¨äºç®åçå¸å±é项çé¢å®ä¹ç±»ï¼ä¹å å«äºç¨äºçææ´å¤è¯ä¹å¸å±çåè½å¼ºå¤§çæ··åç±»
ååºå¼ç½æ ¼ç³»ç»éçå±å¹æè§å£ï¼viewportï¼å°ºå¯¸çå¢å ï¼ç³»ç»ä¼èªå¨å为æå¤12åã 4 Bootstrap ç½æ ¼ç³»ç»ï¼Grid Systemï¼çå·¥ä½åç ï¼1ï¼è¡å¿ é¡»æ¾ç½®å¨Â .container class å ï¼ä»¥ä¾¿è·å¾éå½ç对é½ï¼alignmentï¼åå è¾¹è·ï¼paddingï¼ã ï¼2ï¼ä½¿ç¨è¡æ¥å建åçæ°´å¹³ç»ã ï¼3ï¼å 容åºè¯¥æ¾ç½®å¨åå ï¼ä¸å¯æåå¯ä»¥æ¯è¡çç´æ¥åå ç´ ã ï¼4ï¼é¢å®ä¹çç½æ ¼ç±»ï¼æ¯å¦Â .row å .col-xs-4ï¼å¯ç¨äºå¿«éåå»ºç½æ ¼å¸å±ãLESS æ··åç±»å¯ç¨äºæ´å¤è¯ä¹å¸å±ã ï¼5ï¼åéè¿å è¾¹è·ï¼paddingï¼æ¥å建åå 容ä¹é´çé´éã该å è¾¹è·æ¯éè¿Â .rows ä¸çå¤è¾¹è·ï¼marginï¼åè´ï¼è¡¨ç¤ºç¬¬ä¸ååæåä¸åçè¡åç§»ã ï¼6ï¼ç½æ ¼ç³»ç»æ¯éè¿æå®æ¨æ³è¦æ¨ªè·¨çåäºä¸ªå¯ç¨ç忥å建çãä¾å¦ï¼è¦å建ä¸ä¸ªç¸ççåï¼å使ç¨ä¸ä¸ªÂ .col-xs-4 5 对äºå类尺寸ç设å¤ï¼Bootstrap设置çclassåç¼å嫿¯ä»ä¹ è¶ å°è®¾å¤ææºï¼<768pxï¼ï¼.col-xs- å°å设å¤å¹³æ¿çµèï¼>=768pxï¼ï¼.col-sm- ä¸å设å¤å°å¼çµèï¼>=992pxï¼ï¼.col-md- 大å设å¤å°å¼çµèï¼>=1200pxï¼ï¼.col-lg- 6 Bootstrap ç½æ ¼ç³»ç»åä¸åä¹é´çé´é宽度æ¯å¤å° é´é宽度为30pxï¼ä¸ä¸ªåçæ¯è¾¹å嫿¯15pxï¼
7 妿éè¦å¨ä¸ä¸ªæ é¢çæè¾¹åå»ºå¯æ é¢ï¼å¯ä»¥ææ ·æä½ å¨å ç´ ä¸¤ææ·»å ï¼æè æ·»å .smallçclass
8 ç¨Bootstrapï¼å¦ä½è®¾ç½®æåç坹齿¹å¼ï¼ class="text-center" è®¾ç½®å± ä¸ææ¬ class="text-right" 设置åå³å¯¹é½ææ¬ class="text-left" 设置åå·¦å¯¹é½ææ¬ 9 Bootstrapå¦ä½è®¾ç½®ååºå¼è¡¨æ ¼ï¼ å¢å class="table-responsive"
10 使ç¨Bootstrapå建åç´è¡¨åçåºæ¬æ¥éª¤ï¼ ï¼1ï¼åç¶