ECMAScript の演算子を理解するための記事

ECMAScript の演算子を理解するための記事

単項演算子

1つの値のみを演算できる演算子は単項演算子と呼ばれます。

増分と減分。インクリメント演算子とデクリメント演算子は C から借用されたもので、事前インクリメントと事後インクリメントの 2 つのバージョンがあります。

  • プレフィックス型: 演算子は、演算対象となる変数の前に配置されます。プレフィックスの増分および減分操作を実行すると、ステートメントが評価される前に変数の値が変更されます。
var 年齢 = 29;
var anotherAge = --age + 2
コンソール.log(年齢) // 28
console.log(別の時代) // 30

後置型: 演算子は、演算対象となる変数の後に配置されます。後増分および後減分演算は、それらを含むステートメントが評価された後に実行されます。

変数 num1 - 2;
var num2 = 20
var num3 = num1-- + num2; // 22
var num4 = num1 + num2; // 21

上記の 4 つの演算子は任意の値に適用できます。つまり、文字列、ブール値、浮動小数点値、オブジェクトに使用できます。以下のルールに従ってください:

  • 有効な数字文字を含む文字列に適用すると、まず数値に変換され、次に加算または減算演算が実行されます。文字列変数を数値変数に変換する
  • 数字文字を含まない文字列に適用すると、変数の値が NaN に設定されます。文字列変数を数値変数に変換する
  • ブール値 false に適用すると、まず 0 に変換され、その後加算または減算演算が実行されます。ブール変数は数値変数になる
  • true のブール値に適用すると、最初に 0 に変換され、その後加算または減算演算が実行されます。ブール変数は数値変数になる
  • 浮動小数点値に適用すると、1 の加算または減算を実行します。
  • オブジェクトに適用する場合は、まずオブジェクトの valueOf() メソッドを呼び出して操作する値を取得し、次にその値に上記のルールを適用します。 NaN の場合は、toString() メソッドが呼び出され、上記のルールが適用されます。オブジェクト変数は数値変数になる

上記のルールは検証されます:

var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
    値: 関数 () {
        -1を返す
    }
}
コンソールログ(s1++); // 2
コンソールログ(s1); // 3
console.log(s2++); // NaN
console.log(s2); // NaN
コンソール.log(b++); // 0
コンソールログ(b); // 1
コンソールログ(f--); // 1.1
コンソールログ(f); // 0.10000000000000009
console.log(o--); // -1
コンソール.log(o); // -2

単項プラスとマイナスの演算子

単項加算および減算演算子は、主に基本的な算術演算に使用されますが、データ型の変換にも使用できます。つまり、単項演算子を数値以外の値に適用すると、演算子は Number() 変換関数と同様に値の変換を実行します。ブール値の false と true は 0 と 1 に変換され、文字列値は特別な一連のルールに従って解析されます。オブジェクトは、最初に valueOf() または toString() メソッドを呼び出して解析され、結果の値が変換されます。単項プラス演算子を例に挙げます。

var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
    値: 関数 () {
        -1を返す
    }
}
s1 = +s1
s2 = +s2
s3 = +s3
b = +b
f = +f
o = +o
コンソール.log(s1) // 1
コンソール.log(s2) // 1.1
console.log(s3) // NaN
コンソール.log(b) // 0
コンソールログ(f) // 1.1
コンソール.log(o) // -1

ブール演算子

ブール演算子には、NOT、AND、OR の 3 つがあります。

1. 論理否定。感嘆符 (!) で示され、ECMAScript 内の任意の値で使用できます。この演算子は、オペランドのデータ型に関係なくブール値を返します。論理 NOT 演算子は、まずオペランドをブール値に変換し、次にそれを否定します。ルールに従う

  • オペランドがオブジェクトの場合は false を返します。
  • オペランドが空の文字列の場合は true を返します。
  • オペランドが空でない文字列の場合、false を返します。
  • オペランドの値が 0 の場合、true を返します。
  • オペランドがゼロ以外の値(Infinity を含む)の場合は、false を返します。
  • オペランドがnullの場合はtrueを返します
  • オペランドが NaN の場合は true を返します。
  • オペランドが未定義の場合は true を返します。
console.log(!false); // 真
console.log(!"blue"); // 偽
console.log(!""); // 真
console.log(!0); // 真
console.log(!undefined); // 真
console.log(!null); // 真
console.log(!NaN); // 真
console.log(!12345); 偽

2. 論理積。演算子は 2 つのアンパサンド (&&) で表され、2 つのオペランドを持ちます。論理 AND 演算子は、ブール値だけでなく、任意のタイプのオペランドに適用できます。論理 AND 演算では、オペランドの 1 つがブール値でない場合、必ずしもブール値が返されるわけではありません。この場合、次の規則に従います。

  • 最初のオペランドがオブジェクトの場合、2 番目のオペランドが返されます。
  • 2 番目のオペランドがオブジェクトの場合、最初のオペランドが true と評価された場合にのみそのオブジェクトが返されます。
  • 両方のオペランドがオブジェクトの場合、2 番目のオペランドを返します。
  • 最初のオペランドが null の場合、null を返します。
  • 最初のオペランドが NaN の場合、NaN が返されます。
  • 最初のオペランドが未定義の場合、undefined を返します。

論理 AND 演算は短絡演算です。つまり、最初のオペランドで結果を決定できる場合、2 番目のオペランドは評価されません。

3. 論理和。演算子は 2 つの縦棒記号 (||) で表され、2 つのオペランドを持ちます。論理 AND 演算と同様に、論理 OR は、オペランドの 1 つがブール値でない場合、必ずしもブール値を返すわけではありません。この場合、次の規則に従います。

  • 最初のオペランドがオブジェクトの場合、最初のオペランドが返されます。
  • 最初のオペランドが false と評価された場合、2 番目のオペランドが返されます。
  • 両方のオペランドがオブジェクトの場合、最初のオペランドが返されます。
  • 両方のオペランドが null の場合、null を返します。
  • 両方のオペランドが NaN の場合、NaN が返されます。
  • 両方のオペランドが未定義の場合、undefined が返されます。

論理 AND 演算子と同様に、論理 OR 演算子も短絡演算です。つまり、最初のオペランドが true と評価された場合、2 番目のオペランドは評価されません。

乗算演算子

ECMAScript では、乗算、除算、剰余の 3 つの乗法演算子が定義されています。乗算計算のオペランドが数値でない場合、バックエンドはまず Number() 変換関数を使用してそれを数値に変換します。たとえば、空の文字列は 0 として扱われ、ブール値 true は 1 として扱われます。

1. 乗算。演算子はアスタリスク (*) で表され、2 つの数値の積を計算するために使用されます。乗算演算子は、特殊な値を扱うときに特別な規則に従います。

  • 両方のオペランドが数値の場合、通常の乗算​​が実行されます。つまり、2 つの正の数または 2 つの負の数を乗算した結果は正のままですが、一方のオペランドのみが符号付きの場合、結果は負になります。積が ECMAScript 数値の範囲を超える場合は、Infinity または -Infinity が返されます。
  • どちらかのオペランドがNaNの場合、結果はNaNになります。
  • 無限大に0を掛けると、結果はNaNになる。
  • Infinity にゼロ以外の値を掛けると、結果は符号付きオペランドの符号に応じて Infinity または -Infinity になります。
  • 無限大を無限大で掛け合わせると、結果は無限大になる。
  • オペランドの 1 つが数値でない場合は、Number() がバックグラウンドで呼び出され、数値に変換されてから、上記のルールが適用されます。

2. 分割。演算子はスラッシュ記号 (/) で表され、2 番目のオペランドを 1 番目のオペランドで割る計算を実行します。以下のルールに従ってください:

  • 両方のオペランドが数値の場合、通常の除算が実行されます。つまり、2 つの正の数または 2 つの負の数を除算した結果は正になります。一方のオペランドのみが符号付きの場合、結果は負になります。値が ECMAScript 数値の範囲を超える場合は、Infinity または -Infinity が返されます。
  • どちらかのオペランドがNaNの場合、結果はNaNになります。
  • 無限大を無限大で割ると、結果はNaNになる。
  • 0を0で割ると結果はNaNになる
  • ゼロ以外の有限数をゼロで割ると、符号付きオペランドの符号に応じて、結果は無限大または - 無限大になります。
  • Infinity をゼロ以外の値で割ると、結果は符号付きオペランドの符号に応じて Infinity または -Infinity になります。
  • オペランドの 1 つが数値でない場合は、Number() がバックグラウンドで呼び出され、数値に変換されてから、上記のルールが適用されます。

3. 係数(剰余)を求めます。演算子はパーセント記号 (%) で表されます。以下のルールに従ってください:

  • オペランドが両方とも数値の場合は、通常の除算を実行し、余りを返します。
  • 被除数が無限大で除数が有限の場合、結果は NaN になります。
  • 被除数が有限数で除数がゼロの場合、結果はNaNになります。
  • 無限大を無限大で割ると、結果はNaNになる。
  • 被除数が有限数で除数が無限数の場合、結果は被除数になります。
  • 被除数がゼロの場合、結果はゼロになります
  • オペランドの 1 つが数値でない場合は、Number() がバックグラウンドで呼び出され、数値に変換されてから、上記のルールが適用されます。

加法演算子

乗算演算子と同様に、加算演算子もバックグラウンドで異なるデータ型間の変換を行います。

1. 追加。加算演算子はプラス記号 (+) で表されます。両方のオペランドが数値の場合、通常の加算が実行され、次の規則に従って結果が返されます。

  • どちらかのオペランドがNaNの場合、結果はNaNになります。
  • 無限大を無限大に足すと、結果は無限大になる
  • -Infinity と -Infinity を足すと、結果は -Infinity になります。
  • 無限大と-無限大を足すと、結果はNaNになる
  • +0 +0の場合、結果は+0になります
  • -0 + -0の場合、結果は-0になります
  • +0に-0を加えた場合、結果は0になります

いずれかのオペランドが文字列の場合、次の規則が適用されます。

  • 両方のオペランドが文字列の場合、2 番目のオペランドは最初のオペランドと連結されます。
  • 一方のオペランドのみが文字列の場合、もう一方のオペランドは文字列に変換され、2 つの文字列が連結されます。
  • オペランドの 1 つがオブジェクト、数値、またはブール値の場合、その toString() メソッドが呼び出されて対応する文字列値が取得され、その後、文字列の以前のルールが適用されます。
  • 未定義かつ null の場合、String() 関数が呼び出され、それぞれ文字列 "undefined" と "null" が取得されます。

2. 減算。減算演算子はマイナス記号 (-) で表され、加算演算子と同じ規則に従います。

  • 両方のオペランドが数値の場合、通常の算術減算が実行され、結果が返されます。
  • どちらかのオペランドがNaNの場合、結果はNaNになります。
  • InfinityからInfinityを引くと、結果はNaNになる。
  • -Infinityから-Infinityを引くと、結果はNaNになります。
  • 無限大から-無限大を引くと、結果は無限大になる。
  • -InfinityがInfinityの場合、結果は-Infinityになります。
  • +0から+0を引くと結果は+0になる
  • -0から+0を引くと結果は-0になる
  • -0から-0を引くと結果は+0になる
  • オペランドの 1 つが文字列、ブール値、null、または undefined の場合、Number() 関数がバックグラウンドで呼び出され、数値に変換されてから、前のルールに従って減算計算が実行されます。変換結果がNaNの場合、減算結果もNaNになります。
  • オペランドの 1 つがオブジェクトの場合、オブジェクトの valueOf() メソッドが呼び出され、オブジェクトを表す値が取得されます。結果の値が NaN の場合、減算の結果も NaN になります。オブジェクトに valueOf() メソッドがない場合、toString() メソッドが呼び出され、結果の文字列が数値に変換されます。
var result1 = 5 - 真
var 結果2 = NaN - 1
var 結果3 = 5 - 3
var 結果4 = 5 - ""
var result5 = 5 - "2"
var 結果6 = 5 - null
console.log(result1) // 4、true は 1 に変換されます
console.log(結果2) // NaN
コンソール.log(結果3) // 2
console.log(result4) // 5、空の文字列は0に変換されます
console.log(result5) // 3、文字列2が数値2に変換される
console.log(result6) // 5、nullが0に変換されるため

