2013-08-07 3 views
3

Привет, У меня возникли проблемы с сравнением двух строк, которые должны быть одинаковыми, но когда я оцениваю его в режиме предупреждения (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]'. Если вы сравните первый элемент каждого из * тех * массивов, * then *, вы увидите равенство. – apsillers

+0

@ переходы - это правильно. Почему у вас есть скобки вокруг ваших окончательных значений ('A, B, C')? – hannebaumsaway

ответ

1

["A"] является массивом. Вы можете получить строковое значение с TrackList[0][0] и HeadingList[0][0] или проверить, равна ли каждая строка, содержащаяся в TrackList[0], и HeadingList[0]. Обычно при сопоставлении с ними два массива всегда отличаются друг от друга. Фактически, массив равен другому, если их адреса памяти одинаковы, что не имеет смысла.

0

Dont сравнить массивы ... изменение этого:

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 (и г) массивы скрыты, и сравнение массивов не делает элемент мудрого сравнения элементов, он сравнивают если переменные ссылаются на такой же массив;

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

"A" == "A" 
> true 

a = ['A'] 
b = a 
a == b 
> true 
Смежные вопросы