ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript基礎講座で関係式の定義と使い方を詳しく解説

JavaScript基礎講座で関係式の定義と使い方を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-19 10:24:531231ブラウズ

関係演算子は 2 つの値の間の関係 (等しい、より小さい、または「のプロパティである」) をテストするために使用され、関係が存在するかどうかに応じて true と false を返します。関係式は常にブール値を返します。通常、プログラムの実行フローを制御するために if while または for ステートメントで使用されます。

i等価演算子と不平等演算子

「==」演算子と「===」演算子は、2 つの値が等しいかどうかを比較するために使用されます。この 2 つの演算子では、任意のタイプの演算子を使用できます。等しい場合は true を返し、そうでない場合は false を返します。「===」は厳密等価演算子 (恒等演算子とも呼ばれます) とも呼ばれ、2 つのオペランドが厳密に等しいかどうかを検出するために使用されます。 「==」演算子は等価演算子と呼ばれ、2 つのオペランドが等しいかどうかを確認するために使用されます。ここでの等価の定義は緩やかで、型変換が可能です。

Javascript は「=」、「==」、「===」演算子をサポートしていますが、(代入、等価、同一性) 演算子の違いを理解する必要があります。プログラミングでは注意して使用してください。混乱を避けるために、「=」は「取得または代入」、「==」は「等価」、「===」は「厳密な等価」と呼ばれます。

「!=」と「!==」演算子ルールは「==」演算子の否定であり、「!」はブール演算子です。「!=」、「!」となります。 " == は、厳密な等価性ではなく、不平等と呼ばれます。JavaScript オブジェクトの比較は、値の比較ではなく、参照の比較です。物体はそれ自体と等しいが、人も物体も等しくない。 2 つのオブジェクトが同じ数のプロパティ、同じプロパティ名と値を持っている場合でも、それらは等しくありません。対応する位置の配列要素が等しい場合でも、2 つの配列は等しくありません。

厳密等価演算子「===」は、まずオペランドの値を計算し、次に型変換を行わずに 2 つの値を比較します。

2 つの値が同じ型でない場合、それらは等しくありません

両方の値が null または未定義の場合、それらは等しくありません

両方の値がブール値 true または false の場合、それらは等しくありません
いずれかの値が NaN である場合、または両方の値が NaN である場合、それらは NaN ではなく、それ自体を含む他の値も等しくありません。
2つの値が数値で等しい場合、それらの値は等しいです。値が 0 と値が -0 の場合も、それらは等しいです。
2 つの値が文字列で、対応するビットに含まれる 16 桁 (第 3 章、セクション 2 を参照) が完全に等しい場合、それらは等しいです。長さや内容が異なる場合、それらは同等ではありません。 2 つの文字列はまったく同じように機能し、同じ文字を表示する場合がありますが、JavaScript はエンコードなしで 16 ビット値を持ちます。そのため、そのような文字列は「===」と「==」を介して渡されます。演算子の比較結果も等しくありません。パート 3 の String.localeCompare() は、文字列を比較する別の方法を提供します。
同じオブジェクト、配列、または関数を指している場合、2 つの参照値は等しいです。それらが異なるオブジェクトを指している場合、両方のオブジェクトがまったく同じプロパティを持っていても、それらは等しくありません。
等価演算子「==」は恒等演算子に似ていますが、等価演算子の比較は厳密ではありません。 2 つの数値が同じ型ではない場合、等価演算子は型変換を試みてからそれらを比較します。

2 つの演算タイプが同じ場合、比較ルールは上記の等価演算子と同じになります。厳密に等しい場合、比較結果は等しいです。厳密に等しくない場合、比較の結果は不等になります。

2 つの演算タイプが異なる場合、「==」等価演算子もそれらを等しいとみなします。等しいかどうかの検出は、次のルールと型変換に従います。

一方の型が null で、もう一方が未定義の場合、それらは等しいです。
一方の値が数値で、もう一方が文字列の場合、最初に文字列を数値に変換してから、変換を使用します。最後の値を比較します。
値が true の場合は 1 に変換され、値が false の場合は 0 に変換されて比較されます。
一方の値がオブジェクトで、もう一方の値が数値または文字列の場合、第 3 章、第 8 節、第 3 項のメソッドの変換規則を使用してオブジェクトをプリミティブ値に変換し、比較します。オブジェクトは、toString() メソッドまたは valueOf() メソッドを通じてプリミティブ値に変換されます。 JavaScript 言語のコアにある組み込みクラスは、最初に valueOf() を使用しようとし、次に toString() を使用しようとします。日付クラスを除き、日付クラスは toString() を通じてのみ変換できます。コア JavaScript 言語の一部ではないオブジェクトは、実装で定義されたメソッドを使用してプリミティブ値に変換されます。
他の異なる型間の比較は等しくありません
ここに等しい判定の小さな例があります

"1" == true

