1. Funktion:
Der Typeof -Operator gibt eine Zeichenfolge zurück, die den Datentyp des Ausdrucks darstellt.
Mögliche Zeichenfolgen sind: "Nummer", "String", "boolean", "Objekt", "Funktion" und "undefiniert".
2. Beschreibung des häufig verwendeten Rückgabewerts
| Ausdruck | Rückgabewert |
| typeof undefiniert | 'undefiniert' |
| typeof null | 'Objekt' |
| typeof true | "boolean" |
| Typ 123 | 'Nummer' |
| Typ "ABC" | "String" |
| typeof function () {} | 'Funktion' |
| typeof {} | 'Objekt' |
| Typof [] | 'Objekt' |
| Art der unbekannten variablen | 'undefiniert' |
HINWEIS: Die Rückgabetypwerte des Typs sind alle Zeichenfolgen, und sie sind alle Kleinkappen -Header.
3.. Regelmäßige Anwendung:
1). Überprüfen Sie, ob eine Variable existiert und einen Wert hat.
Typof gibt in zwei Fällen "undefiniert" zurück: Wenn eine Variable nicht deklariert wird und wenn der Wert einer Variablen undefiniert ist. Zum Beispiel:
> typeof nicht deklariertvariable === "undefined" true
> var deklararedVariable;
> typeof deklararedVariable 'undefiniert'
> Typof undefinierter 'undefinierter'
Es gibt andere Möglichkeiten, um festzustellen, ob ein Wert undefiniert ist:
> var value = undefiniert;
> value === undefined True
Wenn diese Methode jedoch für eine nicht deklarierte Variable verwendet wird, wird eine Ausnahme ausgelöst, da nur TypeOF nicht deklarierte Variablen normal erkennen kann, ohne einen Fehler zu melden:
> nicht deklaredvariable
HINWEIS: Unbekannte Variablen, formale Parameter, die nicht in Parametern übergeben werden, und nicht existierende Eigenschaften haben nicht die oben genannten Probleme, da sie immer zugänglich sind und die Werte immer nicht definiert sind:
> var deklararedVariable;
> deklaredVariable === undefined True
> (Funktion (x) {return x === undefined} ()) true
> ({}). foo === undefined True
HINWEIS: Daher if (window.maybeundEclaredVariable) {}
FRAGE: Typof erscheint bei der Ausführung solcher Aufgaben kompliziert.
Lösung: Diese Art der Operation ist nicht sehr häufig, daher denken einige Leute, dass es keine bessere Lösung finden muss. Jemand kann jedoch einen speziellen Bediener vorschlagen:
> definierte nicht deklarierte vgl. FALSE
> var deklararedVariable;
> Definiert deklariertes Variable falsch
Oder vielleicht braucht jemand einen Bediener, der erkennt, ob eine Variable deklariert wird:
> Declared Vala
> var deklararedVariable;
> Decioded Variable true
Anmerkung des Übersetzers: In Perl entspricht der obige definierte Operator definiert (), und der deklarierte Operator oben entspricht existieren ().
2. Bestimmen Sie, dass ein Wert nicht gleich undefiniert ist und nicht gleich Null ist
Frage: Wenn Sie feststellen möchten, ob ein Wert definiert wurde (der Wert ist nicht undefiniert oder null), haben Sie eine seltsame Manifestation von Typof (das als Fehler angesehen): Typof Null gibt "Objekt" zurück:
> typeof null 'Objekt'
Hinweis: Dies kann nur als Fehler in der ursprünglichen JavaScript -Implementierung bezeichnet werden, und der Standard ist jetzt standardisiert. V8 nach dem korrigierten und implementierten Typ von NULL === "NULL", aber es erwies sich schließlich als nicht modell. http://wiki.ecmascript.org/doku.php?id=harmony:Typeof_null
Lösung: Verwenden Sie nicht die TypeOF, um diese Aufgabe zu erledigen. Verwenden Sie stattdessen die folgende Methode: Die Variable X muss jedoch im Voraus deklariert werden, andernfalls wird ein Fehler gemeldet.
Funktion isdefined (x) {return x! == null && x! == undefined; }
Eine andere Möglichkeit besteht darin, einen "Standardwertoperator" einzuführen. Wenn myValue nicht definiert ist, gibt der folgende Ausdruck StandardValue zurück:
myValue || StandardValue
Der obige Ausdruck entspricht:
(myValue! == undefined && myValue! == null)? myValue: defaultValue
Tatsächlich ist es eine Vereinfachung der folgenden Aussage:
myValue = myValue || StandardValue
3.. Unterscheiden Sie zwischen Objektwerten und Originalwerten
Die folgende Funktion wird verwendet, um festzustellen, ob x ein Objektwert ist:
Funktion isObject (x) {return (typeof x === "Funktion" || (typeof x === "Objekt" && x! == null)); }
Problem: Die obige Erkennung ist komplizierter, da Typen von Funktionen und Objekten als unterschiedliche Typen behandelt und NULL "Objekt" zurückgibt.
Lösung: Die folgenden Methoden werden häufig auch verwendet, um Objektwerte zu erkennen:
Funktion isObject2 (x) {return x === Objekt (x); }
WARNUNG: Sie können denken, dass InstanceOF -Objekt hier zur Erkennung von Objekten verwendet werden kann, aber Instanz wird verwendet, um die Instanzbeziehung mithilfe eines Prototyps mit einem Objekt zu beurteilen. Was soll ich tun, wenn ein Objekt ohne Prototyp:
> var obj = object.create (null);
> Object.getPrototypeof (OBJ) NULL
OBJ ist in der Tat ein Objekt, aber es ist keine Instanz eines Wertes:
> typeof obj 'Objekt' '
> obj Instanz des Objekts falsch
In der Praxis können Sie selten auf ein solches Objekt stoßen, aber es existiert und hat seinen Zweck.
Anmerkung des Übersetzers: Object.Prototyp ist ein Objekt, das standardmäßig existiert und keinen Prototyp enthält.
> Object.getPrototypeof (Object.Prototype) NULL
> typeof Object.Prototyp 'Objekt'
> Object.Prototypinstanz des Objekts Falsch
4. Was ist der Typ des ursprünglichen Wertes?
Typeof ist der beste Weg, um einen bestimmten Originalwert anzuzeigen.
> Typeof "ABC" 'String' '
> Typof undefinierter 'undefinierter'
Frage: Sie müssen das seltsame Verhalten von Typof Null kennen.
> Typof null // Sei vorsichtig! 'Objekt'
Lösung: Die folgende Funktion kann dieses Problem beheben (nur für diesen Anwendungsfall).
Funktion getPrimitivetypename (x) {
var typeName = typeof x;
Switch (Typename) {
Fall "undefiniert": Fall "boolean": Fall "Nummer": Fall "String": return typename;
Fall "Objekt": if (x === null) {return "null"; }
Standard: // Das vorherige Urteil hat keinen neuen TypeError übergeben ("Der Parameter ist kein primitiver Wert:"+x);
}}
Eine bessere Lösung: Implementieren Sie einen Funktion GetTypeName (), der nicht nur den Typ des ursprünglichen Wertes zurückgeben, sondern auch das interne Attribut des Objektwerts [[[Klasse]] zurückgeben kann. Hier sprechen wir darüber, wie diese Funktion implementiert werden kann (Anmerkung des Übersetzers: $ .type in jQuery ist die Implementierung wie diese)
5. ob ein Wert eine Funktion ist
TypeOF kann verwendet werden, um festzustellen, ob ein Wert eine Funktion ist.
> typeof function () {} 'Funktion' '
> Typeof Object.Prototype.ToString 'Funktion'
Im Prinzip kann die Instanzfunktion auch diese Art von Anforderungserkennung durchführen. Auf den ersten Blick scheint das Schreiben eleganter zu sein. Der Browser hat jedoch eine Eigenart: Jedes Framework und Fenster haben eine eigene globale Variable. Wenn Sie ein Objekt in einem bestimmten Framework in ein anderes Framework übergeben, funktioniert der Instanz nicht ordnungsgemäß, da die beiden Frameworks unterschiedliche Konstruktoren haben. Aus diesem Grund gibt es eine Array.IsArray () -Methode in ECMascript5. Es wäre schön, wenn es eine Methode gibt, die das Framework überschreitet, um zu überprüfen, ob ein Objekt eine Instanz eines bestimmten Konstruktors ist. Der obige Gettypename () ist eine Problemumgehung, aber vielleicht gibt es eine grundlegendere Lösung.
6. Übersicht
Das folgende sollte derzeit der dringendste Bedarf in JavaScript sein und kann einige funktionale Merkmale der aktuellen Verantwortlichkeiten von Typeof ersetzen:
isdefined () (wie z. B. Objekt.isdefined ()): Es kann als Funktion oder als Operator verwendet werden
isObject ()
GettypeName ()
Ein Mechanismus, der erkennen kann, ob ein Objekt eine Instanz eines bestimmten Konstruktors über Frameworks hinweg ist
Um zu überprüfen, ob eine Variable für eine solche Anforderung deklariert wurde, ist sie möglicherweise nicht erforderlich, einen eigenen Betreiber zu haben.
Die obige Zusammenfassung der Verwendung von Typof in JS ist der gesamte Inhalt, der vom Herausgeber geteilt wird. Ich hoffe, es kann Ihnen eine Referenz geben und ich hoffe, Sie können Wulin.com mehr unterstützen.