「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > JavaScript のロックを解除する: 論理和 (||) とヌル合体演算子 (??)

JavaScript のロックを解除する: 論理和 (||) とヌル合体演算子 (??)

2024 年 7 月 30 日に公開
ブラウズ:385

Unlocking JavaScript: Logical OR (||) vs Nullish Coalescing Operator (??)

導入

JavaScript は最も人気のあるプログラミング言語の 1 つであり、さまざまな論理演算を処理するためのさまざまな演算子を開発者に提供します。これらの中で、論理 OR (||) 演算子と Nullish Coalescing (??) 演算子は、デフォルト値を管理し、Nullish 値を処理するための基本的なツールです。この記事では、これら 2 つの演算子の違い、使用例、および使用法を説明する実際的で複雑な例について詳しく説明します。

論理和 (||) 演算子について

JavaScript の論理 OR (||) 演算子は、オペランドの中で最初の真実の値を返すか、真実でない値がない場合は最後の値を返すために広く使用されています。これは主にデフォルト値を設定するために使用されます。

構文

result = operand1 || operand2;

使い方

||演算子は左から右に評価し、真の場合は最初のオペランドを返します。それ以外の場合は、2 番目のオペランドを評価して返します。

例 1: デフォルト値の設定

let userInput = '';
let defaultText = 'Hello, World!';

let message = userInput || defaultText;
console.log(message); // Output: 'Hello, World!'

この例では、userInput は空の文字列 (falsy) であるため、defaultText が返されます。

例 2: 複数の値の処理

let firstName = null;
let lastName = 'Doe';

let name = firstName || lastName || 'Anonymous';
console.log(name); // Output: 'Doe'

ここでは、firstName が null (偽) なので、lastName がそのまま返されます。

論理和 (||) 演算子の制限事項

|| の主な制限事項演算子の特徴は、0、NaN、''、false、null、unknown などのいくつかの値を false として扱うことです。これらの値が有効であることを意図している場合、これにより予期しない結果が生じる可能性があります。

Nullish Coalescing (??) オペレーターの紹介

Nullish Coalescing (??) 演算子は、JavaScript に最近追加されたもので、ES2020 で導入されました。これは、考慮される唯一の null 値であることが明示的に意図されている null または未定義のケースを処理するように設計されています。

構文

result = operand1 ?? operand2;

使い方

??演算子は、左側のオペランドが null または未定義の場合に右側のオペランドを返します。それ以外の場合は、左側のオペランドを返します。

例 1: デフォルト値の設定

let userInput = '';
let defaultText = 'Hello, World!';

let message = userInput ?? defaultText;
console.log(message); // Output: ''

この例では、userInput は空の文字列であり、null または未定義ではないため、それが返されます。

例 2: NULL 値の処理

let firstName = null;
let lastName = 'Doe';

let name = firstName ?? lastName ?? 'Anonymous';
console.log(name); // Output: 'Doe'

ここでは、firstName が null であるため、null でも未定義でもない lastName が返されます。

論理和演算子 (||) とヌル結合演算子 (??) の比較

例 1: 偽の値の比較

let value1 = 0;
let value2 = '';

let resultOR = value1 || 'default';
let resultNullish = value1 ?? 'default';

console.log(resultOR); // Output: 'default'
console.log(resultNullish); // Output: 0

この例では、0 は || によって偽であると見なされます。演算子ですが、?? の有効な値です。オペレーター。

例 2: 両方の演算子を一緒に使用する

let userInput = null;
let fallbackText = 'Default Text';

let message = (userInput ?? fallbackText) || 'Fallback Message';
console.log(message); // Output: 'Default Text'

ここでは、userInput が null であるため、fallbackText が ?? によって使用されます。オペレーター。次に、結果は || によってチェックされます。演算子ですが、fallbackText が true であるため、それが返されます。

論理和 (||) およびヌル合体 (??) 演算子の複雑な例

例 3: オブジェクトを使用したネストされた操作

ネストされたオブジェクトのプロパティにデフォルト値を設定する必要があるシナリオを考えてみましょう。

