Проверьте, является ли переменная числом или строкой в ​​JavaScript

Вы не можете сделать это во всех браузерах, предположительно IE делает , но Mozilla и Opera этого не делают.

Когда вы составляете сообщение в GMail, функция «прикреплять файлы» реализована одним способом для IE и любого браузера, который поддерживает это, а затем реализовал другой способ для Firefox и тех браузеров, которые этого не делают.

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

442
задан Brett DeWoody 23 July 2017 в 11:47
поделиться

5 ответов

Если вы имеете дело с буквальной нотацией, а не с конструкторами, вы можете использовать typeof :.

typeof "Hello World"; // string
typeof 123;           // number

Если вы создаете числа и строки с помощью конструктора, например var foo = new String ("foo") , вы должны помнить, что typeof может возвращать объект для foo .

Возможно, более надежным методом проверки типа было бы использование метода из underscore.js (аннотированный источник можно найти здесь ),

var toString = Object.prototype.toString;

_.isString = function (obj) {
  return toString.call(obj) == '[object String]';
}

Это возвращает boolean true для следующего:

_.isString("Jonathan"); // true
_.isString(new String("Jonathan")); // true
432
ответ дан 22 November 2019 в 23:03
поделиться

Попробуйте это,

<script>
var regInteger = /^-?\d+$/;

function isInteger( str ) {    
    return regInteger.test( str );
}

if(isInteger("1a11")) {
   console.log( 'Integer' );
} else {
   console.log( 'Non Integer' );
}
</script>
17
ответ дан 22 November 2019 в 23:03
поделиться

Вы ищете isNaN () :

 console.log (! IsNaN (123)); console.log (! isNaN (-1.23)); console.log (! isNaN (5-2)); console.log (! isNaN (0)); console.log (! isNaN ("0")); console.log (! isNaN ("2")); console.log (! isNaN ("Привет")); console.log (! isNaN ("2005/12/12")); 

См. Функция JavaScript isNaN () в MDN.

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

Лучший способ сделать это - использовать isNaN + приведение типов:

Обновленный метод all-in:

function isNumber(n) { return !isNaN(parseFloat(n)) && !isNaN(n - 0) }

То же самое с использованием регулярного выражения:

function isNumber(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); } 

------------------------

isNumber('123'); // true  
isNumber('123abc'); // false  
isNumber(5); // true  
isNumber('q345'); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(false); // false
isNumber('   '); // false
195
ответ дан 22 November 2019 в 23:03
поделиться

Это, кажется, работает хорошо:

function isNumber(x) {
  return parseFloat(x) == x
};

console.log('trues');
console.log(isNumber(0));
console.log(isNumber(-1));
console.log(isNumber(-500));
console.log(isNumber(15000));
console.log(isNumber(0.35));
console.log(isNumber(-10.35));
console.log(isNumber(2.534e25));
console.log(isNumber('2.534e25'));
console.log(isNumber('52334'));
console.log(isNumber('-234'));
console.log(isNumber(Infinity));
console.log(isNumber(-Infinity));
console.log(isNumber('Infinity'));
console.log(isNumber('-Infinity'));

console.log('falses');
console.log(isNumber(NaN));
console.log(isNumber({}));
console.log(isNumber([]));
console.log(isNumber(''));
console.log(isNumber('one'));
console.log(isNumber(true));
console.log(isNumber(false));
console.log(isNumber());
console.log(isNumber(undefined));
console.log(isNumber(null));
console.log(isNumber('-234aa'));

(я поднял большинство тестовых сценариев из другого ответа здесь.)

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

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