Node.js 12でオプションのチェーンを使用する方法


17

オプションのチェーニング(obj?.param1?.param2)は素晴らしい機能のようですが、実際に実装して、入れ子になったifs、任意の関数、およびそのような単純な操作にはないものを取り除きたいと思っていました。

しかし、問題があります。それは機能しません。ノード12に更新しましたが、それでもエラーが発生します。

var dude = res?.param?.params[0]
SyntaxError: Unexpected token '.'

または

var dude = res.param?.params[0]
SyntaxError: Unexpected token '.'

何が問題ですか?

この機能を有効にするには、言語設定を変更するか、ライブラリをダウンロードする必要がありますか?それとも、まだ出ていないだけですか?


2
にありStage 4ます。Node.jsはまだこれをサポートしていません。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
シュリダール

「nodejs null伝播」を検索しましたが、最初はこの質問を見つけることができませんでした。うまくいけば、このコメントが検索性を向上させるでしょう。
カシミール

どうしようもない。そのためのタグはありますが、それはJavaScriptとは関係がなく、良いことよりも混乱を招きます。
almarc

回答:


17

オプションのチェーンは、現在Node.jsバージョン13以降ではサポートされていません。Node.jsそれ以降は、バージョン14 からサポートされ、ほとんどのブラウザーはに移行されStage 4ます。現在、いくつかのプラットフォームでサポートされています。オプションのチェーンをサポートするプラットフォームのリストは、所定のリンクにあります。--harmonyフラグを使用してオプションを有効にできます。


10

オプションのチェーン機能の仕様は、2019年12月22日ステージ4(終了)にプロモートされました。仕様が最終的になる前にノード12が出ました-さらに言えば、ノード13も出ました。

node.greenによると、オプションの連鎖はノード14以降でサポートされますが、--harmonyフラグは引き続き必要です。(これは、ノードの--harmonyフラグの説明と矛盾しているようです-V8の配送機能はフラグを必要とするものではないため、それをどうするかわかりません。)それでも、フラグが必要かどうかにかかわらず、私はそうしません。2020年4月頃にノード14がリリースされるまで、この機能が表示される予定です。

今日オプションのチェーンを試してみたい場合、最善の策はTypeScript(バージョン3.7でオプションのチェーン追加された)またはBabelのようなプリプロセッサを使用することです


10

--harmonyフラグを指定してnodejs v13.7.0を使用できました。

node --harmony myCode.js

ダイナ

未定義

未定義

//myCode.js

const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  }
};

const catName = adventurer.cat?.name;
console.log(catName);
// expected output: Dinah
const dogName = adventurer.dog?.name;
console.log(catName);
//expected output: undefined

console.log(adventurer.someNonExistentMethod?.())
//expected output: undefined

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.