Как проверить, является ли 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/

Я хотел бы знать, есть ли у этого метода недостатки, но он хорошо послужил мне годами.