この式の結果は true であり、全く異なる型の値の比較結果が次のとおりであることを示します等しい。ブール値 true は、比較が実行される前に、まず数値 1 に変換されます。次に、文字列「1」も数値 1 に変換されます。2 つの数値が等しいため、結果は true になります。


ii より小さい (834fb7cb7bc726902ddab1b55753128b)

より大きいor等しい (>=)

.... (意味については詳しく説明しません)

比較演算子のオペランドは任意の型にすることができます。ただし、実際に比較演算子を実行できるのは数値と文字列のみであるため、数値または文字列ではないオペランドは型変換されます。型変換ルールは次のとおりです。

オペランドがオブジェクトの場合、第 3 章、セクション 8、サブセクション 3 のロックの説明に記載されている変換ルールに従ってプリミティブ値に変換されます。プリミティブ値を指定した場合は、このプリミティブ値を直接使用します。それ以外の場合は、toString() の変換結果が比較に使用されます。
ペアをプリミティブ値に変換した後、両方のオペランドが文字列の場合、2 つの文字列はアルファベット順に比較されます。ここで言う「アルファベット順」は 2 つの文字列の 16 ビット Unicode 文字のインデックス順です。 。
オブジェクトがプリミティブ値に変換された後、少なくとも 1 つのオペランドが文字列でない場合、両方のオペランドが数値的に比較されます。 0 と -0 は等しいです。 Infinty は他の数値 (infinty 自体を除く) より大きく、-infinty は他の数値 (infinty 自体を除く) より小さいです。オペランド (または変換された) が NaN の場合、比較演算子は常に false を返します
数値の場合および文字列演算子の場合は Asプラス演算子と比較演算子の動作は異なります。前者は、オペランドの 1 つが文字列の場合、文字列の連結を実行します。比較演算子は、両方のオペランドが文字列である場合にのみ数値を優先します。文字列比較が実行されます。

1 + 2 //=>3 加算、結果は 3
"1" + "2" //文字列連結、結果は "12"
"1" + 2 //文字列連結、2 が変換"2" にすると、結果は "12" になります
11 "11" "11" "one" 3e654ee823391a1b572fda8e9dae66cc =" 演算子は、等価性を判断するときに等価演算子や厳密な等価比較規則に依存しません。対照的に、以下演算子は単に「以下」であり、以上演算子は単に「以下ではない」です。 1 つの例外を除いて、(変換後の) オペランドの 1 つが NaN の場合、4 つの比較演算子はすべて fasle.

iii.in 演算子を返します

in 演算子は、その左側のオペランドが a であることを期待します。 文字列は文字列に変換できます。 、その右側がオブジェクトであることを望みます。右側のオブジェクトに左側のオペランド値という名前の属性名がある場合、式は true を返します。たとえば、

var point = {
     x: 1,
     y: 1
   } //定义一个对象
   "x" in point //=>true 对象有一个名为x的属性
   "z" in point //=>false 对象无名为z的属性
   "toString" in point // =>true 对象继承了toString方法
   var data = [7, 8, 8]
            "0" in data //=>true 数组包含0
             1 in data //=>true 数字转换为字符串
             3 in data //=>fase 没有索引为3的元素

iiii.instanceof 演算子

instanceof 演算子は、左側の演算子がオブジェクトであること、右側のオペランドがオブジェクトであることを期待します。オブジェクトの種類を示します。左側のオブジェクトが右側のクラスのインスタンスである場合、式は true を返します。これについては第 9 章で説明します。 JavaScript オブジェクトのクラスは、コンストラクターを初期化することによって定義されます。この場合、instanceof の右側のオペランドは関数である必要があります。例:

var d = new Date(); //构造一个新对象
  d instanceof Date; //计算结果为true, d是Date() 创建的
  d instanceof Object //计算结果为true ,所有的对象都是Object的实例
  d instanceof Number //计算结果为 false,d不是一个Number对象
  var a = [1,2,3] //数组直接量创建数组
  a instanceof Array //计算结果true a为数组
  a instanceof Object //true 所有的数组都是对象
  a instanceof RegExp //fasle 数组不是正则表达式

すべてのオブジェクトは Object のインスタンスであることに注意してください。オブジェクトがクラスのインスタンスであるかどうかをinstanceofでチェックする場合、この判断は「スーパークラス」検出とも呼ばれます。instanceofの左側の操作オブジェクトがオブジェクトでない場合、instanceofはfalseを返します。右側の演算が関数ではない場合、typewrong の例外がスローされます。

instanceof 演算子の仕組みを理解するには、まず JavaScript の継承メカニズムである「プロトタイプ チェーン」について理解する必要があります。プロトタイプ チェーンについては、第 6 章、第 2 節、第 2 章で詳しく説明します。

式 o instanceof f を計算するために、JavaScript PenXian は最初に f.prototyoe を計算し、次にプロトタイプ チェーン内の o をクエリします。見つかった場合、o は f のインスタンス (または f の親クラス) であり、true になります。が返されます。それ以外の場合は false

以上がJavaScript基礎講座で関係式の定義と使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。