let userSettings = {
  theme: {
    color: '',
    font: null
  }
};

let defaultSettings = {
  theme: {
    color: 'blue',
    font: 'Arial'
  }
};

let themeColor = userSettings.theme.color || defaultSettings.theme.color;
let themeFont = userSettings.theme.font ?? defaultSettings.theme.font;

console.log(themeColor); // Output: 'blue'
console.log(themeFont); // Output: 'Arial'

この例では、userSettings.theme.color が空の文字列であるため、defaultSettings.theme.color が使用されます。 userSettings.theme.font が null であるため、defaultSettings.theme.font が使用されます。

例 4: デフォルトを使用した関数パラメータ

関数のパラメータを扱うとき、欠落している引数にデフォルト値を指定したい場合があります。

function greet(name, greeting) {
  name = name ?? 'Guest';
  greeting = greeting || 'Hello';

  console.log(`${greeting}, ${name}!`);
}

greet(); // Output: 'Hello, Guest!'
greet('Alice'); // Output: 'Hello, Alice!'
greet('Bob', 'Hi'); // Output: 'Hi, Bob!'
greet(null, 'Hey'); // Output: 'Hey, Guest!'

この例では、name パラメーターに ?? name が null または未定義の場合、演算子を使用してデフォルト値「Guest」を設定します。挨拶パラメータは || を使用します。演算子は、挨拶が null または未定義以外の偽の値である場合、デフォルト値「Hello」を設定します。

例 5: オプションのチェーンとの組み合わせ

オプションのチェーン (?.) は || と組み合わせることができます。そして ??深くネストされたオブジェクトのプロパティを安全に処理するため。

let user = {
  profile: {
    name: 'John Doe'
  }
};

let userName = user?.profile?.name || 'Anonymous';
let userEmail = user?.contact?.email ?? 'No Email Provided';

console.log(userName); // Output: 'John Doe'
console.log(userEmail); // Output: 'No Email Provided'

この例では、オプションの連鎖により、プロパティ パスの一部が存在しない場合は unknown が返され、エラーが防止されます。 ||そして ??次に、演算子は適切なデフォルト値を提供します。

ベストプラクティスとユースケース

  1. 使用 ||広範なデフォルトの場合:

    • さまざまな偽の条件 (空の文字列、0、NaN など) に対してデフォルト値を指定する必要がある場合。
  2. 使用 ??正確なヌルチェックの場合:

    • 他の偽の値に影響を与えずに、特に null または未定義を処理したい場合。
  3. 両方の組み合わせ:

    • || の組み合わせを使用します。そして ??真/偽値と NULL 値の両方を区別して処理する必要がある複雑なシナリオ向け。

よくある質問

論理和 (||) 演算子は何をしますか?
論理 OR (||) 演算子は、オペランドの最初の真の値を返すか、真でない値がない場合は最後のオペランドを返します。

Nullish Coalescing (??) 演算子はどのような場合に使用すればよいですか?
0 や空の文字列などの他の偽の値を null として扱うことなく、null または未定義を特別に処理する必要がある場合は、Nullish Coalescing (??) 演算子を使用します。

両方の演算子を一緒に使用できますか?
はい、両方を使用できます ||そして ??を組み合わせてさまざまなタイプの値を処理し、コード ロジックがさまざまなケースを効果的にカバーできるようにします。

|| はどうですか?空の文字列を処理しますか?
||演算子は空の文字列を false として扱うため、最初のオペランドが空の文字列の場合は次のオペランドを返します。

Nullish Coalescing (??) 演算子はすべてのブラウザでサポートされていますか?
?? Operator は、ES2020 をサポートする最新のブラウザーと環境でサポートされています。古い環境の場合は、Babel などのトランスパイラーを使用する必要がある場合があります。

|| の違いは何ですか?そして ??演算子?
主な違いは || ということです。 ?? はいくつかの値を偽 (0、''、false など) とみなします。 null と unknown のみを null 値として扱います。

結論

