generated at
ES5
2009/12に公開されたECMAScriptのバージョン
Internet Explorerが完全対応しているのはこのバージョンまで
一応ES6ES2015)も対応してはいるが、部分的な対応となる

主に使えない構文・オブジェクト
変数の定義に使用するletconst
varしか使えない
varはスコープの概念が薄いので不便だし、プログラムの解説記事では推奨しない構文として紹介されていることが多い
var があると古のコードの印象を受けるtakkerMijinko_SD
現代だと var の使い道は以下の2つだけだと思う
minify時に変数宣言を短くする
自動生成コードの話なので気にしなくていい
let は……?綾坂こと
コード量を極限まで減らす
preactとかで使われてたはず
つまり常人がつかう宣言じゃないtakker
Promiseが使えない
もちろんfetchもない
まあコールバックでもやればできる
インデントの幅はスペース2にしないとむずい
非同期の処理を組むのが非常にだるい
Promiseが実装されたのはES2015から
async/awaitが実装されたのはもっと先のES2017から
for...ofが使えない
そもそもiteratorの概念がない
配列(Array)をforで回すには、 for(var i = 0; i < ary.length; i++){} みたいに書くか、Array.prototype.forEach()を使うしかなかった
これ知らなかったtakker
>おまけ: for-ofでインデックス欲しい
> .entries()を使って、 [idx, e] of ... のようにすれば良い。
js
for (const [idx, e] of ["A", "B", "C"].entries()) { console.log(idx, e); }
function式はあった
クラスが無い
文字列の中に変数を入れたい場合は "foo" + bar + "baz" とするしかなかった
テンプレートリテラルを使えれば \ foo${bar}baz\ と短くシンプルに書ける
bar + "" みたいなテクニックもあったtakker
なつかしすぎるMijinko_SD
bar を文字列に変換するコード
現代語訳: \ ${bar}\
bar単体の変換であれば、可読性は String(bar) の方が高そう(Python民感)Mijinko_SD
pythonってそう書くんだtakker
f"{bar}" でもよさそう
Pythonは str(bar) 型名(値) )で変換できますねMijinko_SD
bar.toString() もありtakker

↑の「〇〇でしか使えない」と書かれている部分の〇〇を未だに使っている参考書などは、情報が古い可能性があるので要注意Mijinko_SD
使えないわけじゃないのでいいのでは...bsahd
よくわからなければとりあえずlinterの指示に従って書き換えればなんとかなるtakker
初心者さんにとってはESLintの環境構築がつらいので、Denoのオールインワン性はありがたそうMijinko_SD

現代の便利構文で対応していないものが多く、ES5で高度なプログラムを書こうとしたらだいぶ大変な気がするMijinko_SD
そこでBabelの出番かtakker