JavaScript è¯è¨å¨ç¨³æ¥åå±ãä¹ä¼å®æåºç°ä¸äºå¯¹è¯è¨çæ°æè®®ï¼å®ä»¬ä¼è¢«åæè®¨è®ºï¼å¦æè®¤ä¸ºæä»·å¼ï¼å°±ä¼è¢«å å ¥å° https://tc39.github.io/ecma262/ çå表ä¸ï¼ç¶å被å å° è§è ä¸ã
JavaScript 弿èåçå¢éå ³äºé¦å è¦å®ç°ä»ä¹æçä»ä»¬èªå·±æ³æ³ãä»ä»¬å¯è½ä¼å³å®æ§è¡èæ¡ä¸ç建议ï¼å¹¶æ¨è¿å·²ç»å¨è§èä¸çå 容ï¼å 为å®ä»¬ä¸å¤ªæè¶£æè é¾ä»¥å®ç°ã
å æ¤ï¼ä¸ä¸ª JavaScript 弿åªè½å®ç°æ åä¸çä¸é¨åæ¯å¾å¸¸è§çæ åµã
æ¥çè¯è¨ç¹æ§çå½åæ¯æç¶æçä¸ä¸ªå¾å¥½ç页颿¯ https://compat-table.github.io/compat-table/es6/ï¼å®å¾å¤§ï¼æä»¬ç°å¨è¿æå¾å¤ä¸è¥¿è¦å¦ï¼ã
ä½ä¸ºç¨åºåï¼æä»¬å¸æä½¿ç¨ææ°çç¹æ§ã好ä¸è¥¿è¶å¤è¶å¥½ï¼
å¦ä¸æ¹é¢ï¼å¦ä½è®©æä»¬ç°ä»£ç代ç å¨è¿ä¸æ¯æææ°ç¹æ§çæ§å¼æä¸å·¥ä½ï¼
æä¸¤ä¸ªå·¥ä½å¯ä»¥åå°è¿ä¸ç¹ï¼
- 转è¯å¨ï¼Transpilersï¼ã
- å«çï¼Polyfillsï¼ã
éè¿æ¬æï¼æä»¬ä¸èµ·äºè§£å®ä»¬çå·¥ä½åç以åå®ä»¬å¨ Web å¼åä¸çä½ç½®ã
转è¯å¨ï¼Transpilersï¼
转è¯å¨ æ¯ä¸ç§å¯ä»¥å°æºç è½¬è¯æå¦ä¸ç§æºç çç¹æ®ç软件ãå®å¯ä»¥è§£æï¼âé 读åçè§£âï¼ç°ä»£ä»£ç ï¼å¹¶ä½¿ç¨æ§çè¯æ³ç»æå¯¹å ¶è¿è¡éåï¼è¿èä½¿å ¶ä¹å¯ä»¥å¨æ§ç弿ä¸å·¥ä½ã
ä¾å¦ï¼å¨ ES2020 ä¹å没æâ空å¼åå¹¶è¿ç®ç¬¦â ??ãæä»¥ï¼å¦æè®¿é®è
使ç¨è¿æ¶äºçæµè§å¨è®¿é®æä»¬çç½é¡µï¼é£ä¹è¯¥æµè§å¨å¯è½å°±ä¸æç½ height = height ?? 100 è¿æ®µä»£ç çå«ä¹ã
转è¯å¨ä¼åææä»¬ç代ç ï¼å¹¶å° height ?? 100 éå为 (height !== undefined && height !== null) ? height : 100ã
// å¨è¿è¡è½¬è¯å¨ä¹å
height = height ?? 100;
// å¨è¿è¡è½¬è¯å¨ä¹å
height = (height !== undefined && height !== null) ? height : 100;
ç°å¨ï¼éåäºç代ç éç¨äºæ´æ§çæ¬ç JavaScript 弿ã
é常ï¼å¼åè ä¼å¨èªå·±çè®¡ç®æºä¸è¿è¡è½¬è¯å¨ï¼ç¶åå°è½¬è¯åç代ç é¨ç½²å°æå¡å¨ã
说å°ååï¼Babel æ¯æèåç转è¯å¨ä¹ä¸ã
ç°ä»£é¡¹ç®æå»ºç³»ç»ï¼ä¾å¦ webpackï¼æä¾äºå¨æ¯æ¬¡ä»£ç æ´æ¹æ¶èªå¨è¿è¡è½¬è¯å¨çæ¹æ³ï¼å æ¤å¾å®¹æå°ä»£ç 转è¯éæå°å¼åè¿ç¨ä¸ã
å«çï¼Polyfillsï¼
æ°çè¯è¨ç¹æ§å¯è½ä¸ä» å æ¬è¯æ³ç»æåè¿ç®ç¬¦ï¼è¿å¯è½å æ¬å å»ºå½æ°ã
ä¾å¦ï¼Math.trunc(n) æ¯ä¸ä¸ªâæªæâæ°åå°æ°é¨åç彿°ï¼ä¾å¦ Math.trunc(1.23) è¿å 1ã
å¨ä¸äºï¼éå¸¸è¿æ¶çï¼JavaScript 弿䏿²¡æ Math.trunc 彿°ï¼æä»¥è¿æ ·ç代ç 伿§è¡å¤±è´¥ã
ç±äºæä»¬è°è®ºçæ¯æ°å½æ°ï¼è䏿¯è¯æ³æ´æ¹ï¼å æ¤æ é卿¤å¤è½¬è¯ä»»ä½å 容ãæä»¬åªéè¦å£°æç¼ºå¤±ç彿°ã
æ´æ°/æ·»å æ°å½æ°çèæ¬è¢«ç§°ä¸ºâpolyfillâãå®âå¡«è¡¥âäºç©ºç½å¹¶æ·»å äºç¼ºå¤±çå®ç°ã
对äºè¿ç§ç¹æ®æ
åµï¼Math.trunc ç polyfill æ¯ä¸ä¸ªå®ç°å®çèæ¬ï¼å¦ä¸æç¤ºï¼
if (!Math.trunc) { // å¦ææ²¡æè¿ä¸ªå½æ°
// å®ç°å®
Math.trunc = function(number) {
// Math.ceil å Math.floor çè³åå¨äºä¸å¤å¹´ä»£ç JavaScript 弿ä¸
// 卿¬æç¨çåç»ç« èä¸ä¼è®²å°å®ä»¬
return number < 0 ? Math.ceil(number) : Math.floor(number);
};
}
JavaScript æ¯ä¸ç§é«åº¦å¨æçè¯è¨ãèæ¬å¯ä»¥æ·»å /ä¿®æ¹ä»»ä½å½æ°ï¼çè³å æ¬å å»ºå½æ°ã
两个æè¶£ç polyfill åºï¼
- core js æ¯æäºå¾å¤ç¹æ§ï¼å 许åªå å«éè¦çç¹æ§ã
æ»ç»
卿¬ç« ä¸ï¼æä»¬å¸ææ¿å±ä½ å¦ä¹ ç°ä»£çè³âåæ²¿âçè¯è¨ç¹æ§ï¼å³ä½¿ JavaScript å¼æè¿æ²¡æå¾å¥½å°æ¯æå®ä»¬ã
åªæ¯ä¸è¦å¿è®°ä½¿ç¨è½¬è¯å¨ï¼å¦æä½¿ç¨ç°ä»£è¯æ³æè¿ç®ç¬¦ï¼å polyfillï¼æ·»å å¯è½ç¼ºå°çç¹æ§ï¼ãå®ä»¬å°ç¡®ä¿ä»£ç è½æ£å¸¸å·¥ä½ã
ä¾å¦ï¼ä»¥åçæäº JavaScriptï¼ä½ å°±å¯ä»¥æå»ºä¸ä¸ªåºäº webpack å babel-loader æä»¶çä»£ç æå»ºç³»ç»ã
å±ç¤ºå¯¹åç§ç¹å¾çå½åæ¯ææ åµçå·¥å ·ï¼
- https://compat-table.github.io/compat-table/es6/ ââ 对äºåç JavaScriptã
- https://caniuse.com/ ââ å¯¹äºæµè§å¨ç¸å ³ç彿°ã
P.S. è°·æç Chrome æµè§å¨é常æ¯å¯¹ææ°çè¯è¨ç¹æ§çæ¯ææ åµæå¥½çæµè§å¨ï¼å¦ææç¨ç示ä¾è¿è¡å¤±è´¥ï¼è¯·å°è¯ä½¿ç¨ Chrome æµè§å¨ãä¸è¿ï¼æç¨ä¸ç大夿°ç¤ºä¾é½éç¨äºä»»æçç°ä»£æµè§å¨ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