operators 比較演算子 論理演算子 - 演算子(== vs ===)と等しいJavaScriptは、JavaScriptの比較で使用する必要がありますか?





15 Answers

==演算子の使用( 等価

true == 1; //true, because 'true' is converted to 1 and then compared
"2" == 2;  //true, because "2" is converted to 2 and then compared

===演算子( アイデンティティ )を使用する

true === 1; //false
"2" === 2;  //false

これは、 等価演算子==が型変換を実行するためです。つまり、インタプリタは暗黙的に値を変換してから比較することを意味します。

一方、 アイデンティティ演算子===は型強制を行わないため、比較の際に値を変換しません。

条件演算子 否定 代入演算子

私はJSLintを使ってJavaScriptを使っていますが、 idSele_UNVEHtype.value.length == 0idSele_UNVEHtype.value.length == 0内で比較するようなことをするとき== (2つの等号)を===ステートメント。

====に置き換えるとパフォーマンス上のメリットはありますか?

多くの比較演算子が存在するため、パフォーマンスの改善は歓迎されます。

タイプ変換が行われない場合は、 ==以上のパフォーマンスが得られますか?




=====間の等価比較の興味深い図解表現。

出典: dorey.github.io/JavaScript-Equality-Table : dorey.github.io/JavaScript-Equality-Table

var1 === var2

JavaScriptの等価性テストに===を使用すると、すべてがそのままです。 評価される前に変換されるものはありません。

var1 == var2

JavaScriptの等価性テストに==を使用すると、いくつかの面白い変換が行われます。

この話の教訓:

あなたが==で起こる変換を完全に理解しない限り、 ===使用してください。




PHPとJavaScriptでは、厳密な等価演算子です。 つまり、タイプと値の両方を比較します。




JavaScriptでは、同じ値と型を意味します。

例えば、

4 == "4" // will return true

しかし

4 === "4" // will return false 



同じ辺のが同じであるかどうかをチェックします

例:

'1' === 1 // will return "false" because `string` is not a `number`

一般的な例:

0 == ''  // will be "true", but it's very common to want this check to be "false"

別の一般的な例:

null == undefined // returns "true", but in most cases a distinction is necessary



厳密な等価性/比較のためのJavascript実行フロー図=== '

非厳密な等価性/比較のためのJavascript実行フロー図 '=='




これは、型強制変換なしでの等価性を意味します。型変換はJavaScriptが自動的に他のデータ型を文字列データ型に変換しないことを意味します

0==false   // true,although they are different types

0===false  // false,as they are different types

2=='2'    //true,different types,one is string and another is integer but 
            javaScript convert 2 to string by using == operator 

2==='2'  //false because by using === operator ,javaScript do not convert 
           integer to string 

2===2   //true because both have same value and same types 



等しい比較演算子==は混乱するので、避けるべきです。

あなたがそれに住んでいなければならない場合は、次の3つのことを覚えておいてください:

  1. 推移的ではない: (a == b)(b == c)(a == c)
  2. 否定とは相互に排他的です: (a == b)(a!= b)は常に反対のブール値を持ち、すべてaとbです。
  3. 疑いがある場合は、以下の真理値表を心に留めてください。

JAVASCRIPTの等号演算子の真理値表

  • テーブルの各行は、3つの相互に等しい値のセットです。つまり、2つの値が等しい==符号*

** STRANGE:最初の列の2つの値はその意味で等しくないことに注意してください。**

''       == 0 == false   // Any two values among these 3 ones are equal with the == operator
'0'      == 0 == false   // Also a set of 3 equal values, note that only 0 and false are repeated
'\t'     == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
'\r'     == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
'\n'     == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
'\t\r\n' == 0 == false   // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

null == undefined  // These two "default" values are not-equal to any of the listed values above
NaN                // NaN is not equal to any thing, even to itself.



はい! それは問題である。

===演算子は、javascriptの値と型をチェックし as ==演算子は値をチェックします(必要に応じて型変換を行います)

簡単にテストすることができます。 次のコードをHTMLファイルに貼り付けてブラウザで開きます

<script>

function onPageLoad()
{
    var x = "5";
    var y = 5;
    alert(x === 5);
};

</script>

</head>

<body onload='onPageLoad();'>

あなたは警告で「 」を得るでしょう。 onPageLoad()メソッドを変更してalert(x == 5); あなたは本当になるでしょう。




これは厳しいチェックテストです。

特に0とfalseとnullの間をチェックしているのなら、それは良いことです。

たとえば、次のような場合:

$a = 0;

次に:

$a==0; 
$a==NULL;
$a==false;

すべてが真実を返し、あなたはこれを望まないかもしれません。 配列の0番目のインデックスを返す関数があるとします。失敗した場合はfalseを返します。 "==" falseをチェックすると、混乱した結果が得られます。

だから、上記と同じことだが、厳密なテスト:

$a = 0;

$a===0; // returns true
$a===NULL; // returns false
$a===false; // returns false



単に

== type conversionオペランドの比較を意味する

そして、

=== type conversion ないオペランドの比較を意味します

javaScriptでの型変換は、javaScriptが他のデータ型を自動的に文字列データ型に変換することを意味します。

例えば:

123=='123'   //will return true, because JS convert integer 123 to string '123'
             //as we used '==' operator 

123==='123' //will return false, because JS do not convert integer 123 to string 
            //'123' as we used '===' operator 



上の2つの答えは両方とも==は平等を意味し、===は同一性を意味します。残念ながら、このステートメントは正しくありません。

==の両方のオペランドがオブジェクトである場合、それらが比較されて、それらが同じオブジェクトであるかどうかが確認されます。両方のオペランドが同じオブジェクトを指す場合、等価演算子はtrueを返します。そうでなければ、2つは等しくない。

var a = [1, 2, 3];  
var b = [1, 2, 3];  
console.log(a == b)  // false  
console.log(a === b) // false  

上記のコードでは、aとbが同じオブジェクトではないため、==と===の両方がfalseになります。

つまり、==の両方のオペランドがオブジェクトの場合、==は===と同じように動作します。これは同一性も意味します。この2つの演算子の本質的な違いは型変換です。==は等価をチェックする前に変換を行いますが、===は変換しません。




コアJavaScriptリファレンス

===trueオペランドが型変換なしで厳密に等しい場合(上記参照)を返します。




平等比較:

オペレーター ==

両方のオペランドが等しい場合にtrueを返します。オペランドは、比較される前に同じ型に変換されます。

>>> 1 == 1
true
>>> 1 == 2
false
>>> 1 == '1'
true

平等と型の比較:

オペレーター ===

両方のオペランドが等しく、同じ型の場合に真を返します。あなたがこのように比較すれば、一般的にはより良く安全になります。なぜなら、背後でタイプの変換がないからです。

>>> 1 === '1'
false
>>> 1 === 1
true



nullとundefinedは無駄です。つまり、

var a;
var b = null;

ここには値がaありbません。一方、0、偽、および 'はすべて値です。これら全てに共通しているのは、すべてが虚偽の値であるということです。つまり、すべて虚偽の条件を満たすことを意味します。

したがって、0、false、および ''は一緒にサブグループを形成します。一方、第2のサブグループをヌル&未定義フォームにします。下の画像の比較を確認してください。nullとundefinedは等しくなります。他の3つはお互いに等しいでしょう。しかし、それらはすべてJavaScriptで偽の条件として扱われます。

これは、任意のオブジェクト({}や配列など)と同じですが、空でない文字列&Boolean trueは真実の条件です。しかし、彼らはすべて平等ではありません。




Related