JavaScript 推移 ECMScript2022まで

JavaScriptが出た時はブラウザでしか実行できなくて、MicrosoftのVisual Basicとよく似てて簡単だなぁって思ってましたが、今ではNodeJS等バックエンドでも動作し、インタラクティブなAngular、React、VueやElectronなどもあり、更にバージョンの進化も早く、今では多様な事をこなせる言語になっていますね。 C++に近づいておりJavaScriptも難解になってきています。

JavaScriptの生い立ち

JavaScriptはNetscape社が開発し1996年にJavaScript1.0を出しましたが、1997年からECMA(European Computer Manufacturers Association)が標準化を進め、ECMAScript(ECMA-262)となった。 その後、ECMA Internationalになり欧州だけでなく国際標準となった。

ECMAScript2022 (ES13)

  • Top level await
  • class フィールド宣言 constructor(){}内でthis.name =’ichiri’としなくてもよくなった
  • プライベート宣言 変数やメソッドの先頭に#を付けるとprivateとなる
  • static classで初期化用の式(equation)はclass外部で処理していたが、class内で処理できるようになった
  • #brand in obj  instanceの親classの確認正確化
  • 正規表現 /…/d
  • try catchのエラーチェーン {cause:e}  e.cause  これからは、throw new Error()の中には、必ずエラーメッセージと{cause:e}の両方を入れる必要がある。
  • at(-n)  ---Pythonみたい
  • Object.hasOwn(object, property)

ECMAScript2021 (ES12)

  • 論理代入演算子 ||=, &&~, ??=
  • 数値セパレータ 1_000_000, 0b_1110_1001, 0x_abcd_123f
  • string.replaceAll()
  • Promise.any()
  • 弱参照 WeakRefs

ECMAScript2020 (ES11)

  • BitInt
  • for in の順序保証
  • null合体演算子 ??
  • オプショナル連結 ?
  • globalThis
  • string.matchAll()
  • Dynamic Inport
  • export * as ns from module 構文
  • import.meta
  • Promise.allSettled()

ECMAScript2018 (ES9)

  • テンプレート文字列強化 \u
  • オブジェクトスプレッドとレスト構文 …obj
  • 正規表現のフラグ /…/s
  • 正規表現の名前付きキャプチャーグループ ?<…>
  • 正規表現の前方マッチ ?<=… , ?<!…
  • 正規表現のUnicodeプロパティマッチ \p{…}
  • Promise の finally()
  • Promiseのfor await … of …

ECMAScript2017 (ES8)

  • オブジェクト参照 object.values(), object.entries()
  • パディング string.padStart(), string.padEnd()
  • プロパティ記述し参照 object.getOwnPropertyDescriptors()
  • 関数末尾のカンマ , ?????
  • async, await
  • 共有メモリ —>meltdown and Spectre対応として全てのブラウザで一時無効化

ECMAScript2016 (ES7)

  • array.includes()
  • べき乗演算子 **

ECMAScript2015(ES6)

  • class
  • let, const
  • モジュール import, export —それまではrequire
  • アロー関数
  • 関数の初期値引数  func1(var1=10, var2=1)
  • 関数の可変長引数 func1(…arg)={}
  • スプレッド構文 …arg
  • Mapオブジェクト
  • Setオブジェクト
  • 配列関数 from(), of()
  • 型付配列 Unit8Array etc
  • for ~ of
  • シンボルオブジェクト(Symbol)
  • 文字列でバッククオート(変数を入れる事ができる)
  • 8進数 0o、2進数 0b
  • Promise
  • 言語依存フォーマット NumberFormat()
  • IE11ではES6以降は使えない

ECMAScript 5.1th Edition(ES5.1)

  • array.isArray()

ECMAScript 5th Edition(ES5)

  • strict モード
  • getter, setter
  • JSON.stringify(object), JSON.parse(string)
  • 最後のオブジェクトの末尾のカンマ
  • trim()
  • Objectのメソッド強化?
  • Arrayのメソッド強化?

ECMAScript 4th Edition(ES4)

ECMAScript 3rd Edition(ES3) —1999/12

TypeScript

MicrosoftがJavaScriptのSuperset(上位互換)として開発したAlternative JavaScript(AltJS)。 静的型付けけやinterfaceなどの定義で可読性・デバッグ性を向上したもの。 静的型付けができるので、Web Asssemblyに変換して高速実行も可能。 近年はJavaScriptから学習し、TypeScriptに移行する人が増加中。 JavaScriptが大好きでNodeJSの開発者Ryan Dahlさんが、NodeJSの後悔から新たに開発したDenoもTypeScriptが中心で、Ryan DahlさんもTypeScripを絶賛。

  • 静的型付け
  • type, interfaceなどオブジェクトの型付け
  • ジェネリクス
  • private, public, protect, readOnly

最近のライブラリやアプリはTypeScriptのものが多く、ソースコードを読み解き様々なヒントにするにもJavaScriptプログラマはTypeScriptを学ぶ方が良いと思います。

コメント