In es6 können Sie die Methode isArray() verwenden, um festzustellen, ob eine Variable ein Array ist. Die Syntax lautet „Array.isArray(obj)“. Wenn es sich um ein Array handelt, gibt es „true“ zurück, andernfalls gibt es „false“ zurück.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, ECMAScript Version 6, Dell G3-Computer.
Bestimmen, ob eine Variable in ES5 ein Array ist. In ES5
haben wir mindestens die folgenden fünf Möglichkeiten, um zu bestimmen, ob ein Wert ein Array ist:
var a = []; // 1. Basierend auf der Instanz von eine Instanz von Array; // 2. Basierend auf dem Konstruktor a.constructor === Array; // 3. Basierend auf Object.prototype.isPrototypeOf Array.prototype.isPrototypeOf(a); // 4. Basierend auf getPrototypeOf Object.getPrototypeOf(a) === Array.prototype; // 5. Basierend auf Object.prototype.toString Object.prototype.toString.apply(a) === '[object Array]';
Mit Ausnahme von Object.prototype.toString
können andere Methoden den Typ der Variablen nicht korrekt bestimmen.
Wie Sie wissen, ist die Ausführungsumgebung des Codes sehr komplex und eine Variable kann alle möglichen Tricks anwenden, um ihren Ersteller zu verwirren. Mal sehen
var a = { __proto__: Array.prototype }; //Versuchen Sie, jeweils die folgenden Codes in der Konsole auszuführen // 1. Basierend auf der Instanz von eine Instanz eines Arrays; // => true // 2. Basierend auf dem Konstruktor a.constructor === Array; // => true // 3. Basierend auf Object.prototype.isPrototypeOf Array.prototype.isPrototypeOf(a); // => true // 4. Basierend auf getPrototypeOf Object.getPrototypeOf(a) === Array.prototype; // => true
, alle vier Methoden geben true zurück. Wir haben gerade das __proto__-Attribut eines Objekts manuell als Array.prototype angegeben, was dazu führte, dass das Objekt das Array-Objekt erbte. Diese unverantwortliche Vererbungsmethode führte dazu, dass das auf der Vererbung basierende Beurteilungsschema sofort zusammenbrach.
Darüber hinaus wissen wir auch, dass es sich bei Array um Heap-Daten handelt und die Variable nur auf ihre Referenzadresse verweist, sodass die Adresse, auf die das Array-Objekt jeder Seite verweist, unterschiedlich ist. Für ein in einem Iframe deklariertes Array ist sein Konstruktor das Array-Objekt im Iframe. Wenn im Iframe ein Array x deklariert und der Variablen y der übergeordneten Seite zugewiesen wird, wird auf der übergeordneten Seite eine Instanz des Arrays y verwendet und das Ergebnis muss falsch sein. Der letzte gibt eine Zeichenfolge zurück, sodass kein Referenzproblem besteht. Tatsächlich sind Interaktionen zwischen mehreren Seiten oder Systemen nur mit Strings möglich.
Bestimmen, ob eine Variable in ES6 ein Array ist
. Aufgrund der allgemeinen Verwendung von Arrays wird in ES6 die Methode Array.isArray hinzugefügt, um zu bestimmen, ob eine Variable ein Array ist:
Array.isArray ([]); // => wahr Array.isArray({0: 'a', length: 1}); // => false
Tatsächlich ist die Verwendung von Object.prototype.toString
zur Bestimmung des Typs eines Werts auch ein Standard für große Mainstream-Bibliotheken. Daher sieht die Polyfüllung für Array.isArray normalerweise so aus:
if (!Array.isArray){ Array.isArray = function(arg){ return Object.prototype.toString.call(arg) === '[object Array]'; }; }