Heim  >  Artikel  >  Web-Frontend  >  Welche Methoden werden verwendet, um Array-Typen in Javascript zu erkennen?

Welche Methoden werden verwendet, um Array-Typen in Javascript zu erkennen?

伊谢尔伦
伊谢尔伦Original
2017-07-18 13:19:491008Durchsuche

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!

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