Wie kann ich überprüfen, ob eine Variable eine Zeichenfolge in JavaScript ist?
Ich habe es versucht und es funktioniert nicht ...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
Du warst nah:
if (typeof a_string === 'string') {
// this is a string
}
Zu einem verwandten Hinweis: Die obige Prüfung funktioniert nicht, wenn eine Zeichenfolge mit new String('hello')
erstellt wird, da der Typ stattdessen Object
ist. Es gibt komplizierte Lösungen, um dies zu umgehen, aber es ist besser, zu vermeiden, Strings auf diese Weise zu erstellen.
Der Operator typeof
ist kein Infix (die LHS Ihres Beispiels macht also keinen Sinn).
Sie müssen es so verwenden ...
if (typeof a_string == 'string') {
// This is a string.
}
Denken Sie daran, dass typeof
ein Operator und keine Funktion ist. Trotzdem werden Sie feststellen, dass typeof(var)
in der freien Natur häufig verwendet wird. Das macht genauso viel Sinn wie var a = 4 + (1)
.
Sie können auch ==
(Gleichheitsvergleichsoperator) verwenden, da beide Operanden String
s sind (typeof
always gibt eine String
zurück). JavaScript ist so definiert, dass es dieselben Schritte ausführt, die ich verwendet habe, ===
(strikter Vergleichsoperator).
Wie Box9 erwähnt , ist dieses wird nicht erkannt ein instantiiertes String
Objekt.
Sie können das mit ... erkennen.
var isString = str instanceof String;
jsFiddle .
...oder...
var isString = str.constructor == String;
jsFiddle .
Aber das funktioniert nicht in einer Umgebung mit mehreren window
(denke an iframe
s).
Sie können dies umgehen mit ...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle .
Aber wiederum (wie Box9 erwähnt ) ist es besser, wenn Sie das wörtliche Format String
verwenden, z. var str = 'I am a string';
.
Die Kombination der vorherigen Antworten bietet diese Lösungen:
if (typeof str == 'string' || str instanceof String)
oder
Object.prototype.toString.call(str) == '[object String]'
Heute glaube ich, dass es vorgezogen wird, eine Funktionsform von typeof () zu verwenden, also ...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
Der folgende Ausdruck gibt true zurück:
'qwe'.constructor === String
Der folgende Ausdruck gibt true zurück:
typeof 'qwe' === 'string'
Der folgende Ausdruck gibt false (sic!) Zurück:
typeof new String('qwe') === 'string'
Der folgende Ausdruck gibt true zurück:
typeof new String('qwe').valueOf() === 'string'
Bester und richtiger Weg ( imho ):
if (someVariable.constructor === String) {
...
}
prüfen Sie in allen Fällen a_string auf null oder undefined
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}