2010-12-11 6 views
1

Ich habe eine JavaScript-Funktion, die document.getElementById() verwendet. Ich möchte es aufrüsten, um jQuery-Selektoren verwenden zu können ($(this).parent().find("blah")), es muss jedoch in der Lage sein, die ursprüngliche Methode zur Abwärtskompatibilität zu verwenden. Gibt es eine Möglichkeit, die ich testen kann, wenn das an die Funktion übergebene Argument eine Zeichenfolge ist (so kann ich getElementById verwenden) oder ein jQuery-Objekt (keine Zeichenfolge).Überprüfen, ob ein Argument eine Zeichenfolge

Ich könnte .length verwenden, aber ist dies eine ausfallsichere Methode zur Bestimmung, ob das Argument eine Zeichenfolge ist?

Solange ich für Strings testen kann, kann der jQuery-Zweig einfach in eine else gehen - ich muss nicht unbedingt sicherstellen, dass es keine Zeichenfolge ist, obwohl es schön wäre zu testen, ob es auch jQuery ist.

Danke,

James

Antwort

3
Object.prototype.toString.call(your_argument) == "[object String]" 
+0

Danke :-) Ich habe die Antwort von decyclone versucht und hatte ein bisschen Ärger. Deines funktioniert jedoch großartig. – Bojangles

+0

Vielen Dank für die großartige Antwort, können Sie kommentieren, wie dies mit der Verwendung von typeof verglichen wird? –

+0

@pure_code gute erklärung http://javascriptweblog.wordpress.com/2011/08/08/fixing-the-javascript-typeof-operator/ –

0

Ich denke, instanceOf ist, was Sie suchen. Sehen Sie diesen Beitrag: What is the instanceof operator in JavaScript?

+1

Dies funktioniert nur für Strings, die in ein Objekt konvertiert wurden, z. durch 'new String (" test ")', nicht primitiv. –

3

folgende Code gibt true:

"somestring".constructor == String 
+0

Danke :-) Das funktioniert super. +1 für einfache Antwort. – Bojangles

+0

+1 Bessere Antwort als meine, da dies auch für Strings funktioniert, die in Objekte konvertiert werden. –

+0

@ box9 - Danke !! – decyclone

2

Ist das, was Sie nach?

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

} else { 


} 

Und length ist definitiv nicht der Weg zu gehen. Arrays haben auch eine Längeneigenschaft, ganz zu schweigen von einem benutzerdefinierten Objekt.

+0

+1 für die Angabe, dass ich '.length' nicht verwenden soll - danke für den Hinweis :-) – Bojangles

0

JavaScript hat zwei Arten von Strings. Dies prüft auf beide Arten.

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

wirft Dies wird ein ReferenceError immer, wenn das Argument obwohl typeof nicht deklariert wird, wäre, nicht einen Fehler aus, weil JavaScript von links nach rechts ausgewertet (siehe Short-circuit evaluation).