In es6 können Sie die Methode isArray() verwenden, um festzustellen, ob eine Variable ein Array ist. Die Syntax lautet „Array.isArray(obj)“. Objekt ist ein Array, es gibt true zurück, andernfalls wird false zurückgegeben.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, ECMAScript Version 6, Dell G3-Computer.
Bestimmen Sie, 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.基于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]';
Das Obige, außer Object. Prototyp.toString</ Außer code> kann keine andere Methode den Typ der Variablen korrekt bestimmen. <code>Object.prototype.toString
外,其它方法都不能正确判断变量的类型。
要知道,代码的运行环境十分复杂,一个变量可能使用浑身解数去迷惑它的创造者。且看
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
以上,4种方法将全部返回true,为什么呢?我们只是手动指定了某个对象的__proto__属性为Array.prototype,便导致了该对象继承了Array对象,这种毫不负责任的继承方式,使得基于继承的判断方案瞬间土崩瓦解。
不仅如此,我们还知道,Array是堆数据,变量指向的只是它的引用地址,因此每个页面的Array对象引用的地址都是不一样的。iframe中声明的数组,它的构造函数是iframe中的Array对象。如果在iframe声明了一个数组x,将其赋值给父页面的变量y,那么在父页面使用y instanceof Array ,结果一定是false的。而最后一种返回的是字符串,不会存在引用问题。实际上,多页面或系统之间的交互只有字符串能够畅行无阻。
在ES6中判断变量是否为数组
鉴于数组的常用性,在ES6中新增了Array.isArray方法,使用此方法判断变量是否为数组,则非常简单,如下:
Array.isArray([]); // => true Array.isArray({0: 'a', length: 1}); // => false
实际上,通过Object.prototype.toString
rrree Alle 4 Methoden werden „true“ zurückgeben. 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: 🎜if (!Array.isArray){ Array.isArray = function(arg){ return Object.prototype.toString.call(arg) === '[object Array]'; }; }
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: 🎜rrreee🎜[Verwandte Empfehlungen: 🎜Javascript-Video-Tutorial🎜, 🎜Web-Frontend🎜]🎜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!