Почему angular.isNumber() работает не так, как ожидалось?
Кажется, что AngularJS angular.isNumber
не работает. Он не работает со строками, которые являются числами. Я делаю что-то неправильно? Должен ли я просто использовать isNaN()
?
angular.isNumber('95.55') == false
angular.isNumber('95.55' * 1) == true
angular.isNumber('bla' * 1) == true
angular.isNumber(NaN) == true
Мне нужно что-то, чтобы увидеть, является ли строка числом (когда это действительно так), и angular.isNumber()
не позволит мне это сделать, если я не умножусь на 1, но если я это сделаю, это всегда будет правдой. Кроме того, NaN
не является числом (по определению) и поэтому должен возвращать значение false.
Ответы
Ответ 1
В JavaScript typeof NaN === 'number'
.
Если вам нужно распознать String как Number, переведите его в Number, преобразуйте обратно в String и сравните это с входом, например.
function stringIsNumber(s) {
var x = +s; // made cast obvious for demonstration
return x.toString() === s;
}
stringIsNumber('95.55'); // true
stringIsNumber('foo'); // false
// still have
stringIsNumber('NaN'); // true
Ответ 2
Я работал над одной и той же проблемой, и я пытался обойти этот край. Поэтому я создал несколько иной подход.
FIDDLE
function isStringNumber(str) {
var parsed = parseFloat(str);
var casted = +str;
return parsed === casted && !isNaN(parsed) && !isNaN(casted);
}