Konwersję i porównuję dwie wartości łańcuchów za pomocą

if (parseInt(x)!=parseInt(y)) {

Problemem jest, jeśli wartości są x="9" i y="09" Powrót testowy false.

Jak mogę to naprawić?

6
Anjana 26 wrzesień 2012, 13:18

1 odpowiedź

Najlepsza odpowiedź

Użyj tego :

if(parseInt(x, 10)!=parseInt(y, 10))

Jeśli nie precyzisz radix, "09" jest analizowany jako oktal (daje 0).

MDN Dokumentacja o parseint

Należy pamiętać, że nie powinieneś nawet polegać na tej interpretacji podczas pracy z reprezentacjami kadrowymi:

ECMAScript 5 Usuwa interpretację oktą

Specyfikacja ECMAScript 5 Parseint Funkcja nie pozwala już na trakcie traktowania ciągów rozpoczynających się od znaku 0 jako wartości oktkowania. ECMAScript 5 stanów:

Funkcja parsyjów wytwarza wartość całkowitą podyktowaną przez interpretację zawartości argumentu ciągu zgodnie z określonym radixem. Wiodąca biała przestrzeń w ciągu jest ignorowana. Jeśli radix jest niezdefiniowany lub 0, zakłada się, że wynosi 10, z wyjątkiem sytuacji, gdy liczba rozpoczyna się od par znaków 0x lub 0x, w którym to przypadku zakłada się radix 16. Jeśli Radix ma 16, numer może również opcjonalnie rozpocząć od par znaków 0x lub 0x.

Różni się to od ECMASCRIPT 3, który zniechęca, ale dozwolona interpretacja oktalna.

Ponieważ wiele implementacji nie przyjęło tego zachowania od 2011 r., A ponieważ starsze przeglądarki muszą być obsługiwane, zawsze określają radix.

Po prostu:

Zawsze określaj radix

15
Denys Séguret 26 wrzesień 2012, 09:25