JavaScript でエラーが発生しやすい演算子操作の概要

JavaScript でエラーが発生しやすい演算子操作の概要

算術演算子

+ - * / % ()

異常状況1: 特殊値リテラルを含む操作

  • NaNを含む演算: 結果はすべてNaNになります
  • Infinity が参加する操作は状況によって異なります。たとえば、次のようになります。
5/無限大=0
5%無限大=5
無限大%5=NaN
無限大+5=無限大
無限大 / 無限大 = NaN
無限大 - 無限大 = NAN
無限大 % 無限大 = NAN

特殊値演算は仕事では使われず、実用上も意味がありませんが、面接などで遭遇した場合に備えて理解しておく必要があります。

異常な状況 2: 他の種類のデータが数学演算に関与します。

文字列を含む + 演算 (記号の片側にのみ文字がある場合も含む): + 記号はハイフンになり、前後を接続して文字列全体を形成します。

例えば:

        var a = 3 - "36" % 5 + "2" - 2
        コンソールログ(a)
        var b = "36" % 5
        コンソールログ(b)
        var c = 3 - "36" % 5 + "2"
        コンソール.log(c)

出力:

20
1
22

暗黙的な変換: 文字列を含む + 演算を除き、他のすべてのデータ型が数学演算に参加する場合、コンピューターは演算に参加する前に他のデータ型を数値型に自動的に変換します。このプロセスでは、parseInt() や Number() などのメソッドを使用する必要はありません。プロセスは秘密裏に実行されます。これは暗黙的な変換プロセスです。

暗黙的な変換

その他のデータ型は暗黙的に数値型に変換されます。

  • 対応する数字: 純粋な数値文字列は対応する数字に変換されます "123" → 123
  • 1に変換: true
  • 0 に変換: false、null、"" 空文字列、空白文字列
  • NaNに変換: 未定義、空でない、純粋でない数値文字列

比較演算子

関係演算子とも呼ばれます。比較演算子はオペランドを比較し、ブール値を返します。演算の結果は true または false のいずれかになります。

> より大きい

< 未満

>= より大きいか等しい

<= 以下

==は等しい。値が等しいかどうかのみを判定し、データ型は判定しません。

!= 等しくない、等しいの正反対

=== は値だけでなくデータ型にも等しくなります。

!==は等しくない、つまり等しいの正反対である。

異常ケース1: 比較演算に特殊な値が関与する

  • NaN が関与します: 等しくない、完全に等しくないは真、その他はすべて偽
  • Infinity が参加する操作は状況によって異なります。たとえば、次のようになります。
無限大 == 無限大 -> 真
無限大 === 無限大 -> 真
無限大 > 無限大 -> 偽
無限大 >= 無限大 -> True

異常な状況 2: 他のデータ型が比較演算に参加する (文字列間の比較を除く)

他のデータ型も比較のために暗黙的に数値に変換されます。

“123”→123 真→1 偽→0 null→0 未定義→NaN “”→0 “abc”→NaN

nullの判定は特別です。nullと0が判定される場合、等価性は偽、>=と<=は真となります。

null == 未定義 -> True

異常事態3: 文字列と文字列の比較

暗黙的に数値に変換されることはありません。ただし、2 つの文字列は Unicode 順に比較されます。

文字コードの順序: 前から後ろへ 0-9、AZ、az、前の文字が後ろの文字より小さい

比較する場合、2 つの文字列の長さは重要ではありません。比較は最初の文字から始まり、サイズが決定されるまで続きます。それ以上の比較は行われません。

論理演算子

論理演算子はブール値の間でよく使用されます。オペランドが両方ともブール値の場合、戻り値もブール値になります。

&& 論理積演算子
|| 論理OR演算子
! 論理否定演算子

異常事態

  • ブール値に加えて、他のデータ型の値も論理演算に参加できます。演算中、オペランドは判定計算に参加するために暗黙的にブール値に変換される必要があり、最終的な演算結果は元の特定の位置にあるデータのままです。
  • すべての論理演算がブール値を返すわけではありません。他のデータによって取得された結果は、データそのものです。

ブール値への暗黙的な変換のルール

  • false に変換: NaN、0、"" 空文字列、null、未定義
  • true に変換: 0 以外、NaN 以外、空でない文字列

非ブール値に使用すると、戻り値は非ブール値になる可能性があります。実際、この操作は非常に簡単です。

  • (論理積 a && b) a が false に変換できる場合は a を返し、そうでない場合は b を返します。
  • (論理和 a || b) a が true に変換できる場合は a を返し、そうでない場合は b を返します。

