JavaScript/Objekte/Array/isArray

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

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)


Attribute
Writable true
Enumerable false
Configurable true


Prototyp


Eigenschaften


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.


Beispiel
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.


Beispiel
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.


Beispiel
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.


Beispiel
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.


Beispiel
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.


Beispiel
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