Вы не можете сделать это во всех браузерах, предположительно IE делает , но Mozilla и Opera этого не делают.
Когда вы составляете сообщение в GMail, функция «прикреплять файлы» реализована одним способом для IE и любого браузера, который поддерживает это, а затем реализовал другой способ для Firefox и тех браузеров, которые этого не делают.
Я не знаю, почему вы не можете этого сделать, но одна вещь, которая является угрозой безопасности и которую вы не можете делать в любом браузере, программно задает имя файла в элементе HTML File.
Если вы имеете дело с буквальной нотацией, а не с конструкторами, вы можете использовать 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
Попробуйте это,
<script>
var regInteger = /^-?\d+$/;
function isInteger( str ) {
return regInteger.test( str );
}
if(isInteger("1a11")) {
console.log( 'Integer' );
} else {
console.log( 'Non Integer' );
}
</script>
Вы ищете 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.
Лучший способ сделать это - использовать 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
Это, кажется, работает хорошо:
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'));
(я поднял большинство тестовых сценариев из другого ответа здесь.)