如题所述
ä¸ã 让代ç ç®æ´ï¼ä¸äºç®ç¥ç表达æ¹å¼ä¹ä¼äº§çå¾å¥½çä¼å
egï¼x=x+1;å¨ä¸å½±ååè½çæ åµä¸å¯ä»¥ç®å为x++;
äºã åéåæ¹æ³åå°½éå¨ä¸å½±åè¯æçæ åµä¸ç®åãï¼å¯ä»¥éæ©é¦åæ¯å½åï¼
egï¼å®ä¹æ°ç»çé¿åº¦å¯ä»¥åå为ï¼ArrLenèä¸éè¦å为ArrayLengthã
ä¸ã å ³äºJSç循ç¯ï¼å¾ªç¯æ¯ä¸ç§å¸¸ç¨çæµç¨æ§å¶ã
JSæä¾äºä¸ç§å¾ªç¯ï¼for(;;)ãwhile()ãfor(in)ãå¨è¿ä¸ç§å¾ªç¯ä¸for(in)çæçæå·®ï¼å 为å®éè¦æ¥è¯¢Hashé®ï¼å æ¤åºå°½éå°ç¨for(in)循ç¯ï¼for(;;)ãwhile()循ç¯çæ§è½åºæ¬æå¹³ãå½ç¶ï¼æ¨è使ç¨for循ç¯ï¼å¦æ循ç¯åééå¢æéåï¼ä¸è¦åç¬å¯¹å¾ªç¯åéèµå¼ï¼èåºè¯¥ä½¿ç¨åµå¥ç++æâè¿ç®ç¬¦ã
åã å¦æéè¦éåæ°ç»ï¼åºè¯¥å ç¼åæ°ç»é¿åº¦ï¼å°æ°ç»é¿åº¦æ¾å ¥å±é¨åéä¸ï¼é¿å å¤æ¬¡æ¥è¯¢æ°ç»é¿åº¦ã
å 为æ们常常è¦æ ¹æ®å符串ãæ°ç»çé¿åº¦è¿è¡å¾ªç¯ï¼èé常è¿ä¸ªé¿åº¦æ¯ä¸åçï¼æ¯å¦æ¯æ¬¡æ¥è¯¢a.lengthï¼å°±è¦é¢å¤è¿è¡ä¸ä¸ªæä½ï¼èé¢å ævar len=a.lengthï¼åå°±å°äºä¸æ¬¡æ¥è¯¢ã
äºã å°½ééç¨å±é¨åéèä¸æ¯å ¨å±åéã
å±é¨åéç访é®é度è¦æ¯å ¨å±åéç访é®é度æ´å¿«ï¼å ä¸ºå ¨å±åéå ¶å®æ¯window对象çæåï¼èå±é¨åéæ¯æ¾å¨å½æ°çæ éçã
å ã å°½éå°ä½¿ç¨evalã
æ¯æ¬¡ä½¿ç¨evaléè¦æ¶è大éæ¶é´ï¼è¿æ¶å使ç¨JSææ¯æçéå å¯ä»¥å®ç°å½æ°æ¨¡æ¿ã
ä¸ã åå°å¯¹è±¡æ¥æ¾
å 为JavaScriptç解éæ§ï¼æ以a.b.c.d.eï¼éè¦è¿è¡è³å°4次æ¥è¯¢æä½ï¼å æ£æ¥aåæ£æ¥aä¸çbï¼åæ£æ¥bä¸çcï¼å¦æ¤å¾ä¸ãæ以å¦æè¿æ ·ç表达å¼éå¤åºç°ï¼åªè¦å¯è½ï¼åºè¯¥å°½éå°åºç°è¿æ ·ç表达å¼ï¼å¯ä»¥å©ç¨å±é¨åéï¼æå®æ¾å ¥ä¸ä¸ªä¸´æ¶çå°æ¹è¿è¡æ¥è¯¢ã
å «ã å符串è¿æ¥ã
å¦ææ¯è¿½å å符串ï¼æ好使ç¨s+=anotherStræä½ï¼èä¸æ¯è¦ä½¿ç¨s=s+anotherStrã
å¦æè¦è¿æ¥å¤ä¸ªå符串ï¼åºè¯¥å°ä½¿ç¨+=ï¼å¦s+=a;s+=b;s+=c;åºè¯¥åæs+=a + b + cï¼
èå¦ææ¯æ¶éå符串ï¼æ¯å¦å¤æ¬¡å¯¹åä¸ä¸ªå符串è¿è¡+=æä½çè¯ï¼æ好使ç¨ä¸ä¸ªç¼åãæä¹ç¨å¢ï¼ä½¿ç¨JavaScriptæ°ç»æ¥æ¶éï¼æå使ç¨joinæ¹æ³è¿æ¥èµ·æ¥ï¼å¦ä¸
var buf = new Array();for(var i = 0; i < 100; i++){ buf.push(i.toString());}var all = buf.join("");
ä¹ã ç±»å转æ¢
1. ææ°å转æ¢æå符串ï¼åºç¨"" + 1ï¼è½ç¶çèµ·æ¥æ¯è¾ä¸ä¸ç¹ï¼ä½äºå®ä¸è¿ä¸ªæçæ¯æé«çï¼æ§è½ä¸æ¥è¯´ï¼("" +) > String() > .toString() > new String()
å°½é使ç¨ç¼è¯æ¶å°±è½ä½¿ç¨çå é¨æä½è¦æ¯è¿è¡æ¶ä½¿ç¨çç¨æ·æä½è¦å¿«ã
String()å±äºå é¨å½æ°ï¼æ以é度å¾å¿«ï¼è.toString()è¦æ¥è¯¢ååä¸çå½æ°ï¼æ以é度éè²ä¸äºï¼new String()ç¨äºè¿åä¸ä¸ªç²¾ç¡®çå¯æ¬ã
2. æµ®ç¹æ°è½¬æ¢ææ´åï¼è¿ä¸ªæ´å®¹æåºéï¼å¾å¤äººå欢使ç¨parseInt()ï¼å ¶å®parseInt()æ¯ç¨äºå°å符串转æ¢ææ°åï¼èä¸æ¯æµ®ç¹æ°åæ´åä¹é´ç转æ¢ï¼æ们åºè¯¥ä½¿ç¨Math.floor()æè Math.round()ãMathæ¯å é¨å¯¹è±¡ï¼æ以Math.floor()å ¶å®å¹¶æ²¡æå¤å°æ¥è¯¢æ¹æ³åè°ç¨çæ¶é´ï¼é度æ¯æå¿«çã
3. 对äºèªå®ä¹ç对象ï¼å¦æå®ä¹äºtoString()æ¹æ³æ¥è¿è¡ç±»å转æ¢çè¯ï¼æ¨èæ¾å¼è°ç¨toString()ï¼å 为å é¨çæä½å¨å°è¯ææå¯è½æ§ä¹åï¼ä¼å°è¯å¯¹è±¡çtoString()æ¹æ³å°è¯è½å¦è½¬å为Stringï¼æ以ç´æ¥è°ç¨è¿ä¸ªæ¹æ³æçä¼æ´é«
åã å°½éä½ç¨JSONæ ¼å¼æ¥å建对象ï¼èä¸æ¯var obj=new Object()æ¹æ³ã
å 为åè æ¯ç´æ¥å¤å¶ï¼èåè éè¦è°ç¨æé å¨ï¼å èåè çæ§è½æ´å¥½ã
åä¸ã å½éè¦ä½¿ç¨æ°ç»æ¶ï¼ä¹å°½é使ç¨JSONæ ¼å¼çè¯æ³ï¼
使ç¨JSONæ ¼å¼çè¯æ³å³ç´æ¥ä½¿ç¨å¦ä¸è¯æ³å®ä¹æ°ç»ï¼[parrm,param,param...],èä¸æ¯éç¨new Array(parrm,param,param...)è¿ç§è¯æ³ãå 为使ç¨JSONæ ¼å¼çè¯æ³æ¯å¼æç´æ¥è§£éçãèåè åéè¦è°ç¨Arrayçæé å¨ã
åäºã 对å符串è¿è¡å¾ªç¯æä½ï¼ä¾å¦æ¿æ¢ãæ¥æ¾ï¼å°±ä½¿ç¨æ£å表达å¼ã
å 为JSç循ç¯é度æ¯è¾æ ¢ï¼èæ£å表达å¼çæä½æ¯ç¨CåæçAPIï¼æ§è½æ¯è¾å¥½ã
åä¸ã æå ¥HTML
å¾å¤äººå欢å¨JavaScriptä¸ä½¿ç¨document.writeæ¥ç»é¡µé¢çæå 容ãäºå®ä¸è¿æ ·çæçè¾ä½ï¼å¦æéè¦ç´æ¥æå ¥HTMLï¼å¯ä»¥æ¾ä¸ä¸ªå®¹å¨å ç´ ï¼æ¯å¦æå®ä¸ä¸ªdivæè spanï¼å¹¶è®¾ç½®ä»ä»¬çinnerHTMLæ¥å°èªå·±çHTML代ç æå ¥å°é¡µé¢ä¸ã
ååã 对象æ¥è¯¢
使ç¨[ââ]æ¥è¯¢è¦æ¯.items()æ´å¿«
åäºã å®æ¶å¨
å¦æé对çæ¯ä¸æè¿è¡ç代ç ï¼ä¸åºè¯¥ä½¿ç¨setTimeoutï¼èåºè¯¥æ¯ç¨setIntervalãsetTimeoutæ¯æ¬¡è¦éæ°è®¾ç½®ä¸ä¸ªå®æ¶å¨ã
åå ã å°½éåå°DOMè°ç¨
å¨Webå¼åä¸ï¼JavaScriptçä¸ä¸ªå¾éè¦çä½ç¨å°±æ¯å¯¹DOMè¿è¡æä½ãå¯æ¯å¯¹DOMçæä½æ¯é常æè´µçï¼å 为è¿ä¼å¯¼è´æµè§å¨æ§è¡åæµ ï¼reflowï¼æä½ãæ们åºè¯¥å°½å¯è½çåå°DOMæä½ã
egï¼x=x+1;å¨ä¸å½±ååè½çæ åµä¸å¯ä»¥ç®å为x++;
äºã åéåæ¹æ³åå°½éå¨ä¸å½±åè¯æçæ åµä¸ç®åãï¼å¯ä»¥éæ©é¦åæ¯å½åï¼
egï¼å®ä¹æ°ç»çé¿åº¦å¯ä»¥åå为ï¼ArrLenèä¸éè¦å为ArrayLengthã
ä¸ã å ³äºJSç循ç¯ï¼å¾ªç¯æ¯ä¸ç§å¸¸ç¨çæµç¨æ§å¶ã
JSæä¾äºä¸ç§å¾ªç¯ï¼for(;;)ãwhile()ãfor(in)ãå¨è¿ä¸ç§å¾ªç¯ä¸for(in)çæçæå·®ï¼å 为å®éè¦æ¥è¯¢Hashé®ï¼å æ¤åºå°½éå°ç¨for(in)循ç¯ï¼for(;;)ãwhile()循ç¯çæ§è½åºæ¬æå¹³ãå½ç¶ï¼æ¨è使ç¨for循ç¯ï¼å¦æ循ç¯åééå¢æéåï¼ä¸è¦åç¬å¯¹å¾ªç¯åéèµå¼ï¼èåºè¯¥ä½¿ç¨åµå¥ç++æâè¿ç®ç¬¦ã
åã å¦æéè¦éåæ°ç»ï¼åºè¯¥å ç¼åæ°ç»é¿åº¦ï¼å°æ°ç»é¿åº¦æ¾å ¥å±é¨åéä¸ï¼é¿å å¤æ¬¡æ¥è¯¢æ°ç»é¿åº¦ã
å 为æ们常常è¦æ ¹æ®å符串ãæ°ç»çé¿åº¦è¿è¡å¾ªç¯ï¼èé常è¿ä¸ªé¿åº¦æ¯ä¸åçï¼æ¯å¦æ¯æ¬¡æ¥è¯¢a.lengthï¼å°±è¦é¢å¤è¿è¡ä¸ä¸ªæä½ï¼èé¢å ævar len=a.lengthï¼åå°±å°äºä¸æ¬¡æ¥è¯¢ã
äºã å°½ééç¨å±é¨åéèä¸æ¯å ¨å±åéã
å±é¨åéç访é®é度è¦æ¯å ¨å±åéç访é®é度æ´å¿«ï¼å ä¸ºå ¨å±åéå ¶å®æ¯window对象çæåï¼èå±é¨åéæ¯æ¾å¨å½æ°çæ éçã
å ã å°½éå°ä½¿ç¨evalã
æ¯æ¬¡ä½¿ç¨evaléè¦æ¶è大éæ¶é´ï¼è¿æ¶å使ç¨JSææ¯æçéå å¯ä»¥å®ç°å½æ°æ¨¡æ¿ã
ä¸ã åå°å¯¹è±¡æ¥æ¾
å 为JavaScriptç解éæ§ï¼æ以a.b.c.d.eï¼éè¦è¿è¡è³å°4次æ¥è¯¢æä½ï¼å æ£æ¥aåæ£æ¥aä¸çbï¼åæ£æ¥bä¸çcï¼å¦æ¤å¾ä¸ãæ以å¦æè¿æ ·ç表达å¼éå¤åºç°ï¼åªè¦å¯è½ï¼åºè¯¥å°½éå°åºç°è¿æ ·ç表达å¼ï¼å¯ä»¥å©ç¨å±é¨åéï¼æå®æ¾å ¥ä¸ä¸ªä¸´æ¶çå°æ¹è¿è¡æ¥è¯¢ã
å «ã å符串è¿æ¥ã
å¦ææ¯è¿½å å符串ï¼æ好使ç¨s+=anotherStræä½ï¼èä¸æ¯è¦ä½¿ç¨s=s+anotherStrã
å¦æè¦è¿æ¥å¤ä¸ªå符串ï¼åºè¯¥å°ä½¿ç¨+=ï¼å¦s+=a;s+=b;s+=c;åºè¯¥åæs+=a + b + cï¼
èå¦ææ¯æ¶éå符串ï¼æ¯å¦å¤æ¬¡å¯¹åä¸ä¸ªå符串è¿è¡+=æä½çè¯ï¼æ好使ç¨ä¸ä¸ªç¼åãæä¹ç¨å¢ï¼ä½¿ç¨JavaScriptæ°ç»æ¥æ¶éï¼æå使ç¨joinæ¹æ³è¿æ¥èµ·æ¥ï¼å¦ä¸
var buf = new Array();for(var i = 0; i < 100; i++){ buf.push(i.toString());}var all = buf.join("");
ä¹ã ç±»å转æ¢
1. ææ°å转æ¢æå符串ï¼åºç¨"" + 1ï¼è½ç¶çèµ·æ¥æ¯è¾ä¸ä¸ç¹ï¼ä½äºå®ä¸è¿ä¸ªæçæ¯æé«çï¼æ§è½ä¸æ¥è¯´ï¼("" +) > String() > .toString() > new String()
å°½é使ç¨ç¼è¯æ¶å°±è½ä½¿ç¨çå é¨æä½è¦æ¯è¿è¡æ¶ä½¿ç¨çç¨æ·æä½è¦å¿«ã
String()å±äºå é¨å½æ°ï¼æ以é度å¾å¿«ï¼è.toString()è¦æ¥è¯¢ååä¸çå½æ°ï¼æ以é度éè²ä¸äºï¼new String()ç¨äºè¿åä¸ä¸ªç²¾ç¡®çå¯æ¬ã
2. æµ®ç¹æ°è½¬æ¢ææ´åï¼è¿ä¸ªæ´å®¹æåºéï¼å¾å¤äººå欢使ç¨parseInt()ï¼å ¶å®parseInt()æ¯ç¨äºå°å符串转æ¢ææ°åï¼èä¸æ¯æµ®ç¹æ°åæ´åä¹é´ç转æ¢ï¼æ们åºè¯¥ä½¿ç¨Math.floor()æè Math.round()ãMathæ¯å é¨å¯¹è±¡ï¼æ以Math.floor()å ¶å®å¹¶æ²¡æå¤å°æ¥è¯¢æ¹æ³åè°ç¨çæ¶é´ï¼é度æ¯æå¿«çã
3. 对äºèªå®ä¹ç对象ï¼å¦æå®ä¹äºtoString()æ¹æ³æ¥è¿è¡ç±»å转æ¢çè¯ï¼æ¨èæ¾å¼è°ç¨toString()ï¼å 为å é¨çæä½å¨å°è¯ææå¯è½æ§ä¹åï¼ä¼å°è¯å¯¹è±¡çtoString()æ¹æ³å°è¯è½å¦è½¬å为Stringï¼æ以ç´æ¥è°ç¨è¿ä¸ªæ¹æ³æçä¼æ´é«
åã å°½éä½ç¨JSONæ ¼å¼æ¥å建对象ï¼èä¸æ¯var obj=new Object()æ¹æ³ã
å 为åè æ¯ç´æ¥å¤å¶ï¼èåè éè¦è°ç¨æé å¨ï¼å èåè çæ§è½æ´å¥½ã
åä¸ã å½éè¦ä½¿ç¨æ°ç»æ¶ï¼ä¹å°½é使ç¨JSONæ ¼å¼çè¯æ³ï¼
使ç¨JSONæ ¼å¼çè¯æ³å³ç´æ¥ä½¿ç¨å¦ä¸è¯æ³å®ä¹æ°ç»ï¼[parrm,param,param...],èä¸æ¯éç¨new Array(parrm,param,param...)è¿ç§è¯æ³ãå 为使ç¨JSONæ ¼å¼çè¯æ³æ¯å¼æç´æ¥è§£éçãèåè åéè¦è°ç¨Arrayçæé å¨ã
åäºã 对å符串è¿è¡å¾ªç¯æä½ï¼ä¾å¦æ¿æ¢ãæ¥æ¾ï¼å°±ä½¿ç¨æ£å表达å¼ã
å 为JSç循ç¯é度æ¯è¾æ ¢ï¼èæ£å表达å¼çæä½æ¯ç¨CåæçAPIï¼æ§è½æ¯è¾å¥½ã
åä¸ã æå ¥HTML
å¾å¤äººå欢å¨JavaScriptä¸ä½¿ç¨document.writeæ¥ç»é¡µé¢çæå 容ãäºå®ä¸è¿æ ·çæçè¾ä½ï¼å¦æéè¦ç´æ¥æå ¥HTMLï¼å¯ä»¥æ¾ä¸ä¸ªå®¹å¨å ç´ ï¼æ¯å¦æå®ä¸ä¸ªdivæè spanï¼å¹¶è®¾ç½®ä»ä»¬çinnerHTMLæ¥å°èªå·±çHTML代ç æå ¥å°é¡µé¢ä¸ã
ååã 对象æ¥è¯¢
使ç¨[ââ]æ¥è¯¢è¦æ¯.items()æ´å¿«
åäºã å®æ¶å¨
å¦æé对çæ¯ä¸æè¿è¡ç代ç ï¼ä¸åºè¯¥ä½¿ç¨setTimeoutï¼èåºè¯¥æ¯ç¨setIntervalãsetTimeoutæ¯æ¬¡è¦éæ°è®¾ç½®ä¸ä¸ªå®æ¶å¨ã
åå ã å°½éåå°DOMè°ç¨
å¨Webå¼åä¸ï¼JavaScriptçä¸ä¸ªå¾éè¦çä½ç¨å°±æ¯å¯¹DOMè¿è¡æä½ãå¯æ¯å¯¹DOMçæä½æ¯é常æè´µçï¼å 为è¿ä¼å¯¼è´æµè§å¨æ§è¡åæµ ï¼reflowï¼æä½ãæ们åºè¯¥å°½å¯è½çåå°DOMæä½ã
温馨提示:答案为网友推荐,仅供参考
第1个回答 推荐于2017-11-26
客户端脚本能让你的应用更加地动态和活跃, 但是浏览器对代码的解析可能造成效率问题, 而这种性能差异在客户端之间也不尽相同。所以我们要尽可能的优化js代码,下面是对JavaScript代码优化的原则:(1)为IE6(未打补丁的JScript 5.6或更早版本)做优化!与其他语言不同,JS的效率很大程度是取决于JS engine的效率。除了引擎实现的优劣外,引擎自己也会为一些特殊的代码模式采取一些优化的策略。例如FF、Opera和Safari的JS引擎,都对字符串的拼接运算(+)做了特别优化。所以对于不同的引擎,所作的优化极有可能是背道而驰的。而如果做跨浏览器的web编程,则最大的问题是在于IE6(JScript 5.6)!因为在不打hotfix的情况下,JScript引擎的垃圾回收的bug,会导致其在真实应用中的performance跟其他浏览器根本不在一个数量级上。因此在这种场合做优化,实际上就是为JScript做优化!(2)以大规模循环体为最主要优化对象。如果你的程序已经优化到在IE6下可以接受的性能,那基本上在其他浏览器上性能就完全没有问题。因此,注意下面讲的许多问题在其他引擎上可能完全不同,例如在循环中进行字符串拼接,通常认为需要用Array.join的方式,但是由于SpiderMonkey等引擎对字符串的+运算做了优化,结果使用Array.join的效率反而不如直接用+!但是如果考虑IE6,则其他浏览器上的这种效率的差别根本不值一提。JS优化与其他语言的优化也仍然有相同之处。优化的关键,仍然是要把精力放在最关键的地方,也就是瓶颈上。一般来说,瓶颈总是出现在大规模循环的地方。这倒不是说循环本身有性能问题,而是循环会迅速放大可能存在的性能问题。(注:以下的优化原则,只在大规模循环中才有意义,在循环体之外做此类优化基本上是没有意义的)(3)尽量避免过多的引用层级和不必要的多次方法调用目前绝大多数JS引擎都是解释执行的,而解释执行的情况下,在所有操作中,函数调用的效率是较低的。此外,过深的prototype继承链或者多级引用也会降低效率。JScript中,10级引用的开销大体是一次空函数调用开销的1/2。这两者的开销都远远大于简单操作(如四则运算)。(4)尽量使用语言本身的构造函数和内建函数。值得注意的是,有些情况下看似是属性访问,实际上是方法调用。例如所有DOM的属性,实际上都是方法。在遍历一个NodeList的时候,循环条件对于nodes.length的访问,看似属性读取,实际上是等价于函数调用的。而且IE DOM的实现上,childNodes.length每次是要通过内部遍历重新计数的。(My god,但是这是真的!因为我测过,childNodes.length的访问时间与childNodes.length的值成正比!)这非常耗费。所以预先把nodes.length保存到js变量,当然可以提高遍历的性能。同样是函数调用,用户自定义函数的效率又远远低于语言内建函数,因为后者是对引擎本地方法的包装,而引擎通常是c,c++,java写的。进一步,同样的功能,语言内建构造的开销通常又比内建函数调用要效率高,因为前者在JS代码的parse阶段就可以确定和优化。(5)尽量减少不必要的对象创建。本身创建对象是有一定的代价的,但是这个代价其实并不大。最根本的问题是由于JScript愚蠢之极的垃圾回收调度算法,导致随着对象个数的增加,性能严重下降(据微软的人自己说复杂度是O(n^2))。比如我们常见的字符串拼接问题,经过我的测试验证,单纯的多次创建字符串对象其实根本不是性能差的原因。要命的是在对象创建期间的无谓的垃圾回收的开销。而Array.join的方式,不会创建中间字符串对象,因此就减少了那该死的垃圾回收的开销。因此,如果我们能把大规模对象创建转化为单一语句,则其性能会得到极大的提高!例如通过构造代码然后eval——实际上PIES项目中正在根据这个想法来做一个专门的大规模对象产生器……本回答被提问者采纳