2013-08-07 36 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 
相关问题