論理演算子の演算順序

包括的な演算順序: NOT、AND、OR

代入演算子

= 等しい
+= 加算と等号
-= マイナス 等しい
*= 掛け算は
/= 等しい値で割る
%= 残りは
++ 増分
- デクリメント

単項演算子

++ -- !

++ または -- 記号は、変数の前または後に記述できます。位置が異なると、プログラムの実行結果が異なる場合があります。

++ を例に挙げます。

  • a++: ++ 記号は変数の後に来ます。プログラム内で使用される a++ の元の値は 1 増加しません。その後、変数 a が 2 回目に使用されるとき、a は 1 増加した新しい値を使用します。まずは参加して、それから自分自身を追加してください。
  • ++a: ++ 記号は変数の前にあります。++a の実行中は、a の新しい値に 1 を加えた値が使用されます。その後、変数 a が 2 回目に使用されるときも、a の新しい値に 1 を加えた値が使用されます。まずは自分を追加して参加しましょう

例1

var a = 3; 
var b = a++; 
var c = ++a;
コンソールログ(a,b,c)

出力:

5 3 5

例2

出力:

操作の優先順位

優先順位は最高から最低まで:

1. () が最も優先度が高い

2. 単項演算子 ++ -- !

3. 算術演算子は * / % の後に + - が続きます

4. 関係演算子 > >= < <=

5. 等価演算子 == != === !==

6. 論理演算子 && の後に || が続く

7. 代入演算子

var a = 4; var num = 1 * (2 + 3) && a++ || 5 > 6 && 7 < 8 || !9; 
コンソール.log(数値)

出力:

4

要約する

以上で、JavaScript の演算子計算でエラーになりやすい部分についてまとめました。JavaScript の演算子計算に関するより詳しい内容は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  MySQL 8.0.18 のインストールと設定方法のグラフィックチュートリアル

>>:  Linux での mysql-5.7.28 インストール チュートリアル

推薦する

MySQLの遅いクエリ問題の詳細な分析データ送信

例を通して、MySQL のデータ テーブル送信のクエリが遅い問題の解決策を共有しました。最近、コード...

Centos7でmysql6の初期化インストールパスワードをインストールする方法

1. まずデータベースサーバーを停止しますサービスmysqld停止2.vim /etc/my.cnf...

ページ リファクタリング スキル - Javascript、CSS

JS、CSSについてCS: ...上部のスタイルシートCSS式を避ける外部JS、CSSの使用JSと...

Linux サーバーに埋め込まれた ddgs および qW3xT.2 マイニング ウイルスの対処の実践記録

序文仮想通貨の狂気的な投機により、マイニングウイルスは犯罪者が最も頻繁に使用する攻撃方法の 1 つに...

MySQL DDLステートメントの使用

序文SQL の言語分類には主に以下の種類があります。 DDLデータ定義言語作成、削除、変更データ定義...

DOCTYPE HTMLを使用する理由

これがないと、ブラウザはページをレンダリングするときに Quirks モードを使用することがわかって...

VueとVueComponentの関係の詳細な説明

次のケースでは、これまでに学んだプロトタイプチェーンの知識ポイントを確認します。 // コンストラク...

js配列の基本的な使い方のまとめ

序文配列は特別な種類のオブジェクトです。 js には実際の配列はなく、オブジェクトを使用して配列をシ...

MySQLにインデックスを追加する方法

インデックスの簡単な紹介は次のとおりです。インデックスを追加する目的は、データベース クエリのパフォ...

MySQLデータベースは重複データを削除し、メソッドインスタンスを1つだけ保持します

1. 問題の紹介ユーザー テーブルに 3 つのフィールドが含まれているシナリオを想定します。 id、...

進捗バーのネイティブ JavaScript 実装

進捗バーを実装するためのJavaScriptの具体的なコードは参考までに。具体的な内容は次のとおりで...

Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)

1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...

MySql データベースにリモートでログインするにはどうすればよいですか?

はじめに: プロジェクトを開発するために、サーバーに MySql データベース サーバーを展開し、ロ...

ReactHooks バッチ更新状態とルートパラメータの取得例の分析

目次1. 一括更新の方法コンソール出力2. フックがルーティングパラメータを取得する方法実行効果1....

MySQL インストール プロンプト「詳細なヘルプについては NET HELPMSG 3534 と入力してください」の解決方法

今日、MySQL をインストールすると次のエラー メッセージが表示されます。 かなり長い時間ネットで...