2015-02-07 3 views
0

Пока читал о NaN в JavaScript, я столкнулся с некоторыми примерами. Затем я начал тестировать больше, и я был удивлен результатами. Например, я задавался вопросом, почему JavaScript интерпретировать два ниже почти те же заявления по-разномуПочему результат parseInt («123abcd») и parseInt («abcd123») различаются в JavaScript?

parseInt("123abcd") // 123 
parseInt("abcd123") // NaN 

Почему Javascript возвращает 123 для ParseInt («123abcd») и почему NaN для другого?

Кроме того, почему

isNaN("1") //false 
But 
isNaN("hello") // true -----> This seems logical because hello is a not number 

кажется JavaScript всегда может удивить нас!

ответ

3

В первом случае

MDN:
Если первый символ не может быть преобразован в число, ParseInt возвращает NaN.

И второй, isNaN преобразует входные данные в Number, а затем проверяет, является ли это число или нет.

So "1" is 1 и, следовательно, номер.

Также полезно знать, как использовать 10 в качестве основы, чтобы избежать каких-либо неверных интерпретаций.

parseInt(input, 10); 
+0

Тем не менее это оставляет меня вопрос, почему конвенция правильно разобрать строку, начиная с числа, но не строки, оканчивающиеся с номером. Для меня 'parseInt' всегда выглядел произвольно. Почему бы не разобрать первое число в строке (например. «Hello123Bye»)? – Mouser

+0

@Mouser, вот как это должно быть. С первого взгляда. Вы можете использовать пользовательскую функцию, чтобы делать то, что хотите. –

+0

@Mouser Если ваш вопрос: «Почему это так?», Спросите Брендана Эйха (я предполагаю). Вместо того, чтобы ожидать разбора любых случайных цифр, которые он находит, я всегда задавался вопросом, почему они решили, что недопустимое число, например «123abcd», должно считаться действительным. Но я думаю, мы никогда не узнаем ... – Rhumborl

Смежные вопросы