1.typeof-Operator. Für verschiedene Objekttypen wie Funktion, String, Zahl, Undefiniert usw. ist er voll funktionsfähig, aber wenn es sich um ein Array handelt
var arr=new Array("1","2","3","4","5"); alert(typeof(arr));
Sie erhalten eine Objektantwort, die etwas enttäuschend ist.
2 Der Instanzoperator in JavaScript gibt eine zurück
Ein boolescher Wert, der angibt, ob das Objekt eine Instanz einer bestimmten Klasse ist.
Verwendung: Ergebnis = Objektinstanz von
Klasse, es ist immer noch das Array. Versuchen Sie es noch einmal Mehrere Frames Es entsteht ein großes Problem.
var arrayStr=new Array("1","2","3","4","5"); alert(arrayStr instanceof Array);
Der Code
gibt zwei falsche Ergebnisse zurück, was sehr enttäuschend ist.
var iframe = document.createElement('iframe'); document.body.appendChild(iframe); xArray = window.frames[window.frames.length-1].Array; var arr = new xArray("1","2","3","4","5");//这个写法IE大哥下是不支持的,FF下才有 alert(arr instanceof Array); // false alert(arr.constructor === Array); // false
Object.prototype.toString( ) geschrieben
Wenn die toString-Methode aufgerufen wird, werden die folgenden Schritte ausgeführt:
1
[[Klasse]]-Eigenschaft dieses Objekts
2
Verkettung der drei Zeichenfolgen „[object“, Result (1) und „] Return
Ergebnis (2)
Die obige Spezifikation definiert das Verhalten von Object.prototype.toString: Rufen Sie zunächst eine interne Eigenschaft [[Klasse]] des Objekts ab und geben Sie dann ein Objekt ähnlich „[object
Array]“-String als Ergebnis (jeder, der den ECMA-Standard gelesen hat, sollte wissen, dass [[]] zur Darstellung von Attributen verwendet wird, die intern in der Sprache verwendet werden und von außen nicht direkt zugänglich sind, sogenannte „interne Attribute“). Verwenden dieser Methode Mit dem Aufruf können wir die internen Attribute [[Klasse]] eines beliebigen Objekts abrufen und dann die Typerkennung in einen Zeichenfolgenvergleich umwandeln, um unseren Zweck zu erreichen. Schauen wir uns zunächst die Beschreibung von Array im ECMA-Standard an:
ECMA-262 hat
neues Array([ item0[, item1 [,…]]])
Die [[Class]]-Eigenschaft geschrieben
des neu erstellten Objekts auf „Array“ gesetzt ist.
Wenn man sich dies zunutze macht, erscheint die dritte Methode.
Funktion isArray(obj) {
return Object.prototype.toString.call(obj) ===
'[Objektarray]';
Der Aufruf ändert die Referenz von toString auf das zu erkennende Objekt, gibt die Zeichenfolgendarstellung dieses Objekts zurück und vergleicht dann, ob diese Zeichenfolge „[Objekt““ ist
Array]‘, um festzustellen, ob es sich um eine Instanz von Array handelt. Vielleicht möchten Sie fragen, warum nicht o.toString() direkt? Obwohl Array von Object erbt, verfügt es auch über eine toString-Methode. Diese Methode wird jedoch möglicherweise neu geschrieben und erfüllt unsere Anforderungen nicht. Object.prototype ist der Hintern eines Tigers, und nur wenige Menschen wagen es, ihn zu berühren kann seine „Reinheit“ bis zu einem gewissen Grad garantieren :)
Im Gegensatz zu den vorherigen Lösungen löst diese Methode das Problem der rahmenübergreifenden Objektkonstruktion sehr gut. Nach dem Testen ist auch die Kompatibilität mit den wichtigsten Browsern sehr gut, sodass Sie sie bedenkenlos verwenden können. Die gute Nachricht ist, dass viele Frameworks wie jQuery, Base2 usw. planen, diese Methode zu verwenden, um bestimmte Arten spezieller Objekte wie Arrays, reguläre Ausdrücke usw. zu implementieren, ohne sie selbst schreiben zu müssen.
Darüber hinaus wurde auch Ext3 auf diese Schreibweise umgestellt