Как проверить, является ли var строкой в JavaScript?
Как проверить, является ли var строкой в JavaScript?
Я пробовал это, и он не работает...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
Ответы
Ответ 1
Вы были близки:
if (typeof a_string === 'string') {
// this is a string
}
В соответствующей заметке: вышеуказанная проверка не будет работать, если строка создается с помощью new String('hello')
, поскольку тип будет Object
. Существуют сложные решения для решения этой проблемы, но лучше избегать создания строк таким образом.
Ответ 2
Оператор typeof
не является инфишей (поэтому LHS вашего примера не имеет смысла).
Вам нужно использовать его так...
if (typeof a_string == 'string') {
// This is a string.
}
Помните, что typeof
- это оператор, а не функция. Несмотря на это, вы увидите, что typeof(var)
много используется в дикой природе. Это имеет такое же значение, как var a = 4 + (1)
.
Кроме того, вы можете использовать ==
(оператор сравнения равенства), поскольку оба операнда String
(typeof
всегда возвращает String
), JavaScript определен для выполнения что я использовал ===
(оператор строгого сравнения).
Как Box9 упоминает, этот не обнаружит экземпляр String
объект.
Вы можете обнаружить это с помощью....
var isString = str instanceof String;
jsFiddle.
... или...
var isString = str.constructor == String;
jsFiddle.
Но это не будет работать в среде multi window
(подумайте iframe
s).
Вы можете обойти это с помощью...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle.
Но опять же (как Box9 упоминает), вам лучше просто использовать литерал String
format, например. var str = 'I am a string';
.
Дополнительная литература.
Ответ 3
Объединение предыдущих ответов обеспечивает следующие решения:
if (typeof str == 'string' || str instanceof String)
или
Object.prototype.toString.call(str) == '[object String]'
Ответ 4
В настоящее время я считаю, что предпочитает использовать функциональную форму typeof(), поэтому...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
Ответ 5
проверить значение null или undefined во всех случаях a_string
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}
Ответ 6
Мой личный подход, который, кажется, работает для всех случаев, проверяет наличие членов, которые все будут присутствовать только для строк.
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/
Я хотел бы знать, есть ли у этого метода недостатки, но он хорошо послужил мне годами.