wake-up-neo.com

Wie kann ich überprüfen, ob eine Variable eine Zeichenfolge in JavaScript ist?

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
}
145
vitto

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.

322
David Tang

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 Strings sind (typeofalways 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 iframes).

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';.

Weiterlesen .

67
alex

Die Kombination der vorherigen Antworten bietet diese Lösungen:

if (typeof str == 'string' || str instanceof String)

oder 

Object.prototype.toString.call(str) == '[object String]'
9
Alf Eaton

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;
}
0
Master James

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) {
   ...
}
0
redisko

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.
}
0
Kurkula