Почему делает isNaN (“”) (представьте в виде строки с пробелами), равняйтесь лжи?

В JavaScript, почему делает isNaN(" ") оцените к false, но isNaN(" x") оцените к true?

Я выполняю числовые операции на поле ввода текста, и я проверяю, ли поле null, "", или NaN. Когда кто-то вводит горстку пробелов в поле, мои сбои проверки на всех трех, и я смущен относительно того, почему оно заканчивает isNaN проверить.

154
задан Sebastian Simon 17 August 2019 в 19:01
поделиться

7 ответов

JavaScript интерпретирует пустую строку как 0, что затем не проходит тест isNAN. Сначала вы можете использовать parseInt для строки, которая не преобразует пустую строку в 0. Затем результат должен завершиться ошибкой isNAN.

149
ответ дан 23 November 2019 в 22:00
поделиться

Я не уверен почему , но обойти проблему вы всегда можете обрезать пробелы перед проверкой. Вы, вероятно, все равно хотите это сделать.

2
ответ дан 23 November 2019 в 22:00
поделиться

Если вы хотите реализовать точную функцию isNumber, вот один из способов сделать это из Javascript: The Good Parts Дугласа Крокфорда [страница 105]

var isNumber = function isNumber(value) {
   return typeof value === 'number' && 
   isFinite(value);
}
4
ответ дан 23 November 2019 в 22:00
поделиться

Попробуйте использовать:

alert(isNaN(parseInt("   ")));

Или

alert(isNaN(parseFloat("    ")));
15
ответ дан 23 November 2019 в 22:00
поделиться

Я думаю, это из-за набора текста в Javascript: '' преобразуется в ноль тогда как 'x' не является:

alert(' ' * 1); // 0
alert('x' * 1); // NaN
5
ответ дан 23 November 2019 в 22:00
поделиться

Чтобы лучше это понять, откройте спецификацию Ecma-Script pdf на стр. 43 «ToNumber Applied to String Type»

, если строка имеет числовой синтаксис, который может содержать любое количество пробелов, его можно преобразовать в тип Number. Пустая строка имеет значение 0. Также строка 'Infinity' должна давать

isNaN('Infinity'); // false
16
ответ дан 23 November 2019 в 22:00
поделиться

Вы можете найти это удивительным, а может и нет, но вот некоторый тестовый код, чтобы показать вам дурацкость движка JavaScript.

document.write(isNaN("")) // false
document.write(isNaN(" "))  // false
document.write(isNaN(0))  // false
document.write(isNaN(null)) // false
document.write(isNaN(false))  // false
document.write("" == false)  // true
document.write("" == 0)  // true
document.write(" " == 0)  // true
document.write(" " == false)  // true
document.write(0 == false) // true
document.write(" " == "") // false

, так что это означает, что

" " == 0 == false

и

"" == 0 == false

, но

"" != " "

Веселитесь :))

80
ответ дан 23 November 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: