🌼正式仕様リリース! JavaScriptの最新仕様ES2022で追加された「全」新機能2022/06/22に公開2022/11/104件JavaScripttechGitHubで編集を提案Discussionyassh2022/06/23ES2022とは関係のない点を指摘することをお許しください。 export const { translations } = navigator.language.includes("en") ? await import("./i18n/lang-en.js"): await import("./i18n/lang-ja.js"); この例は、navigator.language.includes("en")の部分があまりよくないと思います。 仕様によると、navigator.languageはBCP 47の言語タグを返すとされています。そしてBCP 47の言語タグは、次のような形式らしいです。 langtag = language ["-" script] ["-" region] *("-" variant) *("-" extension) ["-" privateuse] navigator.languageの返り値のうち、languageの部分が"en"ではなくても、script、region、variantなどに"en"が含まれていた場合、navigator.language.includes("en")はtrueを返してしまうでしょう。 この問題を回避するために、navigator.language.includes("en")ではなく/^en\b/.test(navigator.language)と書くほうがよいと思います。(MDNのNavigator.languageのページの例も、そのように書かれています。) 返信を追加鹿野 壮2022/06/23ご指摘のとおりでしたので更新いたしました! 細かい部分までお読みいただき、ありがとうございます! 返信を追加Nozomu Ikuta2022/06/25素晴らしいまとめ記事をありがとうございます! 以下、1点念のため確認したいです。 Error Causeの部分で以下2つのコードが例示されています。 .catch(error) { throw new Error("fooプロパティなんてないよ😡"); } .catch(error) { throw new CustomError("fooプロパティなんてないよ😡", error); } これらは、try-catchブロックの // どうする? の部分に相当するコードだと認識しているのですが、その場合はPromise Chainの catch メソッドではなくて } catch (error) { ... } ではないでしょうか? try { if (Math.random() > 0.5) { baz.qux; } } catch (error) { // どうする? } 鹿野 壮2022/06/27ありがとうございます! ご指摘のとおりでしたので修正しました🙏 返信を追加
yassh2022/06/23ES2022とは関係のない点を指摘することをお許しください。 export const { translations } = navigator.language.includes("en") ? await import("./i18n/lang-en.js"): await import("./i18n/lang-ja.js"); この例は、navigator.language.includes("en")の部分があまりよくないと思います。 仕様によると、navigator.languageはBCP 47の言語タグを返すとされています。そしてBCP 47の言語タグは、次のような形式らしいです。 langtag = language ["-" script] ["-" region] *("-" variant) *("-" extension) ["-" privateuse] navigator.languageの返り値のうち、languageの部分が"en"ではなくても、script、region、variantなどに"en"が含まれていた場合、navigator.language.includes("en")はtrueを返してしまうでしょう。 この問題を回避するために、navigator.language.includes("en")ではなく/^en\b/.test(navigator.language)と書くほうがよいと思います。(MDNのNavigator.languageのページの例も、そのように書かれています。) 返信を追加
Nozomu Ikuta2022/06/25素晴らしいまとめ記事をありがとうございます! 以下、1点念のため確認したいです。 Error Causeの部分で以下2つのコードが例示されています。 .catch(error) { throw new Error("fooプロパティなんてないよ😡"); } .catch(error) { throw new CustomError("fooプロパティなんてないよ😡", error); } これらは、try-catchブロックの // どうする? の部分に相当するコードだと認識しているのですが、その場合はPromise Chainの catch メソッドではなくて } catch (error) { ... } ではないでしょうか? try { if (Math.random() > 0.5) { baz.qux; } } catch (error) { // どうする? } 鹿野 壮2022/06/27ありがとうございます! ご指摘のとおりでしたので修正しました🙏 返信を追加
Discussion
ES2022とは関係のない点を指摘することをお許しください。
この例は、
navigator.language.includes("en")の部分があまりよくないと思います。仕様によると、
navigator.languageはBCP 47の言語タグを返すとされています。そしてBCP 47の言語タグは、次のような形式らしいです。navigator.languageの返り値のうち、languageの部分が"en"ではなくても、script、region、variantなどに"en"が含まれていた場合、navigator.language.includes("en")はtrueを返してしまうでしょう。この問題を回避するために、
navigator.language.includes("en")ではなく/^en\b/.test(navigator.language)と書くほうがよいと思います。(MDNのNavigator.languageのページの例も、そのように書かれています。)ご指摘のとおりでしたので更新いたしました!
細かい部分までお読みいただき、ありがとうございます!
素晴らしいまとめ記事をありがとうございます!
以下、1点念のため確認したいです。
Error Causeの部分で以下2つのコードが例示されています。
これらは、try-catchブロックの
// どうする?の部分に相当するコードだと認識しているのですが、その場合はPromise Chainのcatchメソッドではなくて} catch (error) { ... }ではないでしょうか?ありがとうございます!
ご指摘のとおりでしたので修正しました🙏