2017-01-18 72 views
-2

從下面的代碼時,我想比較變量y和z,這裏嚴格的類型比較是匹配的,但ÿ== 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嚴格類型://我。 。stack.imgur.com/qkHhF.png) –

+0

@JamesThorpe對我來說太 –

+0

「但Ÿ== z不匹配」 - 是的,它是:http://jsbin.com/qatucom/1/edit?js,控制檯 – Quentin

回答

1

兩者都是字符串,也它的匹配。

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

當您使用雙等號(寬鬆平等)你想比較,但使用三個等於(全等),當你比較類型了。

鬆散等號將兩個值轉換爲普通類型後比較兩個值的相等性。

所以,如果

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有既嚴格和類型轉換相等比較。爲全等被比較的對象必須具有相同的類型和:

兩個字符串嚴格相等時,他們有字符,相同的長度,並在相應位置相同的字符的相同序列。 兩個數字在數字上相同時(數字值相同)嚴格相等。 NaN不等於任何東西,包括NaN。正和負的零相等。 如果兩者都爲真或兩者都爲假,則兩個布爾操作數嚴格相等。 如果兩個對象引用同一個對象,則兩個對象嚴格相等。 空和未定義的類型是==(但不是===)。 [即(空==未定義)爲真,但(空===未定義)爲假]

Check this out

+0

但使用單引號和dobule報價使變量字符串,因此兩者都是字符串。你的答案是沒有用的。 –

+0

我告訴differenc在==和===之間。檢查鏈接 – Nimish

+0

是啊,但他比較兩個字符串(單引號和雙引號),所以沒有比較的問題。 –