2011-11-14 176 views
1

當執行命令==之間2等於字符串的我得到的返回false。等於字符串比較返回false

以下代碼:

在代碼某處:

Arr.prod.push({ 
       "id" : product.id, 
       "nameProd" : product.name 
    }); 

在其它地方在代碼:

var id; 
for(i in Arr.prod){ 
    if($.trim(str) == $.trim(Arr.prod[i].nameProd)){ 
     id = Arr.prod[i].id; 
    break; 
    } 
} 

i = 3,的Array.prod[i].nameProd值等於str值。這些變量的價值是:「DVD播放機Automotivo CED229X - Tela 3,Entrada USB Frontal,Entrada SD翻轉e Controle Remoto - 飛利浦 - 飛利浦 - Americ ...」。但是比較總是返回錯誤。

出了什麼問題?

EDIT

在迭代添加代碼:

console.log('str = ' + $.trim(str).toLowerCase(), ', item = ' + 
$.trim(Arr.prod[i].nameProd).toLowerCase(), 'result = ' + 
($.trim(str).toLowerCase() == $.trim(Arr.prod[i].nameProd).toLowerCase())); 

RESULT

STR = DVD播放機automotivo ced229x - 截圖3 '',ENTRADA USB額葉, entrada sd翻轉e controle remot ...,item =電視46「led全高清 (1920 x 1080像素) - 46pfl7606d/78 - 智能電視流光溢彩2, 網絡電視,C ...結果=假

STR = DVD播放機automotivo ced229x - 截圖3 '',ENTRADA USB額葉, entrada sd flip down e controle remot ...,item =家庭影院c/dvd - 250 w rms,hdmi,divx,usb - hts3510/78 - philips - philips - americanas.com.br結果= false

str = dvd player automotivo ced229x - tela 3'',entrada usb frontal, entrada sd flip down e controle remot ...,item = notebook hp result = false

海峽= DVD播放機automotivo ced229x - 屏幕截圖3 '',ENTRADA USB正面, ENTRADA SD翻轉向下e CONTROLE REMOT ...,項目=捷尼斯重新預訂結果 =假

海峽= DVD播放機automotivo ced229x - 屏幕截圖3 '',entrada usb frontal, entrada sd翻轉e controle remot ...,item = dvd player automotivo ced229x - tela 3'',entrada usb frontal,entrada sd flip down e controle remot ...結果=假

最後的比較應該是真實的

看看這個

console.log('str : ' + escape(str)); 
console.log('arr : ' + escape(Arr.prod[i].nameProd))); 

結果:

str : DVD%20Player%20Automotivo%20CED229X%20-%20Tela%203%27%27%2C%20Entrada%20USB%20Frontal%2C%20Entrada%20SD%20Flip%20Down%20e%20Controle%20Remot%20... 

arr : DVD%20Player%20Automotivo%20CED229X%20-%20Tela%203%27%27%2C%20Entrada%20USB%20Frontal%2C%20Entrada%20SD%20Flip%20Down%A0e%20Controle%20Remot%20... 

以後再看 「下」 字在2日誌的:

在str中包含%20e%,因爲在arr中包含%A0e%。

發生了什麼事?

謝謝。

+0

把一個'控制檯。 log($ .trim(str),$ .trim(Array.prod [i] .nameProd),$ .trim(str)== $ .trim(Array.prod [i] .nameProd));'between如果行。並告訴我們會發生什麼。 –

+1

也可能不是錯誤的原因,但爲什麼你使用數組構造函數(作爲命名空間或其他)? – Yoshi

+0

請嘗試重現這與http://jsfiddle.net –

回答

0

出於某種原因,您的代碼在單詞「Down」(即%A0)後面生成一個非間斷空格(ascii 160或A0)。

爲什麼發生這種情況我不知道,但那是你需要解決的問題。

如果你不能找出如何解決這個問題,那麼你至少可以通過比較之前替換正常的空格非中斷空格,這樣的治療症狀:

$.trim(str).replace(/\xa0/g,' ') == $.trim(Arr.prod[i].nameProd.replace(/\xa0/g,' ')) 
+0

有趣。 變量str是通過「請求對話框」(http://developers.facebook.com/docs/reference/dialogs/requests/)發送到Facebook的消息的子字符串。稍後,我會請求回覆處理消息(使用FQL - 表apprequest中的http://developers.facebook.com/docs/reference/fql/(http://developers.facebook.com/docs/reference/fql/) apprequest /)在列MESSAGE中)。我在消息中應用子字符串,然後插入到str變量中。可能Facebook更改了郵件的編碼。 有一種方法來「規範化」所有字符串特定的編碼?例如,'UTF-8'? – vctlzac

+0

這不是一個字符集問題,字符實際上是不同的。從一個charset轉換爲anoteher不會使非破壞空間進入正常空間afaik。 –

+0

正確。所以上面提出了唯一的解決方案? – vctlzac