Как я могу проверить, является ли var строкой в JavaScript?
Я пробовал это, и это не работает ...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
Как я могу проверить, является ли var строкой в JavaScript?
Я пробовал это, и это не работает ...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
Ответы:
Вы были близки
if (typeof a_string === 'string') {
// this is a string
}
В связи с этим: вышеуказанная проверка не сработает, если будет создана строка с new String('hello')типом Object. Есть сложные решения, чтобы обойти это, но лучше просто избегать создания строк таким образом.
if(typeof(str) === typeof(String()))
typeofОператор не инфиксный (так LHS вашего примера не имеет смысла).
Вы должны использовать это так ...
if (typeof a_string == 'string') {
// This is a string.
}
Помните, typeofэто оператор, а не функция. Несмотря на это, вы увидите, typeof(var)что вас часто используют в дикой природе. Это имеет такой же смысл, как var a = 4 + (1).
Кроме того, вы также можете использовать ==(оператор сравнения на равенство), поскольку оба операнда являются Strings ( typeof всегда возвращает a String), JavaScript определен для выполнения тех же шагов, которые я использовал ===(оператор строгого сравнения).
Как упоминает Box9 , это не обнаружит экземпляр Stringобъекта.
Вы можете обнаружить это с ....
var isString = str instanceof String;
jsFiddle .
...или...
var isString = str.constructor == String;
jsFiddle .
Но это не будет работать в мульти- windowсреде (думаю, iframeс).
Вы можете обойти это с ...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle .
Но опять же (как упоминает Box9 ), вам лучше использовать буквальный Stringформат, например var str = 'I am a string';.
if(myVar.toUpperCase) alert('I am a string');? См: jsfiddle.net/tb3t4nsx
{ toUpperCase: '' }
Следующее выражение возвращает true :
'qwe'.constructor === String
Следующее выражение возвращает true :
typeof 'qwe' === 'string'
Следующее выражение возвращает false (sic!):
typeof new String('qwe') === 'string'
Следующее выражение возвращает true :
typeof new String('qwe').valueOf() === 'string'
Лучший и правильный путь ( имхо ):
if (someVariable.constructor === String) {
...
}
Сейчас я считаю, что предпочтительнее использовать функциональную форму typeof (), так что ...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
typeof, вы просто контролируете порядок операций с этими скобками. Некоторые люди могут найти его более читабельным при определенных обстоятельствах.
filenameтолько группируют одно утверждение, и поэтому являются бесполезными и посторонними. Хорошо, что этот ответ имеет оценку 0, потому что он неправильный, вводящий в заблуждение и бесполезный; было бы лучше, если бы у него был отрицательный счет.
проверка на ноль или неопределенность во всех случаях a_string
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}
typeof nullи typeof undefinedникогда не вернется 'string', так typeof a_stringчто достаточно. Извините за некропостинг
Мой личный подход, который, кажется, работает во всех случаях, - это тестирование на присутствие членов, которые будут присутствовать только для строк.
function isString(x) {
return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}
Смотрите: http://jsfiddle.net/x75uy0o6/
Я хотел бы знать, есть ли у этого метода недостатки, но он годился для меня хорошо.