JavaScriptè¨èªã¯çå®ã«é²åãã¦ãã¾ããè¨èªã¸ã®æ°ããªææ¡ã¯å®æçã«ã ããããããã¯åæããã価å¤ãããã¨èããããã https://tc39.github.io/ecma262/ ã®ä¸è¦§ã«è¿½å ããã仿§ ã«é²ã¿ã¾ãã
JavaScriptã¨ã³ã¸ã³ã®ãã¼ã ã¯ä½ãæåã«å®è£ ãããã«ã¤ãã¦ç¬èªã®èããæã£ã¦ãã¾ããå½¼ãã¯ãã©ããæ®µéã®ææ¡ãå®è£ ãã䏿¹ã§ãæ¢ã«ä»æ§ã¨ãªã£ããã®ã®å®è£ ããé¢ç½ããªãããããã¯ããã®ãé£ãããã¨ããçç±ã§å»¶æããããããã¾ããã
å¾ã£ã¦ãããã¨ã³ã¸ã³ã«æ¨æºä»æ§ã®ä¸é¨ã®ã¿ããå®è£ ããã¦ããªãã¨ããç¶æ³ã¯é常ã«ä¸è¬çãªãã¨ã§ãã
è¨èªæ©è½ã®ç¾å¨ã®ãµãã¼ãç¶æ³ãè¦ãã«ã¯ https://kangax.github.io/compat-table/es6/ ãè¯ããã¼ã¸ã§ã(ããã¯å¤§ãããã¾ã åå¼·ãã¹ãå¤ãã®ãã¨ãããã¾ã)ã
ããã°ã©ãã¼ã¨ãã¦ãããææ°ã®æ©è½(ãã便å©ãªãã®)ãå©ç¨ãããã§ãããã
䏿¹ãææ°ã®æ©è½ãã¾ã çè§£ã§ããªãå¤ãã¨ã³ã¸ã³ã§ææ°ã®ã³ã¼ããåä½ãããã«ã¯ã©ãããã°ããã§ããããï¼
ãã®ããã®ï¼ã¤ã®ãã¼ã«ãããã¾ãã:
- ãã©ã³ã¹ãã¤ã©
- Polyfillï¼ããªãã£ã«ï¼
ãã®ãã£ãã¿ã¼ã§ã®ç®çã¯ãããããã©ã®ããã«æ©è½ãããããã㦠Web éçºã«ããããããã®ä½ç½®ã¥ãã®è¦ç¹ãçè§£ãããã¨ã§ãã
ãã©ã³ã¹ãã¤ã©
transpilerã¯ãã½ã¼ã¹ã³ã¼ããå¥ã®ã½ã¼ã¹ã³ã¼ãã«å¤æããç¹å¥ãªã½ããã¦ã§ã¢ã§ããææ°ã®ã³ã¼ããè§£æããå¤ãæ§æã使ã£ã¦æ¸ãæãããã¨ã§ãå¤ãã¨ã³ã¸ã³ã§ãåä½ããããã«ãããã¨ãã§ãã¾ãã
E.g. 2020年以åã® JavaScript ã«ã¯ âNullå使¼ç®åâ ?? ãããã¾ããã§ããããã®ãããå¤ããã©ã¦ã¶ãå©ç¨ããã¦ããã¨ãheight = height ?? 100 ã®ãããªã³ã¼ããçè§£ã§ããªãå¯è½æ§ãããã¾ãã
ãã©ã³ã¹ãã¤ã©ã¯ã³ã¼ããåæããheight ?? 100 ã (height !== undefined && height !== null) ? height : 100 ã«æ¸ãæãã¾ãã
// ãã©ã³ã¹ãã¤ã©å®è¡å
height = height ?? 100;
// ãã©ã³ã¹ãã¤ã©å®è¡å¾
height = (height !== undefined && height !== null) ? height : 100;
ãããã£ã¦æ¸ãæããããã³ã¼ãã¯ãå¤ã JavaScript ã¨ã³ã¸ã³ã«ã対å¿ãã¦ãã¾ãã
é常ãéçºè ã¯èªèº«ã®ã³ã³ãã¥ã¼ã¿ä¸ã§ãã©ã³ã¹ãã¤ã©ãå®è¡ãããã©ã³ãã¤ã«ããã³ã¼ãããµã¼ãã«ãããã¤ãã¾ãã
ååãæããã¨ããã°ãBabel ã¯ä¸ã®ä¸ã§æãèåãªãã©ã³ã¹ãã¤ã©ã®1ã¤ã§ãã
webpack ã®ãããªææ°ã®ããã¸ã§ã¯ããã«ãã·ã¹ãã ã¯ãã³ã¼ãã夿´ããããã³ã«èªåçã«ãã©ã³ã¹ãã¤ã©ãå®è¡ããææ®µãæä¾ãã¦ãããããéçºããã»ã¹çµã¿è¾¼ãã®ã¯ã¨ã¦ãç°¡åã§ãã
Polyfills
æ°ããè¨èªã®æ©è½ã«ã¯ãæ§ææ§é ãæ¼ç®åã ãã§ãªãçµã¿è¾¼ã¿ã®é¢æ°ãå«ãã§ããå¯è½æ§ãããã¾ãã
ä¾ãã°ãMath.trunc(n) ã¯æ°å¤ã®å°æ°é¨åã âåãåãâ 颿°ã§ãä¾ãã° Math.trunc(1.23) = 1 ã¨ãªãã¾ãã
(é常ã«å¤ã) JavaScript ã¨ã³ã¸ã³ã§ã¯ãMath.trunc ã¯åå¨ããªããããã®ãããªã³ã¼ãã¯å¤±æãã¾ãã
æ§æå¤æ´ã§ã¯ãªããæ°ãã颿°ã«ã¤ãã¦è©±ãã¦ããã®ã§ãããã§ã¯ãã©ã³ã¹ãã¤ã«ã¯å¿ è¦ããã¾ãããåã«ä¸è¶³ãã¦ãã颿°ãå®ç¾©ããå¿ è¦ãããã¾ãã
æ°ããæ©è½ãæ´æ°/追å ããã¹ã¯ãªãã㯠âpolyfillâ ã¨å¼ã°ãã¾ããã®ã£ããã âåãâãä¸è¶³ãã¦ããå®è£ ã追å ãã¾ãã
ä»åã®ã±ã¼ã¹ã§ã¯ãMath.tranc ã® polyfill ã¯ã以ä¸ã®ããã«ãã®æ©è½ãå®è£
ããã¹ã¯ãªããã§ã:
if (!Math.trunc) { //颿°ããªãå ´å
// å®è£
ãã
Math.trunc = function(number) {
// Math.ceil 㨠Math.floor ã¯å¤ã JavaScript ã¨ã³ã¸ã³ã«ãåå¨ãã¾ã
// ãããã¯ãã¥ã¼ããªã¢ã«ã§å¾ã»ã©èª¬æãã¾ã
return number < 0 ? Math.ceil(number) : Math.floor(number);
};
}
JavaScript ã¯é常ã«åçãªè¨èªã§ãããã¹ã¯ãªããã¯çµã¿è¾¼ã¿é¢æ°ãå«ãã¦ãä»»æã®é¢æ°ã追å ï¼å¤æ´ã§ãã¾ãã
2ã¤ã®è峿·±ãã©ã¤ãã©ãªãããã¾ã:
- å¤ãããµãã¼ããã core jsã¯ãå¿ è¦ãªæ©è½ã®ã¿ãå«ããäºãã§ãã¾ãã
- æ©è½ããã©ã¦ã¶ã«å¿ãã Polyfill ãå«ãã¹ã¯ãªãããæä¾ãã polyfill.io ãµã¼ãã¹ã§ãã
ãµããª
ãã®ç« ã¯ããã¨ã JavaScript ã¨ã³ã¸ã³ã§ã¾ã ååã«ãµãã¼ãããã¦ããªãã¨ãã¦ããææ°ã®ãããã¦æå 端ã®è¨èªæ©è½ãå¦ç¿ããããã«åæ©ã¥ãããã¨ãç®çã¨ãã¦ãã¾ãã
ãã©ã³ã¹ãã¤ã©ï¼ææ°ã®æ§æãæ¼ç®åã使ç¨ããå ´åï¼ã¨ polyfillï¼ä¸è¶³ãã¦ãã颿°ã追å ããããï¼ã使ç¨ãããã¨ãå¿ããªãã§ãã ããããããã«ãããã³ã¼ããæ©è½ãããã¨ãä¿è¨¼ããã¾ãã
ä¾ãã°ãä»å¾ JavaScript ã«æ £ããããbabel-loader ãã©ã°ã¤ã³ãæã¤ webpack ããã¼ã¹ã«ããã³ã¼ããã«ãã·ã¹ãã ãã»ããã¢ããã§ãã¾ãã
è¤æ°ã®æ©è½ã«é¢ããç¾å¨ã®ãµãã¼ãç¶æ³ãè¦ãããã®ä¾¿å©ãªãµã¤ãã§ã:
- https://kangax.github.io/compat-table/es6/ â ç´ç²ãª JavaScript.
- https://caniuse.com/ â ãã©ã¦ã¶ã«é¢é£ãã颿°.
P.S. Google Chrome ã¯ãé常ãæãææ°ã®è¨èªæ©è½ãæã£ã¦ããããããã¥ã¼ããªã¢ã«ã®ãã¢ã失æããå ´åã«ã¯ Chrome ã§è©¦ãã¦ã¿ã¦ãã ããããã ããã»ã¨ãã©ã®ãã¥ã¼ããªã¢ã«ã®ãã¢ã¯ãææ°ã®ãã©ã¦ã¶ã§åä½ãã¾ãã

ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã