1. typeof

Zuerst würden wir daran denken, typeof zu verwenden, um den Datentyp zu erkennen, aber für grundlegende Typen wie Function, String, Number, Undefined usw. kann typeof sie alle erkennen. Der Code sieht zum Beispiel wie folgt aus:

function test(){} console.log(typeof 1); // number console.log(typeof test); // function console.log(typeof "yunxi"); // string console.log(typeof undefined); // undefined

Aber für Arrays oder reguläre Ausdrücke reicht die Verwendung von typeof zur Erkennung nicht aus, denn wenn wir ein Array oder einen regulären Ausdruck erkennen, ist der zurückgegebene Typ ein Objekt. Wie im folgenden Code gezeigt:

console.log(typeof []); // object console.log(typeof /\d+/g); // object

2. instanceof

Daraus lässt sich leicht ableiten, instanceof zu verwenden, um zu prüfen, ob ein Objekt eine Instanz eines Arrays ist. Diese Prüfung gibt einen booleschen Wert zurück. Wenn es ein Array ist, gibt sie true zurück; andernfalls gibt sie false zurück. Schauen wir uns den obigen Code an, um zu prüfen, ob es ein Array ist:

console.log([] instanceof Array); // true console.log(/\d+/g instanceof Array); // false

Wie oben zu sehen ist, kann man mit instanceof tatsächlich feststellen, ob es ein Array ist.

3. constructor-Eigenschaft

In JavaScript hat jedes Objekt eine constructor-Eigenschaft, die auf die Konstruktorfunktion verweist, die das Objekt initialisiert hat. Um beispielsweise den Typ eines unbekannten Objekts zu bestimmen, können wir eine Methode wie folgt schreiben:

function isArray(obj) { return typeof obj == 'object' && obj.constructor == Array } //Test-Demo console.log(isArray([])); // true var a = {"a":1}; console.log(isArray(a)); // false var b = [1,2,3]; console.log(isArray(b)); // true console.log(isArray(/\d+/g));// false

Wie oben zu sehen ist, können wir durch den Aufruf der Methode isArray ebenfalls feststellen, ob es sich um ein Array handelt.

Wir können nun sehen, dass man für die Punkte 2 und 3 mit der instanceof-Methode bzw. der constructor-Eigenschaft scheinbar feststellen kann, ob es sich um ein Array handelt. Es gibt jedoch Ausnahmen. Wenn man beispielsweise ein Array von einer Seite über Frames (iframe) hinweg verwendet, schlägt dies fehl, weil in verschiedenen Frames (iframes) erstellte Arrays ihre prototype-Eigenschaft nicht miteinander teilen. Der folgende Code-Test kann dies bestätigen~

var iframe = document.createElement('iframe'); document.body.appendChild(iframe); xArray = window.frames[window.frames.length-1].Array; var arr = new xArray("1","2","3","4","5"); //Diese Syntax wird in IE nicht unterstützt; sie ist in Standardbrowsern wie Firefox und Chrome verfügbar. console.log(arr); //Gibt ["1", "2", "3", "4", "5"] aus console.log(arr instanceof Array); // false console.log(arr.constructor === Array); // false

Keine der oben genannten Methoden kann feststellen, ob ein Objekt ein Array ist; wenn wir uns jedoch ECMA262 ansehen, können wir sehen, dass die Methode Object.prototype.toString.call() verwendet werden kann, um festzustellen, ob ein Objekt ein Array ist. Der Code lautet wie folgt:

function isArray(obj) { return Object.prototype.toString.call(obj) == '[object Array]'; } //Code-Aufruf console.log(isArray([])); // true console.log(isArray([1,2,3])); // true var iframe = document.createElement('iframe'); document.body.appendChild(iframe); xArray = window.frames[window.frames.length-1].Array; var arr = new xArray("1","2","3","4","5"); console.log(arr); // ["1","2","3","4","5"] console.log(isArray(arr)); // true