JavaScript/Objekte/Array/isArray
Unter Verwendung der eigenen Methode isArray des Konstruktors Array kann ein Wert daraufhin überprüft werden, ob es sich dabei um ein Array handelt oder nicht.
Syntax
Array.isArray(value)
Writable | true |
Enumerable | false |
Configurable | true |
Prototyp
Eigenschaften
Inhaltsverzeichnis
Beschreibung
Die Methode Array.isArray besitzt einen formalen Parameter. Wird ihr ein Wert übergeben, dann prüft sie, ob es sich bei diesem Wert um ein Array handelt und gibt je nach Ergebnis entweder true oder false zurück. Wird die Methode ohne Übergabe eines Arguments aufgerufen, dann wird keine Ausnahme geworfen, sondern standardmäßig der boolesche Wert false zurückgegeben. Werden beim Aufruf mehrere Argumente übergeben wird der erste Wert geprüft und die anderen Werte werden ignoriert.
console.log(Array.isArray([ ])); // true
console.log(Array.isArray({ })); // false
Wenn also überprüft werden soll, ob es sich bei einem Wert um ein Array handelt, ist es grundsätzlich empfehlenswert, die Methode Array.isArray zu verwenden, da andere Mittel nicht immer zuverlässig funktionieren. So scheidet eine Überprüfung unter Verwendung des Operators typeof zum Beispiel prinzipiell als Möglichkeit aus, da hier bei einem Array, anders als bei Funktionen, grundsätzlich der Datentyp Object zurückgegeben wird, was zwar formal richtig ist, aber wenig hilfreich.
const array = [ ];
console.log(typeof array); // object
Auch die Verwendung des Operators instanceof kann unter Umständen ein falsches Ergebnis zurückgeben, wenn nämlich das geprüfte Array aus einer anderen globalen Umgebung stammt als der referenzierte Konstruktor. Ebenfalls keine hundertprozentige Sicherheit bietet der Abgleich des Rückgabewertes der im Kontext des Arrays aufgerufenen Methode toString mit dem erwarteten Standardwert, da dies voraussetzt, dass die verwendete Methode nicht manipuliert wurde. Es sei also nachdrücklich empfohlen, zu diesem Zweck immer die Methode isArray zu verwenden.
Abgrenzung
Bei der Verwendung der Methode isArray allerdings zu berücksichtigen, dass diese lediglich prüft, ob es sich bei dem übergebenen Wert um ein gewöhnliches Array handelt. Bei der Prüfung anderer Indexed Collections wird von der Methode dem zur Folge standardmäßig der Wert false zurückgegeben.
const typed = new Float32Array(16);
console.log(Array.isArray(typed)); // false
Das bedeutet, auch bei Typed Arrays fällt die Prüfung mittels isArray negativ aus, sodass hier anders vorgegangen werden muss. Die Überprüfung, ob es sich bei einem Wert um ein Typed Array handelt, kann zum Beispiel unter Verwendung der Methode isView des Konstruktors ArrayBuffer erfolgen.
const typed = new Uint16Array(9);
console.log(ArrayBuffer.isView(typed)); // true
Dabei ist allerdings zu beachten, dass hier auch für Objekte vom Typ DataView true zurückgegeben wird und nicht nur bei Typed Arrays, da beide Objekttypen über eine interne Eigenschaft [[ViewedArrayBuffer]] verfügen, die von der Methode isView examiniert wird. Hier müssten also gegebenenfalls noch weitere Prüfschritte unternommen werden.
function test ( ) {
return arguments;
}
console.log(Array.isArray(test( ))); // false
Auch bei dem Objekt, welches innerhalb einer Funktion über den Bezeichner arguments referenziert werden kann und dass eine Liste der an die Funktion übergebenen Argumente enthält, handelt es sich nicht um ein Array, obwohl auch dieses exotische Objekt eine Indexed Collection ist. Das heißt, auch in diesem Fall wird von isArray standardmäßig der Wert false zurückgegeben.
Eigene Eigenschaften
Die Methode isArray besitzt zwei eigene Eigenschaften, nämlich name und length. Der Wert der Eigenschaft name ist der String isArray, also der Name der Methode, und die Werte der internen Attribute dieser Eigenschaft sind false für Writable, false für Enumerable und true für Configurable. Die Eigenschaft ist also standardmäßig schreibgeschützt, kann aber unter Verwendung von Methoden wie zum Beispiel defineProperty von Object verändert werden.
console.log(Object.getOwnPropertyNames(Array.isArray)); // [length, name]
console.log(Array.isArray.length); // 1
console.log(Array.isArray.name); // isArray
Die Eigenschaft length der Methode isArray hat den Wert 1, da die Funktion über genau einen formalen Parameter verfügt. Der Wert der Eigenschaft length ist vom Datentyp Number und keine Stringrepräsentation und die Attribute der Eigenschaft sind dieselben wie bei der Eigenschaft name. Auch sie ist also schreibgeschützt, kann aber durch Definition verändert werden.
Weblinks
- ECMAScript 2017 (7th Edition, ECMA-262 Draft): Array.isArray
- ECMAScript 2015 (6th Edition, ECMA-262): Array.isArray
- MDN: Array.isArray