Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ECMAScript 2021の対応 #1220

Closed
6 tasks done
azu opened this issue Jul 22, 2020 · 12 comments · Fixed by #1333
Closed
6 tasks done

ECMAScript 2021の対応 #1220

azu opened this issue Jul 22, 2020 · 12 comments · Fixed by #1333

Comments

@azu
Copy link
Collaborator

azu commented Jul 22, 2020

ECMAScript 2021対応のmeta issueです。

proposals/finished-proposals.md at master · tc39/proposals

やりかた

  • 検討リストから対応するべきかを決める
  • 対応するものは別途Issue化する
  • 対応する
  • すべて対応したら book.js を更新

検討リスト

過去

@azu
Copy link
Collaborator Author

azu commented Sep 25, 2020

@azu
Copy link
Collaborator Author

azu commented Mar 15, 2021

@azu azu added the Type: Meta label Apr 28, 2021
@azu
Copy link
Collaborator Author

azu commented May 5, 2021

@azu
Copy link
Collaborator Author

azu commented May 5, 2021

String.prototype.replaceAll

#1182 はES2020で、ES2021でreplaceAll

replaceメソッドには正規表現も指定できます。 gフラグを有効化した正規表現を渡すことで、文字列からパターンにマッチするものをすべて置換できます。
https://jsprimer.net/basic/string/#replace-delete

があるので、これの別解としてreplaceAllは追加するのが妥当。
用途的には正規表現を使わずにすべてを置換したい場合となる。
正規表現も渡せるが /g がないとエラーとなることについて触れる。

Regular expressions (RegExp) • JavaScript for impatient programmers (ES2021 edition)

Issue: #1310

@azu
Copy link
Collaborator Author

azu commented May 5, 2021

Promise.any + AggregateError

最初に成功したものを得る Promise.any 。
投機的に複数走らせて最初に取れたものがいいみたいな状態

これはユースケースではでてこなから取り扱わなくてもいい気がする。
一方で、全てがエラーの場合はAggregateErrorを返すという複数エラーの扱い方が追加されている。
この AggregateError 自体は 例外処理 · JavaScript Primer #jsprimer に入れてもいいかもしれない。

保留な感じがする

Related: azu/promises-book#335

@azu
Copy link
Collaborator Author

azu commented May 5, 2021

WeakRefs

WeakRefFinalizationRegistryによる、弱い参照とGC時の動作。

WeakMapとWeakSetの章はあるけど、Weakの話を追加するほどじゃない気はする。
これはskipすると思う。advancedな感じがする。

この書籍の範囲外な感じがする。

@azu
Copy link
Collaborator Author

azu commented May 5, 2021

logical-assignment

// "Or Or Equals" (or, the Mallet operator :wink:)
a ||= b;
a || (a = b);

// "And And Equals"
a &&= b;
a && (a = b);

// "QQ Equals"
a ??= b;
a ?? (a = b);

が増える。
基本的に再代入でしかないので、結構扱いが難しい気がする。

function printWidgetTitle(widget) {
    const title = widget?.window?.title ?? "未定義";
    console.log(`ウィジェットのタイトルは${title}です`);
}
printWidgetTitle({
    window: {
        title: "Book Viewer"
    }
}); // "ウィジェットのタイトルはBook Viewerです" と出力される
printWidgetTitle({
    // タイトルが定義されてない空のオブジェクト
}); // "ウィジェットのタイトルは未定義です" と出力される

function printWidgetTitle(widget) {
    widget.title ??= "未定義";
    console.log(`ウィジェットのタイトルは${widget.title}です`);
}
printWidgetTitle({});

みたいな感じにするとかはありそうだけど、次のようには書けないので微妙。
そもそもオブジェクトに再代入してる時点で、引数で受け取ったオブジェクトを書き換えてるので良くない(どこかのコラムでそういうのを書いてた気がする?)

function printWidgetTitle(widget) {
    widget?.window?.title ??= "未定義";
    console.log(`ウィジェットのタイトルは${title}です`);
}
printWidgetTitle({
    window: {
        title: "Book Viewer"
    }
}); // "ウィジェットのタイトルはBook Viewerです" と出力される
printWidgetTitle({
    // タイトルが定義されてない空のオブジェクト
}); // "ウィジェットのタイトルは未定義です" と出力される

検索のために、付録: JavaScriptチートシート · JavaScript Primer #jsprimerに入れるのはありだけど、本文にはあんまり入れるユースケースが思いつかない

@azu
Copy link
Collaborator Author

azu commented May 5, 2021

Numeric Separators

let budget = 1_000_000_000_000;

// What is the value of `budget`? It's 1 trillion!
// 
// Let's confirm:
console.log(budget === 10 ** 12); // true

区切り文字に _ を使えるよってだけ。見た目だけ

にそれぞれ追加するぐらいで良いかもしれない。

あと https://jsprimer.net/basic/operator/#bit-operator ビット演算の所でこれを使って見やすくするとか良さそうなきがするので、検討する

Issue: #1311

This was referenced May 5, 2021
@azu
Copy link
Collaborator Author

azu commented May 5, 2021

それぞれIssueを作った

@azu
Copy link
Collaborator Author

azu commented May 9, 2021

#1220 (comment)
リリースノートへのリンクみたいのどうするかちょっと迷うな。
この書籍は網羅が目的じゃないので、ESバージョンとはあんまり対応してない

@azu
Copy link
Collaborator Author

azu commented Jun 27, 2021

Ecma International approves new standards - Ecma International でES2021は正式に承認された

@azu
Copy link
Collaborator Author

azu commented Jun 27, 2021

logical-assignment

https://jsprimer.net/basic/operator/#assignment-operator で 他の += とかは紹介してるので、入れるのはありだけど(サンプルコードはない)、どうするべきかなー
演算子はやっぱり無限に膨れるので、次のタイミングで削りたい

#1334 でやってみたけどいまいちだったので入れないことにする

@azu azu closed this as completed in #1333 Jun 27, 2021
@azu azu mentioned this issue Jun 28, 2021
17 tasks
@azu azu mentioned this issue Apr 29, 2023
9 tasks
@azu azu changed the title ES2021の対応 ECMAScript 2021の対応 Apr 29, 2023
@azu azu mentioned this issue Dec 10, 2023
14 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant