In JavaScript ist der Einbaugerät Erkennungsmechanismus nicht absolut zuverlässig. Die Typeof und Instanceof Schlüsselwörter werden hier bezeichnet.
Denn TypeOf etwas unvorhersehbares Verhalten, das führt oft zu unzuverlässigen Ergebnissen hat bei der Erkennung von Datentypen, funktionieren"" Safari Renditen bei Typeof, reguläre Ausdrücke, Rückkehr "Objekt" nächste Zeit Chrom.
Instanceof das Vorhandensein von mehreren globalen Bereiche (in Bezug auf die Einbeziehung von IFRAME auf einer Seite) ist auch ein Problem. Zum Beispiel den folgenden Code:
var isArray = value instanceof Array;
Der obige Code muss ein Array Wert True, zurückgibt, und muss im gleichen globalen Gültigkeitsbereich als Array. Wenn der Wert ein Array in einen anderen IFRAME definiert ist, gibt der obige Code false zurück.
Es ist auch ein Problem beim erkennen, ob ein Objekt eine systemeigene Objekt oder ein Entwickler definierten Objekt handelt. Wie JSON-Objekte weil viele Menschen Crockfords JSON-Bibliothek, verwendet haben, definiert ein globales JSON-Objekt, aber jetzt ist der neue Browser stammt aus dem JSON-Objekte unterstützen und muss nicht auf externe Bibliotheken angewiesen. Es ist schwierig, festzustellen, ob das JSON-Objekt in der Seite verwendeten heimisch ist.
Der Weg, um das oben genannte Problem zu lösen ist dasselbe. Zunächst einmal sollten Sie wissen, dass die Objekt-native ToString-Methode aufrufen, auf einen beliebigen Wert eine Zeichenfolge [Objcet XXX] Format zurückgibt. Jede Klasse hat eine Klasseneigenschaft intern, und der Name der Konstruktor in der oben genannten Zeichenfolge ist diese Eigenschaft gegründet. Lassen Sie uns ein Beispiel geben:
console.log(Object.prototype.toString.call([]));//[object Array] console.log(Object.prototype.toString.call(window.Array));//[object function] console.log(Object.prototype.toString.call(Object));//[object function] console.log(Object.prototype.toString.call(window));//[object global] console.log(Object.prototype.toString.call(/^\d/));//[object RegExp] console.log(Object.prototype.toString.call(new Object()));//[object Object]
Da der Konstruktor Name unabhängig von globalen Gültigkeitsbereich ist, sorgt mit ToString () ein konsistenten Wert zurückgegeben wird. Damit können wir Funktionen erstellen, die genau den Typ des Objekts zu bestimmen. Zum Beispiel:
function isFunction(value){ return Object.prototype.toString.call(value)=="[object Function]";}
Beachten Sie jedoch, dass jede Funktion in dh, wird als ein COM-Objekt implementiert, IsFunction gibt False zurück, (da keiner von ihnen sind systemeigene JavaScript-Funktionen).
In Web-Entwicklung ist es wichtig, zwischen Muttersprachlern und nicht-Muttersprachlern JavaScript-Objekte unterscheiden zu können. Nur auf diese Weise können Sie wissen genau welche Eigenschaften hat ein Objekt tatsächlich. Diese Technik geben kann, die richtige Schlussfolgerung auf ein beliebiges Objekt, also in Zukunft Programmierung Prozess, müssen wir den Typ des Objekts zu beurteilen, wenn wir TypeOf und Instanceof verwerfen möchten.
Abschließend noch ein wichtiger Hinweis: Object.prototype.toString (selbst) kann geändert werden, und die oben beschriebenen Techniken gelten nur zu nicht veränderten native Versionen.