3

嗨,我在比较两个应该真正相同的字符串时遇到了麻烦,但是当我在 alert(f==g) 中对其进行评估时,它的评估结果为假。

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/ 感谢您的帮助

4

3 回答 3

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
于 2013-08-07T17:37:29.190 回答
1

["A"]是一个数组。您可以使用 and 获取字符串值,TrackList[0][0]也可以检查and中HeadingList[0][0]包含的每个字符串是否相等。通常,直接比较两个数组时,它们总是不同的。事实上,如果它们的内存地址相同,一个数组就等于另一个,这是没有意义的。TrackList[0]HeadingList[0]

于 2013-08-07T17:31:15.843 回答
0

不要比较数组...更改为:

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

现在它是“真实的”

于 2013-08-07T17:29:32.530 回答