2013-05-18 41 views
3

任何人有一个想法是什么与此发生的事情我已经得到了代码JavaScript var =键不起作用?

console.log('cCP: '+chatCurrentPlace+' - key: '+key); 
if(key>chatCurrentPlace){chatCurrentPlace=key;} 
console.log('cCP: '+chatCurrentPlace+' - key: '+key); 

和控制台日志

cCP: 0 - key: 4 
cCP: 4 - key: 4 
cCP: 4 - key: 7 
cCP: 7 - key: 7 
cCP: 7 - key: 8 
cCP: 8 - key: 8 
cCP: 8 - key: 9 
cCP: 9 - key: 9 
cCP: 9 - key: 11 
cCP: 9 - key: 11 

为什么不工作的最后一个?它应该是cCP:11 - 密钥:11

+4

看起来你比较字符串而不是数字。 '“9”>“11”'是真的。 – freakish

+2

我同意@freakish。你可以检查'typeof key' – Outsider

+1

只是把它放在更详细的内容中...当比较字符串时,它会逐字比较它们。所以'(“9”>“11”)'实际上是'(9> 1)'。 –

回答

7

您的一个或两个变量可能是字符串,所以被比较为字符串和数字。 "9" > "11"出于同样的原因,"b" > "aa"(字符串按字符进行比较,直到它们不同的第一个索引)。

转换为数字,在您的测试(如与Unary + Operator):

if(+key > +chatCurrentPlace){ chatCurrentPlace = key; } 

the parseInt function

if(parseInt(key, 10) > parseInt(chatCurrentPlace, 10)){ chatCurrentPlace = key; } 

你可能希望达到if让他们之前的值转换始终保持数字。

+0

谢谢我不知道你可以转换为数字+我通常使用(东西* 1),但我更喜欢+ – dt192

+0

恕我直言,这两个都是丑陋的,因为他们隐藏他们做了太多,使代码更难阅读。我更喜欢使用'Number()'。是的,键入的内容有点多,但好的代码是可读代码,而不是短代码。 –

2

您确定密钥和cCP值不被视为字符串吗?它看起来像按字母顺序排序,不像数字。 尝试

key = parseInt(key,10); 

两个变量在比较之前。

+2

使用'parseInt'(它需要一个大写字母'I'),而没有基数几乎总是一个坏主意。 – Quentin

+0

@Quentin谢谢,更正。 – tarsis