2013-08-07 104 views
3

嗨我很難比較兩個字符串應該是相同的,但是當我在alert(f == g)中評估它時,它的計算結果爲false。兩個相同的字符串不相等

var oTrackCarriers = { 
"9045": [ 
["A"], 
["B"], 
["C"] 
], 
"9046": [ 
[" "] 
] 
}; 
var oHeadingCarriers = { 
"Ripplefold": [ 
["A"], 
["B"], 
["C"], 
["D"] 
], 
"PinchPleat": [ 
["C"], 
["D"] 
] 
}; 
var HeadingList = oHeadingCarriers["Ripplefold"]; 
var TrackList = oTrackCarriers["9045"] 
var f = (TrackList[0].valueOf()); 
var g = (HeadingList[0].valueOf()); 
alert(f); 
alert(g); 
alert(f == g); 

這是因爲我把這兩個值事先放入數組?

這是它運行http://jsfiddle.net/sQrST/17/embedded/result/ 感謝您的幫助

+6

這就是爲什麼你需要使用console.log進行測試而不是警報。 – lifetimes

+6

您正在比較數組,而不是字符串。 'oHeadingCarriers [「Ripplefold」] [0]'是一個數組,與'oTrackCarriers [「9045」] [0]'一樣。如果你比較*那些*數組中的每一個的第一個元素,那麼*你會看到相等。 – apsillers

+0

@apsillers是對的。爲什麼你的最終值('A,B,C')有括號? – hannebaumsaway

回答

1

["A"]是一個數組。您可以使用TrackList[0][0]HeadingList[0][0]獲取字符串值,或者檢查​​和HeadingList[0]中包含的每個字符串是否相等。通常,兩個數組直接比較時總是不同的。事實上,如果一個數組的內存地址相同,那麼這個數組就相當於另一個數組,這是沒有意義的。

0

不要比較陣列......改成這樣:

alert(f[0]); 
alert(g[0]); 
alert(f[0] == g[0]); 

,現在它的 '真實'

2
var oTrackCarriers = { "9045": [["A"], ["B"], ["C"]], 
         "9046": [[" "]] }; 

var TrackList = oTrackCarriers["9045"]; // TrackList = [["A"], ["B"], ["C"]] 

var f = (TrackList[0].valueOf())   // f = ["A"] 

alert()顯示器陣列在非直觀的方式,這樣的事實,F(和g)是陣列是隱藏的,並且陣列不做元素的元素明智比較比較,它比較,如果變量引用相同的數組;

["A"] == ["A"] 
> false 

"A" == "A" 
> true 

a = ['A'] 
b = a 
a == b 
> true 
相關問題