Typ des Operators.
Für Objekte der Typen Funktion, String, Zahl und Undefiniert wird es kein Problem geben, aber für Array-Objekte ist es nutzlos:
alert(typeof null); // "object" alert(typeof []); // "object"
instanceof
Gilt, wenn nur eine globale Ausführungsumgebung vorhanden ist. Wenn diese mehrere Frameworks enthält, gibt es mehr als zwei verschiedene Versionen des Array-Konstruktors Frame übergibt ein Array, und das eingehende Array und das im zweiten Frame nativ erstellte Array haben unterschiedliche Konstruktoren, also unterschiedliche Typen
if (value instanceof Array) { //对数组执行某项操作 }
Array. isArray()-Methode
Da sie neu in ES5 ist, unterstützt sie nur IE9+, Firefox 4+, Safari 5+, Opera 10.5+ und Chrome
if (Array.isArray(value)) { //对数组执行某些操作 }
Object.prototype.toString.call()-Methode
Anwendbar auf alle Umgebungen, unterstützt nur native Objekte, Object Die toString()-Methode Der Konstruktorname eines nicht nativen Konstruktors kann nicht erkannt werden. Jeder vom Entwickler angepasste Konstruktor gibt [object Object] zurück
Prinzip: Der direkte Aufruf der nativen toString()-Methode von Object für einen beliebigen Wert gibt eine Zeichenfolge im Format von [object NativeConstrctorName] zurück. Es gibt eine Klassenattribut innerhalb der Klasse, und dieses Attribut gibt den Namen des Konstruktors in der obigen Zeichenfolge an.
var value = [] console.log(Object.prototype.toString.call(value))//"[Object Array]"
Da der Konstruktorname eines nativen Arrays nichts mit dem Bereich zu tun hat, kann durch die Verwendung der toString()-Methode sichergestellt werden, dass derselbe Wert ausgegeben wird.
Warum nicht die objekteigene toString()-Methode verwenden?
var value = [] console.log(value.toString())//" " value = ['pp','oo'] console.log(value.toString())//"pp,oo" value = ['pp',"oo"] console.log(Object.prototype.toString.call(value))//[object Array]
Die tostring()-Methode von Array wurde überschrieben (dies gilt für viele native Objekte), sodass sie die toString()-Methode selbst aufruft Konstruktor, andere Zeichenfolgen zurückgeben
Sie können diese Methode auch verwenden, um festzustellen, ob es sich um eine native Funktion oder einen regulären Ausdruck handelt
function isFunction(value){ return Object.prototype.toString.call(value) === “[object Function]” }//不适用于IE中以COM对象实现的任何函数 function isRegExp(value){ return Object.prototype.toString.call(value) === “[object RegExp]” }
Konstruktor der Objektattribute
Zusätzlich zu „instanceof“ können wir auch das Konstruktorattribut jedes Objekts verwenden, um seinen Typ zu bestimmen, sodass wir Folgendes tun können:
var arr = []; alert(arr.constructor == Array); // true
Sieht aus wie die letzten beiden Die Lösung ist wasserdicht, aber ist sie das wirklich? Es treten unvorhergesehene Umstände auf, und wenn Sie zwischen mehreren Frames hin- und herpendeln, treten frustrierende Probleme auf:
var iframe = document.createElement('iframe'); document.body.appendChild(iframe); xArray = window.frames[window.frames.length-1].Array; var arr = new xArray(1,2,3); // [1,2,3] // 哎呀! arr instanceof Array; // false // 哎呀呀! arr.constructor === Array; // false
Da jeder Iframe seine eigene Ausführungsumgebung hat, ist die Frame-übergreifende Instanziierung der Objekte nicht mit der Prototypenkette verbunden einander, daher schlägt der obige Erkennungscode fehl! Was soll ich tun? ? Nun, JavaScript ist eine dynamische Sprache. Vielleicht kann uns der „Ententyp“ des Schlangenöls helfen von bestimmten Array-Objekten, um Urteile zu fällen, wie zum Beispiel dem Prototype-Framework. Werfen wir einen Blick auf die Object.isArray-Methode, die es implementiert:
isArray: function(object) { return object != null && typeof object == "object" && 'splice' in object && 'join' in object; }
Das obige ist der detaillierte Inhalt vonWelche Methoden werden verwendet, um Array-Typen in Javascript zu erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!