Heim  >  Artikel  >  Web-Frontend  >  JavaScript bestimmt, ob ein Objekt eine Array-Methodenzusammenfassung ist

JavaScript bestimmt, ob ein Objekt eine Array-Methodenzusammenfassung ist

伊谢尔伦
伊谢尔伦Original
2017-07-26 11:41:031399Durchsuche

In der Entwicklung müssen wir häufig feststellen, ob ein Objekt ein Array-Typ ist

1.typeof-Operator Für verschiedene Objekttypen wie Funktion, Zeichenfolge, Zahl, Undefiniert usw. ist dies vollständig fähig, aber für Array

var arr=new Array("1","2","3","4","5"); 
alert(typeof(arr));

erhalten Sie eine Objektantwort, was etwas enttäuschend ist

2.Instanceof-Operator, der Instanzof-Operator in JavaScript gibt einen Booleschen Wert zurück Wert, der angibt, ob das Objekt eine Instanz einer bestimmten Klasse ist.
Verwendung: Ergebnis = Objektinstanz der Klasse, immer noch das Array, versuchen Sie es noch einmal, nun, es gibt erfolgreich „true“ zurück

var arrayStr=new Array("1","2","3","4","5"); 
alert(arrayStr instanceof Array);

Kleine Zusammenfassung: Es scheint, dass die Fragen, die wir heute besprochen haben beantwortet, aber tatsächlich führt das Pendeln zwischen mehreren Frames zu großen Problemen.

Code

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

gibt zwei falsche Ergebnisse zurück, was enttäuschend ist.

ECMA-262 schreibt
Object.prototype.toString( ) Wenn die toString-Methode aufgerufen wird, werden die folgenden Schritte ausgeführt:
1. Holen Sie sich die [[Class]]-Eigenschaft dieses Objekts.
2. Berechnen Sie einen Zeichenfolgenwert, indem Sie die drei Zeichenfolgen „[Objekt“, Ergebnis (1)“ und „]“ verketten.
3 Rückgabeergebnis (2)

Die obige Spezifikationsdefinition Verhalten von Object.prototype.toString: Rufen Sie zunächst eine interne Eigenschaft [[Class]] des Objekts ab und geben Sie dann basierend auf dieser Eigenschaft eine Zeichenfolge ähnlich „[object Array]“ als Ergebnis zurück (Sie sollten die ECMA gelesen haben). Standard Wie wir alle wissen, wird [[]] verwendet, um Attribute darzustellen, die intern in der Sprache verwendet werden und von außen nicht direkt zugänglich sind, sogenannte „interne Attribute“). Mit dieser Methode können wir in Kombination mit einem Aufruf die internen Attribute [[Klasse]] eines beliebigen Objekts abrufen und dann die Typerkennung in einen Zeichenfolgenvergleich umwandeln, um unseren Zweck zu erreichen. Werfen wir zunächst einen Blick auf die Beschreibung von Array im ECMA-Standard:

ECMA-262 schreibt
new Array([ item0[, item1 [,…]]])
The [[Class ]]-Eigenschaft des neu erstellten Objekts wird auf „Array“ gesetzt.
Daher wird die dritte Methode angezeigt.
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]'
} call ändert die Referenz von toString auf das zu erkennende Objekt und gibt zurück. Die Zeichenfolgendarstellung dieses Objekts wird dann verglichen, um festzustellen, ob diese Zeichenfolge „[Objekt-Array]“ ist, 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 Test ist auch die Kompatibilität mit den wichtigsten Browsern sehr gut kann sicher sein, verwenden. 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

isArray : function(v){ 
return toString.apply(v) === '[object Array]'; 
}


Das obige ist der detaillierte Inhalt vonJavaScript bestimmt, ob ein Objekt eine Array-Methodenzusammenfassung ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn