Heim  >  Artikel  >  Web-Frontend  >  So ermitteln Sie, ob eine Variable in es6 ein Array ist

So ermitteln Sie, ob eine Variable in es6 ein Array ist

青灯夜游
青灯夜游Original
2023-01-18 18:17:211332Durchsuche

Beurteilungsmethode: 1. Verwenden Sie die Funktion isArray() des Array-Objekts, um zu bestimmen, ob die Variable ein Array ist. Die Syntax lautet „Array.isArray(obj)“. gibt false zurück. 2. Nach „Object.prototype.toString()“ zu urteilen, lautet die Syntax „Object.prototype.toString.apply(a) === ‚[object Array]‘“.

So ermitteln Sie, ob eine Variable in es6 ein Array ist

Die Betriebsumgebung dieses Tutorials: Windows 7-System, ECMAScript Version 6, Dell G3-Computer.

Der schwache Typisierungsmechanismus von JS macht die Beurteilung von Variablentypen zu einer obligatorischen Frage bei Vorstellungsgesprächen für junge Front-End-Entwickler. Im Allgemeinen verwende ich sie als erste Frage, um Kandidaten zu prüfen, und gehe dann auf dieser Grundlage vor.

Bestimmen Sie, ob eine Variable in ES5 ein Array ist.

In ES5 haben wir mindestens die folgenden 5 Möglichkeiten, um zu bestimmen, ob ein Wert ein Array ist:

var a = []; 
// 1.基于instanceof 
a instanceof Array; 
// 2.基于constructor 
a.constructor === Array; 
// 3.基于Object.prototype.isPrototypeOf 
Array.prototype.isPrototypeOf(a); 
// 4.基于getPrototypeOf 
Object.getPrototypeOf(a) === Array.prototype; 
// 5.基于Object.prototype.toString 
Object.prototype.toString.apply(a) === '[object Array]';

Oben, außer Object.prototype.toString, kann keine andere Methode korrekt sein Bestimmen Sie einen Variablentyp.

Sie müssen wissen, dass die Ausführungsumgebung des Codes sehr komplex ist und eine Variable alle möglichen Tricks anwenden kann, um ihren Ersteller zu verwirren. Werfen wir einen Blick darauf:

var a = {
    __proto__: Array.prototype
}; 
// 分别在控制台试运行以下代码 
// 1.基于instanceof 
a instanceof Array; // => true 
// 2.基于constructor 
a.constructor === Array; // => true 
// 3.基于Object.prototype.isPrototypeOf 
Array.prototype.isPrototypeOf(a); // => true 
// 4.基于getPrototypeOf 
Object.getPrototypeOf(a) === Array.prototype; // => true

Oben geben alle 4 Methoden true zurück. Warum? 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 Sie, ob eine Variable ein Array in ES6 ist.

Angesichts der häufigen Verwendung von Arrays wird in ES6 die Methode Array.isArray hinzugefügt. Mit dieser Methode lässt sich sehr einfach feststellen, ob eine Variable ein Array ist , wie folgt:

Array.isArray([]); // => true 
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 von Array.isArray normalerweise so aus:

if (!Array.isArray){ 
    Array.isArray = function(arg){ 
        return Object.prototype.toString.call(arg) === '[object Array]'; 
    }; 
}

[Verwandte Empfehlung: Javascript-Lerntutorial]

Das obige ist der detaillierte Inhalt vonSo ermitteln Sie, ob eine Variable in es6 ein Array 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