2011-05-13 19 views
7

Yazılmış bir senaryoda bir hata buldum ve sorunlara tam olarak neyin yol açtığını bulmakta zorlanıyorum. Özellikle:Burada Javascript tipi dönüşümler neler oluyor?

Burada aklınıza gelebilecek iki farklı dönüşümler var
"49px" < 50 === false 

:

parseInt("49px") < 50 === true 

Peki neden bu yanlış olarak değerlendiriyor:

49 < 50 === true 
"49px" < "50" === true 
"49" < 50 === true // just for the hell of it 

Birlikte düzelttim? Tam olarak burada neler oluyor?

+1

[Özet İlişkisel Karşılaştırma Algoritması] 'na bakın (http://es5.github.com/#x11.8.5) ... –

+0

Düzeltme yetersiz. Number ("49px") olur, parseInt/Float farklı şekilde davranıyor – user422039

+1

ve hiçbir ayrıştırma int içinde bir radix belirsiz ?! https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parse Şimdi çok geç değilken yapın! – Incognito

cevap

10

Bir işlenen bir sayıysa ve başka bir işlenen bir dize ise, the string is converted to a number ve sonra karşılaştırma yapılır.

Dize bir sayıya dönüştürülemezse, NaN dönüştürülür ve karşılaştırma her zaman false değerini döndürür.

3

Javascript'in bir sayıyı başka bir şeyle karşılaştırması istendiğinde, "başka bir şeyi" bir sayıya dönüştürmeye çalışır. Bu durumda, "49px", NaN için değerlendirir; bu nedenle NaN < 50, false'dur.

+0

darn, sadece birkaç dakika çok geç! –

+0

Bay Vidas, pisliğimi temizlemek için teşekkürler. –