Javascript 相等字符串比较返回false

Javascript 相等字符串比较返回false,javascript,string,compare,Javascript,String,Compare,在两个相等字符串之间执行命令==时,返回值为false 以下代码: 代码中的某个地方: Arr.prod.push({ "id" : product.id, "nameProd" : product.name }); 在其他本地at代码中: var id; for(i in Arr.prod){ if( $.trim(str) == $.trim(Arr.prod[i].nameProd)){ i

在两个相等字符串之间执行命令
==
时,返回值为false

以下代码:

代码中的某个地方:

Arr.prod.push({
                 "id" : product.id,
                 "nameProd" : product.name
    });
在其他本地at代码中:

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前端、Entrada SD翻转e控制器远程-飞利浦-飞利浦-美国…”。但是比较结果总是错误的

怎么了

编辑

为迭代添加代码:

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

str=dvd播放机automotivo ced229x-tela 3'',entrada usb前端, entrada sd倒转e控制移除,项目=电视46英寸led全高清 (1920 x 1080像素)-46pfl7606d/78-智能电视环境光光谱2, 在线电视,c…结果=错误

str=dvd播放机automotivo ced229x-tela 3'',entrada usb前端, entrada sd倒转e控制远程…,项目=家庭影院c/dvd -250 w rms,hdmi,divx,usb-hts3510/78-philips-philips-americanas.com.br结果=假

str=dvd播放机automotivo ced229x-tela 3'',entrada usb前端, entrada sd向下翻转e控件移除…,项=笔记本电脑hp结果 =错误

str=dvd播放机automotivo ced229x-tela 3'',entrada usb前端, entrada sd倒转e控件移除…,项=tenis重新启动结果 =错误

str=dvd播放机automotivo ced229x-tela 3'',entrada usb前端, entrada sd倒转e控件移除…,项目=dvd播放机 automotivo ced229x-tela 3'',entrada usb正面,entrada sd翻盖 向下控制远程…结果=错误

最后一个比较应该是正确的

看看这个

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%

发生了什么事


谢谢。

由于某些原因,您的代码在单词“Down”之后生成了一个不间断的空格(ascii 160或A0),因此
%A0

为什么会发生这种情况我不知道,但这就是你需要解决的问题

如果您无法找到解决此问题的方法,则至少可以通过在比较之前将非中断空格替换为正常空格来处理此症状,如下所示:

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

在for和if行之间放置一个
console.log($.trim(str),$.trim(Array.prod[i].nameProd),$.trim(str)==$.trim(Array.prod[i].nameProd));
,并告诉我们出现了什么。这也可能不是错误的原因,但为什么要使用数组构造函数(作为命名空间或其他什么)?请尝试用以下方法重现此结果:您可以提供数组吗?或者,您可以检查添加
console.log($.trim(str))
console.log($.trim(array.prod[i].nameProd))
时得到的结果吗?在if?All之前,您可以更新代码。Look Now.interest。变量str是通过“请求对话框”发送到facebook的消息的子字符串()。过了一会儿,我请求返回消息进行处理(在消息列中使用表apprequest()中的FQL)。我在消息中应用子字符串,然后插入str变量。可能facebook更改了消息的编码。有一种方法可以“正常化”"所有字符串都要进行特殊编码?例如,“UTF-8”?这不是一个字符集问题,字符实际上是不同的。从一个字符集到另一个字符集的转换不会使非中断空格变成正常空格。正确。因此,上面提出了唯一的解决方案?总有其他解决方案,问题是这个解决方案是否满足y是不是。如果不是,请继续查找:)