-
-
Notifications
You must be signed in to change notification settings - Fork 225
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
ES2020: Optional chaining #1179
Labels
Comments
#1178 Optional Chainは暗黙的 nullish という言葉の定義に依存している感じがする。 なので、理想的に Nullish coalescing Operator → Optional Chaining の順番になるのがよさそう |
こういうのとかあるけど、うーん。なんか言い換えるほどのメリットがでてない // `options`が指定されなかったときは空のオブジェクトが入る
function wrapText(text, options = {}) {
const prefix = options.prefix ?? "接頭辞:";
const suffix = options.suffix ?? ":接尾辞";
return prefix + text + suffix;
}
// falsyな値を渡してもデフォルト値は代入されない
console.log(wrapText("文字列")); // => "接頭辞:デフォルト:接尾辞"
console.log(wrapText("文字列", {
prefix: "Start:",
suffix: ":End"
})); // => "Start:文字列:End"
// オプションの一部だけを指定した場合は、それぞれのデフォルト値が採用される
console.log(wrapText("文字列", { prefix: "カスタム:" })); // => "カスタム:デフォルト:接尾辞"
console.log(wrapText("文字列", { suffix: ":カスタム" })); // => "接頭辞:文字列:カスタム" Optional chaining( function wrapText(text, options) {
// `options`がundefinedまたはnullの時点で右辺を評価する
const prefix = options?.prefix ?? "接頭辞:";
const suffix = options?.suffix ?? ":接尾辞";
return prefix + text + suffix;
}
// falsyな値を渡してもデフォルト値は代入されない
console.log(wrapText("文字列")); // => "接頭辞:デフォルト:接尾辞"
console.log(wrapText("文字列", {
prefix: "Start:",
suffix: ":End"
})); // => "Start:文字列:End"
// オプションの一部だけを指定した場合は、それぞれのデフォルト値が採用される
console.log(wrapText("文字列", { prefix: "カスタム:" })); // => "カスタム:デフォルト:接尾辞"
console.log(wrapText("文字列", { suffix: ":カスタム" })); // => "接頭辞:文字列:カスタム" |
存在確認ではなくて、プロパティのアクセスでやるといいのかな? |
5 tasks
const printWidgetName(widget){
console.log(widget?.window?.title ?? "名前はありません");
}
const widget = {
window: {
title: "ウィジェットのタイトル"
}
};
printWidgetName(widget); こんな感じのOptional chaining( ちょっとアウトラインを整理して考えてみるのがよさそう |
azu
added a commit
that referenced
this issue
Aug 29, 2020
Nullish coalescing演算子(`??`)とOptional chaining(`?.`)に関する変更 ## 変更点 - [x] **falsy**の説明を演算子の章に移動 - falsyの対応としてnullishを演算子の章で解説するため - BigIntの `0n` も falsy に追加 #445 - [x] Optional chaining演算子の(`?.`)の解説を"オブジェクト"の章に追加 - [x] Nullish coalescing演算子(`??`)とOptional chaining(`?.`)の組み合わせを説明 - [x] Nullish coalescing演算子(`??`)の解説を"演算子"の章に追加 - [x] 一部のコードを `||` を `??` に置き換え - 例としては問題ないけど、`??` 推奨気味に変更 ## 追加しなかったこと - デフォルト値に対するNullish coalescing演算子(`??`)とOptional chaining(`?.`)の組み合わせのパターン - 他にもいろいろな書き方があるため含めないようにした - 関数呼び出しとOptional chaining演算子(`?.`) - `window.fn?.()` みたいなケース - ユースケースがイマイチ。別の解決方法でも良いと思える気がする fix #1178 fix #1179
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Optional chaining - JavaScript | MDN
https://jsprimer.net/basic/object/#confirm-property でまさにその事例があるので、ここで紹介する。
#1178 Nullish coalescing Operatorとの組み合わせについても紹介するといいのかもしれない?
ユースケースでこういう箇所あるかな?
やること
[ES2020]
ラベルThe text was updated successfully, but these errors were encountered: