JavaScriptの強力な演算子をいくつか見てみましょう

JavaScriptの強力な演算子をいくつか見てみましょう

序文

他の人のコードを読んでいるときに、自分の思考の流れがすぐに止まってしまうような奇妙な書き方に遭遇したことはありませんか? 我に返ったとき、ある英雄が以前にここにいたことに突然気づきます。

今日は、JavaScript の強力な演算子をいくつか見てみましょう~~~

1. ヌル合体演算子

初めて出会ったときに疑問符が 2 つ見えたなら、おそらく心の中にもっと疑問符があるはずです (子供たち、疑問符はたくさんありますか~~~)

2 つの疑問符は、null 合体演算子と呼ばれます。最初の引数が null/undefined でない場合は最初の引数を返し、そうでない場合は 2 番目の引数を返します。

console.log(1 ?? "www.shanzhzonglei.com"); // 1
console.log(false ?? "www.shanzhzonglei.com"); // false
console.log(null ?? "www.shanzhzonglei.com"); // www.shanzhzonglei.com
console.log(未定義?? "www.shanzhzonglei.com"); // // www.shanzhzonglei.com

したがって、最初のパラメータが null/undefined の場合にのみ、2 番目のパラメータが返されます。

JS では、undefined、null オブジェクト、値 0、NaN、ブール値 false、および空の文字列 '' はすべて false 値ですが、?? 非 null 演算子は null/undefined のみを処理することに注意してください。

これは、左側のオペランドが false の場合に右側のオペランドを返す論理 OR 演算子 (||) とは異なります。たとえば、偽値('' または 0)の場合。

コンソール.log(1 || 2); // 1
コンソール.log("" || 2); // 2

2. ??= 空代入演算子

ああ、疑問符が 2 つ以上になって、イコール記号もできました。質問は難しくなってきていますか?

??= 空の代入演算子。この代入演算子は、値が null または未定義の場合にのみ値を割り当てます。

学生 = { 年齢: 20 };
学生の年齢??= 18;
console.log(生徒の年齢); // 20

学生名 ??= "shanguagua";
console.log(student.name); // 'shanguagua'

これは上記の ?? null 合体演算子に関連しています。x ??= y は x ?? (x = y) と同等であり、x = y は x が null または未定義の場合にのみ実行されます。

x = null とします。
x ?? = 20;
コンソール.log(x); // 20

y = 5とします。
y ?? = 10;
コンソールログ(y); // 5

3. ?. オプション連鎖演算子

オプションの連鎖演算子 ?. を使用すると、チェーン内の各参照が有効であることを明示的に検証することなく、接続されたオブジェクトのチェーンの奥深くにあるプロパティの値を読み取ることができます。演算子はオブジェクトのプロパティが null または undefined かどうかを暗黙的にチェックし、コードをよりエレガントかつ簡潔にします。

定数オブジェクト = {
  名前: "山呱呱",
  フード: {
    バー: {
      バズ: 18,
      楽しい: () => {},
    },
  },
  学校:
    学生:
      {
        名前:「シャングアグア」、
      },
    ]、
  },
  言う() {
    「www.shanzhonglei.com」を返します。
  },
};

console.log(obj?.foo?.bar?.baz); // 18
console.log(obj?.school?.students?.[0]["name"]); // シャングアグア
console.log(obj?.say?.()); // www.shanzhonglei.com

4. ?: 三項演算子

三項演算子とも呼ばれます。まあ、これは非常によく使われます。

条件式b?x:yについては、まず条件bを計算してから判定します。 b の値が true の場合は、x の値を計算し、その結果が x の値になります。それ以外の場合は、y の値を計算し、その結果が y の値になります。

コンソール.log(false ? 1 : 2); // 2
コンソール.log(true ? 1 : 2); // 1

5. 論理 AND (&&) と論理 OR (||)

まず確認しましょう:

論理 AND (&&): 最初のオペランドが true の場合、2 番目のオペランドは評価されません。2 番目のオペランドが何であっても、最終的な計算結果は true になる必要があるためです。

実際の開発では、この機能を使用することで以下の操作を実現できます。

1. 値がtrueの場合、関数を実行する

関数 say() {
  console.log("www.shanzhonglei.com");
}
type = true とします。
タイプ && say(); // www.shanzhonglei.com

2. 価値を決定する

// age が 10 より大きく 20 より小さい場合のみ実行されます if (age > 10 && age < 20) {
  コンソールにログ出力します。
}

論理和 (||): 最初のオペランドが false (つまり、js の false 値) の場合、2 番目のオペランドは評価されません。これは、この時点では 2 番目のオペランドが何であっても、最終的な計算結果は false になる必要があるためです。

実際の開発では、この機能を使用することで以下の操作を実現できます。

1. 変数の初期値を設定する

学生 = {
  名前:「シャングアグア」、
};

console.log(student.age || "www.shanzhonglei.com"); // www.shanzhonglei.com

2. 価値を決定する

// 年齢が 10 または 20 または 30 の場合、if (age === 10 || age === 20 || age === 30) { を実行します。
  コンソールにログ出力します。
}

6. ビット演算子 & と |

ビット演算子は、& (and) や | (or) などのビットを操作します。ビット演算子を使用すると、小数点は切り捨てられます。数値を四捨五入するには |0 を使用します。 &1 を使用して奇数または偶数を判別することもできます。

実際の開発では、この機能を使用することで以下の操作を実現できます。

1. 丸め

1.3 |
  (0 - // 1 を出力
    1.9) |
  0; // -1 を出力

2. 奇数と偶数を判断する

num = 5 とします。
!!(num & 1); // 真
!!(数値 % 2); // 真

7. ダブルビット演算子~~

正の数の場合は Math.floor() の代わりに、負の数の場合は Math.ceil() の代わりにビット演算子を使用できます。

二重否定ビット演算子の利点は、同じ演算をより高速に実行できることです。正の数の場合、~~ は Math.floor() と同じ結果を返し、負の数の場合、Math.ceil() と同じ結果を返します。

Math.floor(5.2) === 5; // 真
~~3.2 === 3; // 真
Math.ceil(-6.6) === -6; // 真
~~-4.5 === -6; // 真

7. 論理演算子!

! は変数をブール型に変換でき、null、未定義、空の文字列 '' はすべて true に否定され、残りは false になります。一般的に言えば、!、!!、!=、!== など、いくつかの用法があります。

7.1 ! を使って否定する

cat = false とします。
console.log(!cat); // 真

7.2 !! を使って型判定を行う

このメソッドは、変数 a が null、undefined、または '' と等しくない場合にのみ実行できます。

var a;
if (a != null && typeof a != undefined && a != "") {
  //コンテンツがある場合にのみ実行されるコード}

は以下と同等です:

もし(!!a){
  //コンテンツがある場合にのみ実行されるコード...
}

7.3 2つの値は等しいか?

一般的に言えば、すべては !== と等しくありません。なぜなら、すべては !== と等しくないを使用すると、0 != "" は false を返すからです。その理由は、JS では、0 と '' は両方ともブール型に変換されると false になるからです。したがって、すべては !== と等しくないを使用することをお勧めします。

a = 0 とします。
b = 0 とします。
c = "0"とします。
d = '' とします。
a != b //偽
a != c // false 数値と文字列の 0 は等しいとみなされますa != d // false 0 と空の文字列は等しいとみなされますa !== b // false
a !== c // 真
a !== d // 真

要約する

これで、JavaScript の強力な演算子に関するこの記事は終了です。強力な JavaScript 演算子の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • js and or 演算子 || && マジック使用
  • js の || および && 演算子の詳細な説明
  • JavaScript 三項演算子の使用例
  • javascript typeof の使用法と typeof 演算子の紹介 [詳細]
  • Javascript ビット否定演算子 (~)
  • JS ビット非 (~) 演算子と ~~ 演算子の理解と分析
  • JS における三項演算子と if else の違いの分析と例
  • JS 演算子の単一の縦棒「|」と「||」の使い方と機能の詳細な説明
  • JS での指数、平方根、変数形式変換の演算子を教えます
  • Javascript ビット左シフト演算子 (<<) の紹介

<<:  CSS3 でのシンプルな LED デジタル時計の実装方法

>>:  MySQL接続がハングする理由の詳細な説明

推薦する

Docker-compose は Docker プライベート ウェアハウスのステップを迅速に構築します

docker-compose.ymlを作成し、次の内容を入力します。 バージョン: '3&#...

Vue はシームレスなカルーセル効果 (マーキー) を実現します

この記事では、シームレスなカルーセル効果を実現するためのVueの具体的なコードを例として紹介します。...

より人気がありクリエイティブなダーク背景のウェブデザインの例

暗い背景スタイルのページ デザインは非常に人気があり、シックでエレガント、そして非常にクリエイティブ...

Dockerコンテナがホストポートにアクセスできない場合の解決策

最近、仕事中に問題が発生しました。Docker コンテナがホストの redis にアクセスできず、t...

Vue スキャフォールディング プロジェクトを作成するための詳細な手順

vue スキャフォールディング -> vue.cli大規模で完全に機能する Vue プロジェク...

startup.bat をダブルクリックすると Tomcat がクラッシュする問題の解決方法の詳細な説明

Tomcat を学習したばかりのプログラマーにとって、これはよくある間違いです。 1. 環境変数の問...

mysql5.6 以前のデータベースで json をクエリする方法

MySQLにデータを保存するとき、乱雑であまり使用されないデータがJSONフィールドに投げ込まれるこ...

Linux スワップ パーティション (詳細説明)

目次リナックス1. SWAPとは2. swappiness は何を調節しますか? 3. スワップ操作...

Zabbix による SQL Server の監視プロセスの詳細な説明

Zabbix による SQL Server の監視を見てみましょう。まずfreetdsをダウンロード...

Dockerデータストレージの概要

この記事を読む前に、ボリューム、バインドマウント、tmpfs マウントの基本を理解しておいてください...

JSが5つ星の賞賛を獲得

この記事では、5つ星の評価を獲得するためのJSの具体的なコードを参考までに共有します。具体的な内容は...

MYSQL updatexml() 関数のエラーインジェクション分析

まず、updatexml()関数を理解する UPDATEXML (XML ドキュメント、XPath ...

MySQLで自動作成時間と変更時間を設定する方法の例

この記事では、MySQL の自動作成時刻と変更時刻を設定する方法について説明します。ご参考までに、詳...

タオバオモールのホームページ上の大きな画像のデザイン構造に関する分析と意見(写真)

前回、Taobaoの詳細ページを分析した後(クリックして表示)、ショッピングモールの基本テンプレート...

Node.jsはexpress-fileuploadミドルウェアを使用してファイルをアップロードします

目次プロジェクトを初期化するサーバーの作成クライアントを初期化するコンポーネントの記述ファイルアップ...