Проверка, является ли аргумент строкой - PullRequest
1 голос
/ 11 декабря 2010

У меня есть функция JavaScript, которая использует document.getElementById(). Я хочу обновить его, чтобы можно было использовать селекторы jQuery ($(this).parent().find("blah")), однако для обратной совместимости необходимо использовать оригинальный метод. Есть ли способ проверить, является ли аргумент, переданный функции, строкой (поэтому я могу использовать getElementById) или объектом jQuery (не строкой).

Я мог бы использовать .length, но действительно ли это отказоустойчивый метод определения, является ли аргумент строкой?

Пока я могу проверять строки, ветка jQuery может просто входить в else - мне не нужно быть абсолютно уверенным, что это не строка, хотя было бы неплохо проверить также, является ли она jQuery.

Спасибо

Джеймс

Ответы [ 5 ]

4 голосов
/ 11 декабря 2010

следующий код возвращает true:

"somestring".constructor == String
3 голосов
/ 11 декабря 2010
Object.prototype.toString.call(your_argument) == "[object String]"
2 голосов
/ 11 декабря 2010

Это то, что вы ищете?

var str = "blah";
if (typeof str == "string") {

} else {


}

И length определенно не тот путь. Массивы также будут иметь свойство length, не говоря уже о том, что любой пользовательский объект тоже может.

0 голосов
/ 01 декабря 2017

JavaScript имеет два вида строк.Это проверяет оба вида.

function isString (str)
{
  return str instanceof String || typeof str === 'string';
}

Это будет всегда выдавать ReferenceError, если аргумент не объявлен, хотя typeof не выдаст ошибку, потому что JavaScript оценивается слева направо (см. Оценка короткого замыкания ).

0 голосов
/ 11 декабря 2010

Я думаю, что instanceOf - это то, что вы ищете.Смотрите это сообщение: Что такое оператор instanceof в JavaScript?

...