js オプション連鎖演算子の使用

js オプション連鎖演算子の使用

序文

オプションの連鎖演算子 (?.) を使用すると、チェーン内の各参照が有効であることを明示的に検証しなくても、チェーンの末尾にあるプロパティの値を読み取ることができます。違いは、参照が null または undefined の場合、エラーは発生せず、式の短絡戻り値は undefined になることです。関数呼び出しで使用する場合、指定された関数が存在しない場合は undefined が返されます。

オプションの連鎖演算子を使用すると、存在しない可能性のあるオブジェクト プロパティにアクセスしようとするときに、式のルートが短く簡潔になります。オプションの連鎖演算子は、どのプロパティが存在する必要があるか不明な場合に、オブジェクトの内容を調べるときにも役立ちます。

オプションの連鎖演算子 (?.)

文法

オブジェクト?.prop
オブジェクト?.[式]
関数?.(引数)

説明する

オプションの連鎖演算子は、接続されたオブジェクトを介して渡される参照または関数が未定義または null である可能性がある場合に、接続されたオブジェクトの値へのアクセスを簡素化する方法を提供します。
たとえば、ネストされた構造を持つオブジェクト obj を考えてみましょう。オプションの連鎖がない場合、深くネストされたサブプロパティを検索するときは、それらの間の参照を検証する必要があります。次に例を示します。

ネストされたProp = obj.first && obj.first.secondとする

エラーを回避するには、obj.first.second にアクセスする前に、obj.first の値が null でも undefined でもないことを確認してください。 obj.first を検証せずに単に obj.first.second にアクセスすると、エラーがスローされる可能性があります。
オプションの連鎖演算子 (?.) を使用すると、obj.first.second にアクセスする前に obj.first の状態を明示的に確認し、短絡評価を使用して最終結果を取得する必要がなくなります。

nestedProp = obj.first?.second とします。

. 演算子の代わりに ?. 演算子を使用すると、JavaScript は obj.first.second にアクセスする前に、obj.first が null でも undefined でもないことを暗黙的に確認します。 obj.first が null または undefined の場合、式は計算を省略し、直接 undefined を返します。

これは次の式と同等ですが、一時変数は実際には作成されません。

temp = obj.first とします。
nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second) とします。 

使用

babel コンパイラでは連鎖可能な演算子を使用できます。

バベル

yarn を @babel/plugin-proposal-optional-chaining --dev に追加します

.babelrcファイルを追加する

{
  "プラグイン": ["@babel/プラグイン提案オプションチェーン"]
}

create-react-appで使用する

デフォルトでは、create-react-app は babel 構成の変更を許可しません。ここでは、デフォルトの構成を補足できるように 2 つの追加モジュールをインストールする必要があります。

yarn をカスタマイズ-cra react-app-rewired --dev に追加します

config-overrides.js ファイルを追加する

const { useBabelRc, override } = require('customize-cra');
モジュール.exports = override(useBabelRc());

package.json を変更する

「スクリプト」: {
  "開始": "react-app-rewired 開始",
  "ビルド": "react-app-rewired ビルド",
  "テスト": "react-app-rewired テスト --env=jsdom"
}

エスリント

babel コンパイラをインストールすると、?. 演算子を使用できるようになります。ただし、eslint を使用する場合は、この新しい構文を認識するために babel-eslint をインストールする必要があります。

yarn に babel-eslint --dev を追加します

.eslintrc ファイルを追加する

{
  "パーサー": "babel-eslint",
  「ルール」: {
    "厳密": 0
  }
}

vscodeでの使用

vscode の js バリデーターは現在 ?. 演算子を認識しないため、エラー警告が表示されます。


エラー警告を解決するには:

vscode 拡張機能 ESLint をインストールし、拡張機能ストアで ESLint を検索してインストールします。

vscode 構成 (.vscode/settings.json) を変更します。

{
  "eslint.alwaysShowStatus": true、
  "eslint.autoFixOnSave": true、
  "javascript.validate.enable": false, // 主にこれ、vscode の js バリデータをオフにします "[javascript]": {
    "editor.formatOnSave": false,
  },
  "[javascriptreact]": {
  "editor.formatOnSave": false,
  },
}

ソース: オプション連鎖演算子

js オプション連鎖演算子の使用に関するこの記事はこれで終わりです。より関連性の高い js オプション連鎖演算子のコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript の「&&」および「||」演算子の包括的な分析 (要約)
  • JavaScript のプラス記号 (+) 演算子の魔法のような効果
  • JavaScript 削除演算子のアプリケーション例
  • JavaScript 演算子 (~、&、|、^、<<、>>) の使用例
  • JavaScript の delete 演算子で削除できないオブジェクトを解析する
  • js 演算子の概要
  • JavaScript スプレッド演算子の詳細な説明
  • JavaScript ブール演算子の解析 && || !

<<:  Centos7.5 は mysql5.7.24 バイナリ パッケージの展開をインストールします

>>:  MYSQL8.0.13 無料インストール版 設定チュートリアル例 詳細説明

推薦する

Reactプロジェクトの新規作成からデプロイまでの実装例

新しいプロジェクトを始めるこの記事では主に、新規プロジェクトを0から1まで取り組むプロセスを記録し、...

HTMLは角丸四角形を簡単に実装します

質問: div+css と配置を使用して角丸四角形を実現するにはどうすればよいですか?ソリューション...

MySQL Community Server 5.6.39 のインストール方法

この記事では、MySQLのダウンロードとインストールの詳細なチュートリアルを記載しています。具体的な...

CentOSバージョンにDockerをインストールする際のエラーの解決方法

1. バージョン情報 # cat /etc/system-release CentOS Linux ...

Vue コンポーネントの切り替え、動的コ​​ンポーネント、コンポーネントのキャッシュについて

目次1. コンポーネント切り替え方式方法1: v-ifとv-elseを使用する方法 2: 組み込みコ...

JavaScript で簡単な計算機を実装する

この記事の例では、参考までに簡単な計算機を実装するためのJavaScriptの具体的なコードを共有し...

良いリファクタリングを行うには、コードをリファクタリングするだけでなく、人生をリファクタリングすることも重要です。

職業的な観点からも、人生の観点からも、良い再建をすることは本当に簡単ではありません。楽観的で熱心で前...

SELinux 入門

カーネル 2.6 の時代には、アクセス制御セキュリティ ポリシーのメカニズムを提供するために新しいセ...

ブラウザの自動フォーム入力によるウェブページのスタイル損失の原因の分析と解決

バックエンドからフロントエンドまで、なんと悲劇なのでしょう。他の人の CSS を自分の jsp We...

Xiaomi公式サイトの登録・ログイン機能を模倣するJavaScript

目次まずページレイアウトを構築する必要がありますJS関数1 JS関数2 JS関数3 JS関数4効果図...

MYSQLは継続サインイン機能を実装しており、サインイン後1日経過すると最初から開始します(SQL文)

1. テストテーブルを作成する テーブル `testsign` を作成します ( `userid`...

Portainer を使用して Docker のビジュアル インターフェースを構築する方法

ポーテナーの紹介Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な...

Vueはページに透かし効果を追加する機能を実装します

最近、あるプロジェクトに取り組んでいたとき、ページに透かし効果を追加するように依頼されました。さっそ...

少なくとも7日間連続して注文を行ったユーザーに対するSQLクエリ

テーブルを作成するテーブル order(id varchar(10),date datetime,o...

HTML onfocus gain focus および onblur lose focus イベントの詳細な説明

HTML onfocus イベント属性定義と使用法onfocus 属性は、要素がフォーカスを受け取っ...