Más contenido relacionado
La actualidad más candente (20)
Similar a Node.js version16の新機能 (20)
Node.js version16の新機能
- 2. 自己紹介
• 名前:鈴木 正樹 (Masaki Suzuki)
• 在住:愛知県半田市
• 職業:フリーランスエンジニア(※現在ニート)
• 得意分野:サーバーレスアプリのバックエンド(アーキ構築/設計/開発など)
• 技術:
• AWS/Serverless Framework/サーバーレス全般
• JavaScript(Node.js)/TypeScript/AWS Amplify/AWS CDK/Jest
• 各種イベント・SNS・ブログでのクラウド普及活動(個人的に)
• SNS:
http://makky12.hatenablog.com/
https://github.com/smt7174
@makky12 (Masaki Suzuki@フリーランスクラウドエンジニア)
名古屋市
豊橋市
Node学園 36時限目
- 3. 本日紹介する新機能
• Numeric Separators(桁区切り)
• String.prototype.replaceAll(文字列全置換)
• Promise.any
• WeakReferences(オブジェクトへの弱参照)
• WeakRef
• FinalizationRegistry
• Logical Assignment(代入演算子)
Node学園 36時限目
- 4. 参考資料・サイト
• 【参考情報】
• node.js公式サイト
• node.green
• JavaScript new features in ECMAScript 2021 - dev.to
• 【ブログ】
• 正式仕様リリース! JavaScriptの最新仕様ES2021で追加された新機能まとめ - Zenn
• 【Node.js】Node.js version16(ES2021)の新機能 - echo("備忘録")
Node学園 36時限目
- 6. Numeric Separators(桁区切り)
• 数値の「_」での桁区切りが可能に
• 10進数以外(2進数, 16進数など)にも対応
• もちろん数値として、各種計算が可能
• 大きい数を扱う場合に、値が分かりやすくなった
• ソースの可読性の向上につながる
• 保守のしやすさが上がる(かも)
• 区切り桁の制限(n桁ごと…など)はない
• 見やすい桁で区切るのが良い(10進なら3桁等)
• 参考ページ:
• Numeric Separators - GitHub -
Node学園 36時限目
// 10進数の桁区切り
const num1 = 100_000_000;
const num2 = 12_345_567;
console.log(num1 + num2); // 112345678
// 16進数、2進数の桁区切り
const hexNum = 0x01_2F;
const binNum = 0b1010_0101;
// parseIntでの10進数変換もできる//
console.log(parseInt(hexNum)); // 303
console.log(paeseInt(binNum)); // 165
// 注意:parseIntは、桁区切りの文字列は対応不可
console.log(parseInt(1_024)); // 1024
console.log(paeseInt(“1_024”)); // 1(=‘_’の直前まで)
- 8. String.prototype.replaceAll(文字列全置換)
• 文字列の全置換専用の関数
• 置換対象文字列の正規表現での指定が不要に
• 「/hoge/g」→「”hoge”」と、文字列の指定でOK
• 正規表現での指定も可能
• 「g」フラグを付けないとエラーになる
• 引数指定が、他言語(C#, Javaなど)と近い感じに
• 知らないと結構ハマる部分だと思うので…
• Javaの「replaceAll」と混同するかも?
• でも正規表現の指定もOKだから問題ない
• 関数名から「全置換」という挙動が明確
• 参考ページ:
• String.prototype.replaceAll() -MDN Web Docs -
Node学園 36時限目
// 置換対象の文字列
const str =“hoge|fuga|piyo”;
// replace関数は、文字列指定だと「一致した最初の文
字列」しか置換してくれない。
console.log(str.replace(‘|’, ‘_’)); // hoge_fuga|piyo
// replace関数で全置換する場合、正規表現で指定する
必要がある。//
console.log(str.replace(/|/g, ‘_’)); // hoge_fuga_piyo
// replaceAll関数ならば、文字列指定でも全置換して
くれる。
console.log(str.replaceAll(‘|’, ‘_’)); // hoge_fuga_piyo
- 11. Promise.anyのコード例
//msミリ秒間処理を停止する処理。(Thread.Sleepと同じ)
const _sleep = (ms) => new Promise((resolve) =>
setTimeout(resolve, ms));
// この関数が外部から呼ばれるとする。
async function promiseAnyOrRace() {
// Promise.anyはエラーにならない。(promise3がresolveされるので。
resultには「promise3 is resolved」が格納される)
const result = await Promise.any([promise1(), promise2(),
promise3()]);
// Promise.raceはエラーになる。(最初に返ってくるpromise1が
rejectされるので。エラーメッセージには「promise1 is rejected」が格
納される)
const result2 = await Promise.race([promise1(), promise2(),
promise3()]);
}
(※右上へ続く)
(※左下からの続き)
// 1秒後にrejectする関数
async function promise1() {
await _sleep(1000);
throw new Error("promise1 is rejected");
}
// 2秒後にrejectする関数
async function promise2() {
await _sleep(2000);
throw new Error("promise2 is rejected");
}
// 3秒後にresolveする関数
async function promise3() {
await _sleep(3000);
return "promise3 is resolved";
}
Node学園 36時限目
- 13. WeakRef
• オブジェクトへの「弱い参照」を提供する機能
• 「弱い参照」とは、以下の機構を持つ参照
• オブジェクトの参照(=値の取得)が可能
• ガベージコレクション(GC)の挙動を邪魔しない
• 「GCの挙動を邪魔しない」とは…
• WeakRef以外にそのオブジェクトが参照されない場合、
そのオブジェクトはGCされる
• WeakRefが参照しているオブジェクトがメモリ上にある
保証はない
• 挙動がGCに大きく依存する
• 参考ページ:
• WeakRef -MDN Web Docs -
Node学園 36時限目
const obj = {
value: { hoge: 'fuga’}
}
// WeakRef(=弱参照)を設定し、deref()で値を参照
const ref = new WeakRef(obj.value);
console.log(ref.deref());
// obj.valueのWeakRef以外の参照をなくす(GC対象)
obj.value = null;
// どこかのタイミングobj.valueがGCされ、deref()で
参照できなくなる。(nullでもundefinedでもない)
setInterval(() => {
console.log(ref.deref());
}, 1000)
- 14. FinalizationRegistry
• 「オブジェクトがGCされたこと」をトリガに起動
するコールバック関数を提供
• C#の「IDisposable」に近い
• WeakRefと組み合わせて「GCされた場合にログを
出す」などの処理が可能
• これも挙動がGCに大きく依存する
• 参考ページ:
• FinalizationRegistry -MDN Web Docs -
Node学園 36時限目
const obj = {
value: { hoge: 'fuga’},
token: { value: ‘piyo’}
}
// GCされた場合のコールバック関数を定義
const registry = new FinalizationRegistry(value => {
console.log(`${value} はGCされました。`);
});
// FinalizationRegistryにオブジェクトを登録
registry.register(obj.value, "obj.value.hoge“,
obj.token);
// FinalizationRegistryに登録されたオブジェクトの登
録解除
registry.unregister(obj.token);
- 18. Logical Assignment(代入演算子)
• Version16で、下記の代入演算子が新たに追加
• ??=
• ||=
• &&=
• 使い方、および挙動などは下表を参照
Node学園 36時限目
演算子 主な使い方 挙動 備考
??= a ??= b aがnullまたはundefinedの場合、aにbを代入
する
0, false, 空文字の場合は代入されない
||= a || = b aがfalsyな値の場合、aにbを代入する falsyな値:null, undefined, 0, false, 空文
字など
&&= a &&= b aがtruthyな値の場合、aにbを代入する truthyな値:falsyではない値