Почему isNaN ('') или isNaN ("") ложно (одна кавычка или двойные кавычки считаются действительными числами)? - PullRequest
0 голосов
/ 29 марта 2020

Мне нужна встроенная функция, которая проверяет, содержит ли переменная действительное число в Javascript, после этой ссылки , которую я пытался использовать, это isNaN, однако, когда я использую одну цитату ( '') или две кавычки (""), результат всегда false.

Почему одна кавычка или двойные кавычки считаются действительными числами?

Ответы [ 3 ]

1 голос
/ 29 марта 2020

isNaN()

Пустая строка преобразуется в 0, который не является NaN

0 голосов
/ 29 марта 2020

Преобразование пустой строки в Number будет иметь значение 0. То же самое относится к логическим (+false = 0, +true = 1) и null. Если это нежелательно, вы можете создать свою собственную функцию, чтобы определить, можно ли преобразовать некоторое (строковое) значение в Number. Смотрите также (примеры @) MDN .

const canConvert2Number = value =>
      !value ||
      value === false ||
      value === true ||
      value === null || 
      String(value).trim().length < 1
      ? false
      : !isNaN(+value);

console.log(canConvert2Number(null));    //false
console.log(canConvert2Number(""));      //false
console.log(canConvert2Number());        //false
console.log(canConvert2Number(false));   //false
console.log(canConvert2Number(true));    //false
console.log(canConvert2Number("[]"));    //false
console.log(canConvert2Number("{}"));    //false
console.log(canConvert2Number("20.4"));  //true
console.log(canConvert2Number("10E4"));  //true
.as-console-wrapper { top: 0; max-height: 100% !important; }
0 голосов
/ 29 марта 2020

Любая вещь, которая не может быть преобразована в число, должна возвращать true, но строка "" может быть проанализирована на число, поэтому она возвращает false

console.log(+"")
console.log(Number(""))
console.log(isNaN(""))

Полифилл для isNaN выглядит следующим образом

var isNaN = function(value) {
    var n = Number(value);
    return n !== n;
};

console.log(isNaN(""))

Примечание: - Когда вы пытаетесь использовать parseInt для этих значений, все становится запутанным. Но спецификации parseInt буквально говорят, что он возвращает NaN the first non-whitespace character cannot be converted to a number. или radix is below 2 or above 36.

console.log(parseInt(""))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...