2012-06-27 42 views
-3

以下兩項中的每一項都包含相同的字符串值,但使用'==='的比較返回false。在JavaScript中,兩個「平等」字符串的== ==比較何時會返回false?

(hiddenColumns[hidenColsIndex] === cells[metricColsIndex].columnName) 

此相比,在使用 '==' 返回true

(hiddenColumns[hidenColsIndex] == cells[metricColsIndex].columnName) 

爲什麼?

+2

如果該聲明是真實的'==='比較返回'false',那麼它們**不是**相同的字符串值。也許一個是數字,另一個是該數字的字符串版本。 – Pointy

+0

我們需要更多的信息。您可以使用JSON.stringify來檢查並向我們顯示這些字符串。 – Bergi

+1

三重相等運算符不僅意味着值必須相等,而且它們的類型也相同。在兩者上輸入'typeof()',看看你得到了什麼。 – sachleen

回答

1

您沒有比較相同類型的兩個對象。其中一個值(或兩者)不是字符串。

+0

你確實是對的。當Visual Studio調試器報告在監視窗口中都是類型'字符串'時,typeof()顯示一個是對象,另一個是字符串。好決定。這裏有一個關於文本字符串和字符串對象之間區別討論的鏈接[link] http://www.irt.org/articles/js028/ – Bart

0

===表示比較值和數據類型。

當您想比較兩個元素的值以及它們的數據類型時,===應該是false。

在你的情況,第一個說法是假的,因爲它們是兩個不同的數據類型 在第二種情況下,因爲,該值是相同的(考慮兩種普通的對象進行比較)

2
//a and b are equal in data but not equal in type 
var a = 1; 
var b = "1"; 

//== will return true 
if (a == b) 
{ 
    console.log("true"); 
} 
else 
{ 
    console.log("false"); 
}; 

//=== will return false 
if (a === b) 
{ 
    console.log("true"); 
} 
else 
{ 
    console.log("false"); 
}; 
相關問題