(2025/2更新)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になり欧州だけでなく国際標準となった。
ECMAScript2024 (ES15), ECMA-262, 15th edition
因みに2023/2~2024/1に決まったのが2024年版となるようです。
- Promise.withResolvers
- resolve/rejectを外で実行できる。
 
 - ArrayBuffer.resize()
- サイズ変更できるようになりました。
 
 - Object.groupBy()とMap.groupBy()
 - .isWellFormed()
- “\u3042”.isWellFormed();で正しいかどうかみれるようになった。
 
 - RegExp にvフラグが使えるようになった。 絵文字検索?
 - Atomics.waitAsync()
 
ECMAScript2023 (ES14), ECMA-262, 14th edition
- array.findLast(), array.findLastIndex()
- 条件に合う最後の値や、Indexを探すもの。 array.findは先頭を探す。
 
 - Hashbang文法
- ファイルの先頭の『#!』だけをコメントとして扱う。 2行目以降に書くとコード扱いされる。
 
 - array.with(), array.toSorted(), array.toReverse()
- 普通のarrayのコピーは参照なので、コピーして一方のarrayの要素の1つを変えるともう一方も変わってしまいます。 しかしこのコマンドでコピーすると元のarrayは変更されません。
 
 - WeakMapのキーにSymbolを使える。
 
ECMAScript2022 (ES13), ECMA-262, 13th edition
- 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), ECMA-262, 12th edition
- 論理代入演算子 ||=, &&~, ??=
 - 数値セパレータ 1_000_000, 0b_1110_1001, 0x_abcd_123f
 - string.replaceAll()
 - Promise.any()
 - 弱参照 WeakRefs
 
ECMAScript2020 (ES11), ECMA-262, 11th edition
- BitInt
 - for in の順序保証
 - null合体演算子 ??
 - オプショナル連結 ?
 - globalThis
 - string.matchAll()
 - Dynamic Inport
 - export * as ns from module 構文
 - import.meta
 - Promise.allSettled()
 
ECMAScript2019 (ES10), ECMA-262, 10th edition
- flat(), flatMap()
 - Object.fromEntries()
- オブジェクト生成時にキー名と値を指定できる。
 
 - trimStart(),trimEnd()
 - Symbol().description
 - try~catchの(error)の省略
 - .toString 仕様変更
- コメントなど文字列が保持される。
 
 - JSONの挙動と同じに仕様変更(行区切りや段階切り文字のエスケープ無し扱い)
 - JSON.stringify()の仕様変更(エスケープされたまま出力される)
 
ECMAScript2018 (ES9), ECMA-262, 9th edition
- テンプレート文字列強化 \u
 - オブジェクトスプレッドとレスト構文 …obj
 - 正規表現のフラグ /…/s
 - 正規表現の名前付きキャプチャーグループ ?<…>
 - 正規表現の前方マッチ ?<=… , ?<!…
 - 正規表現のUnicodeプロパティマッチ \p{…}
 - Promise の finally()
 - Promiseのfor await … of …
 
ECMAScript2017 (ES8), ECMA-262, 8th edition
- オブジェクト参照 object.values(), object.entries()
 - パディング string.padStart(), string.padEnd()
 - プロパティ記述し参照 object.getOwnPropertyDescriptors()
 - 関数末尾のカンマ , ?????
 - async, await
 - 共有メモリ —>meltdown and Spectre対応として全てのブラウザで一時無効化
 
ECMAScript2016 (ES7), ECMA-262, 7th edition
- array.includes()
 - べき乗演算子 **
 
ECMAScript2015(ES6), ECMA-262, 6th edition
- 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を学ぶ方が良いと思います。
  
  
  
  
コメント