(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を学ぶ方が良いと思います。
コメント