Извлечь из документации python
Класс имеет пространство имен, реализуемое объектом словаря. Ссылки на атрибуты класса переводится в поисковые запросы в этом словаре, например, C.x переводится в C .__ dict __ ["x"] (хотя для классов нового стиля, в частности, существует несколько крючков, которые позволяют использовать другие способы определения атрибутов). Когда имя атрибута не найдено там, поиск атрибутов продолжается в базовых классах
blockquote>. Другими словами, __dict__ содержит только «локальные» атрибуты класса, атрибуты суперкласса хранятся в суперкласс __dict __.
Итак, вы можете использовать
__class__.__dict__.iteritems()
для извлечения только атрибутов класса.
Это работает независимо от того, является ли переменное содержание строкой или числом.
isNaN(num) // returns true if the variable does NOT contain a valid number
isNaN(123) // false
isNaN('123') // false
isNaN('1e10000') // false (This translates to Infinity, which is a number)
isNaN('foo') // true
isNaN('10px') // true
, Конечно, можно инвертировать это, если Вы должны. Например, для реализации IsNumeric
пример Вы дали:
function isNumeric(num){
return !isNaN(num)
}
Только работы, если строка [только 1 119] содержат цифровые символы, еще она возвращается NaN
.
+num // returns the numeric value of the string, or NaN
// if the string isn't purely numeric characters
+'12' // 12
+'12.' // 12
+'12..' // Nan
+'.12' // 0.12
+'..12' // Nan
+'foo' // NaN
+'12px' // NaN
, Полезный для преобразования '12 пкс' к 12, например:
parseInt(num) // extracts a numeric value from the
// start of the string, or NaN.
parseInt('12') // 12
parseInt('aaa') // NaN
parseInt('12px') // 12
parseInt('foo2') // NaN These last two may be different
parseInt('12a5') // 12 from what you expected to see.
Принимают во внимание, что, в отличие от этого +num
, parseInt
(поскольку имя предлагает) преобразует плавание в целое число путем обрубания всего после десятичной точки (если Вы захотите использовать parseInt()
из-за [1 120] это поведение, Вы - вероятно, более обеспеченное использование другого метода вместо этого ):
+'12.345' // 12.345
parseInt(12.345) // 12
parseInt('12.345') // 12
Пустые строки могут быть немного парадоксальными. +num
преобразовывает пустые строки для обнуления, и isNaN()
принимает то же:
+'' // 0
isNaN('') // false
, Но parseInt()
не соглашается:
parseInt('') // NaN
parseInt (), но знать, что эта функция несколько отличается в том смысле, что это, например, возвращается 100 для parseInt ("100 пкс").
Попробуйте функция isNan :
isNaN () функция определяет, является ли значение недопустимым числом (Не-число).
Эта функция возвращает true, если значение приравнивается к NaN. Иначе это возвращает false.
Эта функция отличается от Числа, конкретного Number.isNaN () метод.
глобальный isNaN () функция, преобразовывает протестированное значение в Число, затем тестирует его.
Number.isNan () не преобразовывает значения в Число и не возвратит true ни для какого значения, которое не имеет Числа типа...
И Вы могли пойти RegExp-путь:
var num = "987238";
if(num.match(/^-{0,1}\d+$/)){
//valid integer (positive or negative)
}else if(num.match(/^\d+\.\d+$/)){
//valid float
}else{
//not valid number
}
, Возможно, это было перефразировано слишком много раз, однако я боролся с этим сегодня также и требуемый для регистрации моего ответа, поскольку я не видел никакой другой ответ, который делает это как просто или полностью:
var isNumeric = function(num){
return (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num);
}
const isNumeric = (num) => (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num);
const isNumeric = (num: any) => (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num as number);
Это кажется довольно простым и покрывает все основания, которые я видел на многих других сообщениях и продумал сам:
// Positive Cases
console.log(0, isNumeric(0) === true);
console.log(1, isNumeric(1) === true);
console.log(1234567890, isNumeric(1234567890) === true);
console.log('1234567890', isNumeric('1234567890') === true);
console.log('0', isNumeric('0') === true);
console.log('1', isNumeric('1') === true);
console.log('1.1', isNumeric('1.1') === true);
console.log('-1', isNumeric('-1') === true);
console.log('-1.2354', isNumeric('-1.2354') === true);
console.log('-1234567890', isNumeric('-1234567890') === true);
console.log(-1, isNumeric(-1) === true);
console.log(-32.1, isNumeric(-32.1) === true);
console.log('0x1', isNumeric('0x1') === true); // Valid number in hex
// Negative Cases
console.log(true, isNumeric(true) === false);
console.log(false, isNumeric(false) === false);
console.log('1..1', isNumeric('1..1') === false);
console.log('1,1', isNumeric('1,1') === false);
console.log('-32.1.12', isNumeric('-32.1.12') === false);
console.log('[blank]', isNumeric('') === false);
console.log('[spaces]', isNumeric(' ') === false);
console.log('null', isNumeric(null) === false);
console.log('undefined', isNumeric(undefined) === false);
console.log([], isNumeric([]) === false);
console.log('NaN', isNumeric(NaN) === false);
можно также попробовать собственное isNumeric
функция и просто мимо в этих вариантах использования и просканировать для "истинного" для всех них.
Или, для наблюдения значений, что каждый возврат: