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 インストール チュートリアル

推薦する

HTML の基礎_一般的なタグ、共通タグ、表

パート 1 HTML <html> -- 開始タグ<ヘッド>ウェブページ上の...

Vueでドラッグ可能なコンポーネントを実装する方法

この記事では、Vueでドラッグ可能なコンポーネントとドラッグ可能なコンポーネントを実装する方法を参考...

docker+devpi を使用してローカル pypi ソースをビルドする方法

以前、開発で頻繁に pip ダウンロードを使用する必要がありました。pip ソースを国産ソースに変更...

初心者向けMySQLインデックス

序文MySQL インデックスで最も重要なデータ構造は B+ ツリーなので、まずは B+ ツリーの原理...

yum から docker インストール パッケージをダウンロードし、オフライン マシンにインストールする例の詳細なコード

1. ネットワークマシンでは、デフォルトのcentosyumソースを使用します [root@kole...

vue3 で vue-router を使用するための完全な手順

序文ルーティングの管理は、ほとんどのシングルページ アプリケーションにとって不可欠な機能です。 Vu...

Linux で SSH 経由でリモート ファイルシステムをマウントする方法の詳細な説明

SSHFS の機能: FUSE(Linux向けの最高のユーザー空間ファイルシステムフレームワーク)を...

Vue Element フロントエンドアプリケーション開発 従来の Element インターフェースコンポーネント

目次1. リストインターフェースとその他のモジュールの表示処理2. 従来のインターフェースコンポーネ...

MySQL 20 の高性能アーキテクチャ設計原則 (収集する価値あり)

オープンソース データベース アーキテクチャの設計原則01. 技術の選択最も使い慣れていて、最大限に...

Ubuntu インストール cuda10.1 ドライバ実装手順

1. cuda10.1をダウンロードします。 NVIDIA 公式ウェブサイト リンク: https:...

VueプロジェクトにPWAを導入する手順

目次1. 依存関係をインストールする2. vue.config.js ファイルで pwa を設定しま...

CentOS IP接続ネットワーク実装プロセス図

1. システムにログインし、ディレクトリに入ります: cd /etc/sysconfig/netwo...

MySQL テーブルスペースのリカバリに対する正しいアプローチについての簡単な説明

目次予備的注釈問題の再現データ削除の原則データの再利用どの操作がデータホールの原因になりますか?表領...

Linux での MySQL 5.7.17 の最新安定バージョンのインストール チュートリアル

ソースコードを通じて Linux に最新の安定バージョンの MySQL をインストールします: my...

Centos8で静的IPを設定する方法の詳細な説明

CentOS 8をインストールした後、ネットワークを再起動すると次のエラーが表示されますエラーメッセ...