2017-01-18 10 views
-2

下のコードから、変数yとzを比較したい場合、厳密な型の比較は一致しますが、y == zは一致しません。誰でもその理由と厳密なタイプの仕組みを説明できますか?あなたは二重の等号(ルース平等)を使用する場合javascriptの一重引用符と二重引用符の比較 - 厳密な型

<script language="javascript" type="text/javascript"> 
    var x=11; 
    var y="11"; 
    var z='11'; 

    if(x==y) 
     alert('x==y'); 
    if(y==z) 
     alert('y==z'); 
    if(x===y) 
     alert('x===y'); 
    if(y===z) 
     alert('y===z'); 
    if(x==z) 
     alert('x==z'); 
    if(x===z) 
     alert('x===z'); 
</script> 
+0

厳密な型は '" 'と' '[] '正常に動作上(https://で私。 –

+0

@JamesThorpe for me。 –

+0

"でもy == zは一致しません" - そうです:http://jsbin.com/qatucom/1/edit?js、コンソール – Quentin

答えて

1

を確認することができます。

> typeof "11"; 
"string" 
> typeof '11'; 
"string" 
> "11" === '11' 
true 
> "11" == '11' 
true 
0

あなただけを比較するが、3つのequals(厳密な等価)を使用しているとき、あなたはあまりにも種類を比較します。

Loose Equalityは、両方の値を共通タイプに変換した後、2つの値が等しいかどうかを比較します。

ので、

var y = 11; // number 
var z = '11'; // string 

var equalValues = y == z; // true 
var equalValuesAndTypes = y === z; // false 

場合は、両方の文字列であり、またそれが一致していますMDN docs

+0

彼は '' 11 '=== "11" '、' 11 ===' 11 ''を比較しません。 –

1

JavaScriptは厳密とタイプ変換等価比較の両方を有します。完全一致の場合、比較するオブジェクトは同じ型でなければなりません。

2つの文字列は、対応する位置に同じ文字列、同じ長さ、同じ文字がある場合、厳密に等しくなります。 2つの数値は、数値が等しい場合(数値の値が同じ場合)は厳密に等しくなります。 NaNはNaNを含む何と同等ではありません。正のゼロと負のゼロは互いに等しい。 2つのブールオペランドは、両方が真または両方が偽の場合、厳密に等しくなります。 2つのオブジェクトは、同じオブジェクトを参照する場合、厳密に等しくなります。 ヌル型と未定義型は==です(===ではありません)。 [すなわち、 (NULL ==未定義)が偽真が、(ヌル===未定義)です]

Check this out

+0

一重引用符と二重引用符を使用すると可変文字列になり、両方とも文字列になります。あなたの答えは役に立たない。 –

+0

私はdifferenc ==と===の間のe。チェックのリンク – Nimish

+0

ええ、しかし、彼は2つの文字列(シングルクォートとダブルクォート)を比較するので、比較の問題はありません。 –

関連する問題