JavaScript の論理 OR (||) 演算子と Nullish Coalescing (??) 演算子の違いを理解することは、堅牢でバグのないコードを作成するために重要です。 ||演算子は広範なデフォルトのシナリオに最適ですが、?? null 値を正確に処理するのに最適です。これらの演算子を適切に使用することで、コードがさまざまなデータ状態を効果的に処理し、シームレスなユーザー エクスペリエンスを提供できるようになります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/itsshaikhaj/unlocking-javascript-logical-or-vs-nullish-coalescing-operator--21hb?1 侵害がある場合は、[email protected] までご連絡ください。削除してください
最新のチュートリアル もっと>
  • 項目 他の型の方が適している場合は文字列を避ける
    項目 他の型の方が適している場合は文字列を避ける
    1.他のデータ型の代わりに文字列を使用することは避けてください: 文字列はテキストを表すように設計されていますが、数値、列挙型、または集合構造を表すために誤用されることがよくあります。 データが本質的に数値である場合は、String. ではなく、int、float、BigInteger などの型を...
    プログラミング 2024 年 11 月 2 日に公開
  • sync.WaitGroup を使用して Go 同時実行でデッドロックを防ぐ方法
    sync.WaitGroup を使用して Go 同時実行でデッドロックを防ぐ方法
    ゴルーチンのデッドロックの解決このシナリオでは、Go 同時実行コードでデッドロック エラーが発生しました。問題を詳しく調べて、効率的な解決策を提供しましょう。このエラーは、プロデューサとコンシューマの動作の不一致が原因で発生します。プロデューサー関数に実装されたプロデューサーは、限られた期間、チャネ...
    プログラミング 2024 年 11 月 2 日に公開
  • テキスト ファイル内の Unicode テキストを処理する方法: エラーのない書き込みのための完全ガイド
    テキスト ファイル内の Unicode テキストを処理する方法: エラーのない書き込みのための完全ガイド
    テキスト ファイル内の Unicode テキスト: エラーのない記述のための包括的なガイドGoogle ドキュメントから抽出されたデータのコーディングは、特に困難な場合があります。 HTML で使用するために変換する必要がある非 ASCII シンボルが見つかった場合。このガイドでは、Unicode ...
    プログラミング 2024 年 11 月 2 日に公開
  • EchoAPI と不眠症: 実践例による包括的な比較
    EchoAPI と不眠症: 実践例による包括的な比較
    フルスタック開発者として、私は API のデバッグ、テスト、文書化のための一流のツールを用意することがいかに重要であるかを知っています。 EchoAPI と Insomnia は 2 つの傑出したオプションであり、それぞれに独自の特徴と機能があります。これらのツールについて説明し、その機能と利点を比...
    プログラミング 2024 年 11 月 2 日に公開
  • 移動時間と所要時間 |プログラミングチュートリアル
    移動時間と所要時間 |プログラミングチュートリアル
    導入 このラボは、Go の時間と期間のサポートについての理解をテストすることを目的としています。 時間 以下のコードには、Go で時間と期間を操作する方法の例が含まれています。ただし、コードの一部が欠落しています。あなたの仕事は、コードを完成させて期待通りに動作させ...
    プログラミング 2024 年 11 月 2 日に公開
  • ホイスティングにおける面接の質問と回答
    ホイスティングにおける面接の質問と回答
    1. JavaScript におけるホイスティングとは何ですか? 答え: ホイスティングは、変数や関数にメモリが割り当てられる実行コンテキストの作成フェーズ中のプロセスです。このプロセス中に、変数用のメモリが割り当てられ、変数には未定義の値が割り当てられます。関数の場合、関数定義全...
    プログラミング 2024 年 11 月 2 日に公開
  • JavaScript のドキュメント オブジェクト モデル (DOM) を理解する
    JavaScript のドキュメント オブジェクト モデル (DOM) を理解する
    こんにちは、素晴らしい JavaScript 開発者の皆さん? ブラウザは、スクリプト (特に JavaScript) が Web ページのレイアウトと対話できるようにするドキュメント オブジェクト モデル (DOM) と呼ばれるプログラミング インターフェイスを提供します。 We...
    プログラミング 2024 年 11 月 2 日に公開
  • SPRING BATCH でプログラミングを始める
    SPRING BATCH でプログラミングを始める
    Introduction Dans vos projets personnels ou professionnels, Il vous arrive de faire des traitements sur de gros volumes de données. Le traite...
    プログラミング 2024 年 11 月 2 日に公開
  • CSS で Github プロフィールを目立たせる
    CSS で Github プロフィールを目立たせる
    これまで、Github プロフィールをカスタマイズできる唯一の方法は、写真を更新するか名前を変更することでした。これは、すべての Github プロファイルが同じに見え、カスタマイズしたり目立たせるためのオプションが最小限であることを意味しました。 それ以来、Markdown を使用してカスタム セ...
    プログラミング 2024 年 11 月 2 日に公開
  • TypeScript ユーティリティの種類: コードの再利用性の向上
    TypeScript ユーティリティの種類: コードの再利用性の向上
    TypeScript は、開発者が型を効果的に変換および再利用できるようにする組み込みのユーティリティ型を提供し、コードをより柔軟で ​​DRY にします。この記事では、TypeScript スキルを次のレベルに引き上げるのに役立つ、Partial、Pick、Omit、Record などの主要なユー...
    プログラミング 2024 年 11 月 2 日に公開
  • 電報 window.open(url, &#_blank&#); iOSでは動作がおかしい
    電報 window.open(url, &#_blank&#); iOSでは動作がおかしい
    電報ボットを作成していて、ミニアプリからチャットに情報を転送するオプションを追加したいと考えています。 window.open(url, '_blank'); を使用することにしました。 iPhone で試してみるまでは問題なく動作していました。転送の代わりに、Share を取得しま...
    プログラミング 2024 年 11 月 2 日に公開
  • フロントエンド開発者とは誰ですか?
    フロントエンド開発者とは誰ですか?
    今日のインターネット上のすべての Web サイトやプラットフォームのユーザー インターフェイス部分は、フロントエンド開発者の仕事の成果です。彼らはユーザーフレンドリーなインターフェイスの作成に携わり、サイトの外観と機能を保証します。しかし、フロントエンド開発者とはいったい誰なのでしょうか?簡単に説明...
    プログラミング 2024 年 11 月 2 日に公開
  • CSS スタイルを保持したまま HTML コンテンツを PDF として保存するにはどうすればよいですか?
    CSS スタイルを保持したまま HTML コンテンツを PDF として保存するにはどうすればよいですか?
    CSS を含む HTML コンテンツを PDF として保存するWeb 開発では、コンテンツを別の形式にエクスポートする場合でも、見た目の美しさを維持することが非常に重要です。変換プロセス中に CSS スタイルが失われる可能性があるため、HTML 要素を PDF として保存しようとするときに問題が発生...
    プログラミング 2024 年 11 月 2 日に公開
  • Print_r() の使用時にファントム プロパティが DateTime オブジェクトに追加されるのはなぜですか?
    Print_r() の使用時にファントム プロパティが DateTime オブジェクトに追加されるのはなぜですか?
    Print_r() DateTime オブジェクトを変更しますPrint_r() は、DateTime オブジェクトにプロパティを追加し、デバッグ中のイントロスペクションを有効にします。この動作は、PHP 5.3 で導入された内部機能の副作用であり、テキストにダンプされたインスタンスにファントム パ...
    プログラミング 2024 年 11 月 2 日に公開
  • C のデータ構造とアルゴリズム: 初心者に優しいアプローチ
    C のデータ構造とアルゴリズム: 初心者に優しいアプローチ
    C では、データ構造とアルゴリズムを使用してデータを整理、保存、操作します。データ構造: 配列: 順序付けされたコレクション、インデックスを使用して要素にアクセスする リンク リスト: ポインターを介して要素をリンク、動的長さをサポート スタック: 先入れ後出し (FILO) 原則キュー: 先入れ先...
    プログラミング 2024 年 11 月 2 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3