関係演算子

関係比較演算子には、より小さい (<)、より大きい (>)、以下 (<=)、以上 (>=) の 4 つがあります。数値以外の値を関係演算子のオペランドとして使用する場合は、データ変換や何らかの奇妙な操作も実行する必要があります。対応するルールは次のとおりです。

  • 両方のオペランドが数値の場合、数値比較が実行されます。
  • 両方のオペランドが文字列の場合、2 つの文字列の文字エンコード値が比較されます。
  • 一方のオペランドが数値の場合、もう一方のオペランドは数値に変換され、数値比較が実行されます。
  • 1 つのオペランドがオブジェクトの場合、オブジェクトの valueOf() メソッドが呼び出され、結果は前の規則に従って比較されます。オブジェクトに valueOf() メソッドがない場合、toString() メソッドが呼び出され、その結果を使用して前の規則に従って比較が実行されます。
  • 一方のオペランドがブール値の場合、比較を実行する前に数値に変換されます。

文字列を比較する場合、実際に比較されるのは、2 つの文字列の対応する位置にある各文字の文字コード値です。この比較の後、ブール値が返されます。大文字の文字コードは小文字の文字コードよりも小さくなります。

等価演算子

2 組の演算子: 等価と不等価 - 最初に変換してから比較します。厳密な等価と不等価 - 変換せずに比較のみを行います。

1. 平等と不平等。等価演算子は 2 つの等号 (==) で表され、2 つのオペランドが等しい場合に true を返します。不等号演算子は感嘆符とそれに続く等号 (!=) で表され、2 つのオペランドが等しくない場合は true を返します。どちらの演算子も、等しいかどうかを比較する前にオペランドを変換します (キャストと呼ばれることが多い)。異なるデータ型間で変換する場合は、次の基本的なルールに従ってください。

  • 一方のオペランドがブール値の場合、等しいかどうか比較される前に数値に変換されます。つまり、false は 0 に変換され、true は 1 に変換されます。
  • 一方のオペランドが文字列でもう一方が数値の場合、等しいかどうかを比較する前に文字列を数値に変換します。
  • 一方のオペランドがオブジェクトでもう一方がそうでない場合は、オブジェクトの valueOf() メソッドが呼び出され、プリミティブ型の値が前の規則に従って比較されます。

これら2つの演算子は比較する際に以下の規則に従います。

  • nullとundefinedは同等である
  • 等価性を比較する前に、null と undefined を他の値に変換することはできません。
  • いずれかのオペランドが NaN の場合、等価演算子は false を返し、不等価演算子は true を返します。等価演算子は、両方のオペランドが NaN の場合でも false を返します。規則により、NaN は NaN と等しくありません。
  • 両方のオペランドがオブジェクトの場合、それらが同じオブジェクトであるかどうかが比較されます。等価演算子は、両方のオペランドが同じオブジェクトを参照している場合は true を返し、それ以外の場合は false を返します。

2. 一致するものと一致しないもの。厳密な等価演算子は 3 つの等号 (===) で表され、2 つのオペランドが変換なしで等しい場合にのみ true を返します。厳密な不等号演算子には感嘆符とそれに続く 2 つの等号 (!==) があり、2 つのオペランドが変換なしで等しくない場合は true を返します。

var 結果1 = ("55" == 55)
var result2 = ("55" === 55)
var result3 = ("55" != 55)
var result4 = ("55" !== 55)
console.log(結果1) // 真
console.log(結果2) // 偽
console.log(結果3) // 偽
console.log(結果4) // 真

条件演算子

構文: var max = (num1 > num2) ? num1 : num2

上記の例では、max は最大値を格納します。式の意味は、num1 が num2 より大きい場合 (関係式が true を返す)、num1 の値が max に割り当てられ、num1 が num2 以下の場合 (関係式が false を返す)、num2 の値が max に割り当てられます。

代入演算子

代入演算子は等号 (=) で表され、その機能は右側の値を左側の変数に割り当てることです。等号の前に乗算演算子、加算演算子、またはビット演算子を追加すると、複合代入演算を完了できます。主要な算術演算子 (および他のいくつかの演算子) にはそれぞれ、対応する複合代入演算子があります。これらの演算子は次のとおりです。

  • 掛け算/代入——*=
  • 部門/割り当て——/=
  • モジュロ/代入——%=
  • 加算/代入——+=
  • 引き算/代入——-=
  • 左シフト/代入——<<=
  • 符号付き右シフト/代入——>>=
  • 符号なし右シフト/代入——>>>=

カンマ演算子

コンマ演算子は、 var num1=1, num2=2, num3=3;のように、1 つのステートメントで複数の操作を実行できます。

カンマ演算子は代入にも使用できます。代入に使用すると、カンマ演算子は常に式の最後の項目を返します。例: var num= (5, 6, 1, 4, 7, 0); // num值為0

要約する

ECMAScript の演算子に関するこの記事はこれで終わりです。より関連性の高い ECMAScript 演算子については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ECMAScript6 クイックスタートガイド
  • ECMAScriptの基礎
  • ECMAScript 5 のプロパティ記述子
  • ECMAScript6 新機能の例
  • ECMAScript5 の新しい配列メソッドの詳細な例

<<:  CentOS 8にJenkinsをインストールする方法

>>:  CentOS7 での mysql 5.7.23 のバイナリ インストール

推薦する

MySQL 8.0.17 をインストールしてリモート アクセスを構成する方法

1. インストール前の準備データベースのバージョンを確認するコマンド: mysql --versio...

JavaScript リフレクション学習のヒント

目次1. はじめに2. インターフェース3. 簡単な例4. 結論1. はじめにMDN の公式 Web...

MySQL 外部キー制約 (FOREIGN KEY) ケースの説明

MySQL 外部キー制約 (FOREIGN KEY) はテーブルの特別なフィールドであり、主キー制約...

MySQL 整合性制約の定義と例のチュートリアル

目次整合性制約整合性制約の定義整合性制約の分類主キー制約単一の主キーと複合主キーの違い主キーフィール...

シンプルなフロントエンドのページング効果を実現する js

比較的シンプルな業務のプロジェクトもありますが、フロントエンドのページングを多用します。プラグインの...

dockerでマウントされたディレクトリが読み書きできない問題を解決する

次のコマンドを使用してコンテナを作成し、ローカルの /home/dock/Downloads ディレ...

JavaScript を使用してタイムラインとアニメーション効果を実装するためのサンプル コード (フロントエンドのコンポーネント化)

目次コードのクリーニングJavaScript の「フレーム」 「フレーム」の実装方法1. 間隔を設定...

WeChatアプレット開発によりホームページポップアップボックスアクティビティガイダンス機能が実現

目次1. 需要2. データベース設計3.Javaバックグラウンド構成の実装4. WeChatアプレッ...

高同時実行シナリオにおける nginx 最適化の詳細な説明

日常の運用・保守作業では、nginx サービスが頻繁に使用され、nginx の高同時実行性によって生...

複数のフィールドを変更するためのMysql更新の構文の詳細な分析

MySQL でレコードを更新すると、構文は正しいのですが、レコードが更新されません...質問文実行前...

node.js で EventEmitter をカスタマイズする方法

目次序文1. 何ですか2. Node.jsでEventEmitterを使用する方法3. 実施プロセス...

WindowsにOpenSSLをインストールし、OpenSSLを使用して公開鍵と秘密鍵を生成します。

1. OpenSSL公式サイト公式ダウンロードアドレス: https://www.openssl....

Angularルーティングアニメーションと高度なアニメーション機能の詳細な説明

目次1. ルーティングアニメーション2. グループクエリとスタガー1. ルーティングアニメーションル...

Centos7 への mysql8.0rpm のインストール チュートリアル

まず、図をダウンロードしてください 1. まず、centos7に付属しているmariadbをアンイン...

CentOS7 は yum を使用して mysql 8.0.12 をインストールします

この記事では、centos7にyumを使用してMySQL 8.0.12をインストールする詳細な手順を...