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