Wie soll ich feststellen, ob das Argument ein Array ist, weil typeof []
'object'
zurückgibt und ich zwischen Arrays und Objekten unterscheiden möchte.
Es ist möglich, dass das Objekt wie {"0":"string","1":"string","length":"2"}
aussieht, aber ich möchte nicht, dass es als Array ausgegeben wird, wenn es tatsächlich ein Objekt ist, das wie ein Array aussieht.
JSON.parse
und JSON.stringify
können diese Unterscheidung treffen. Wie kann ich es tun?
Ich verwende Node.JS, das auf V8 wie Chrome basiert.
Array.isArray
_native V8 Funktion. Es ist schnell, es ist immer richtig. Dies ist Teil von ES5.
arr instanceof Array
_Überprüft, ob das Objekt mit dem Array-Konstruktor erstellt wurde.
Eine Methode aus dem Unterstrich. Hier ist ein Ausschnitt aus der Quelle
_var toString = Object.prototype.toString,
nativeIsArray = Array.isArray;
_.isArray = nativeIsArray || function(obj) {
return toString.call(obj) === '[object Array]';
};
_
Diese Methode nimmt ein Objekt und ruft die Methode _Object.prototype.toString
_ auf. Dies gibt für Arrays immer _[object Array]
_ zurück.
Nach meiner persönlichen Erfahrung ist es am effektivsten, nach der Methode toString
zu fragen, aber sie ist nicht so kurz oder lesbar wie _instanceof Array
_ und auch nicht so schnell wie _Array.isArray
_, aber das ist ES5-Code, und ich vermeide es, sie zu verwenden Portabilität.
Ich würde Ihnen persönlich empfehlen, underscore
NAME _ zu verwenden, eine Bibliothek mit gängigen Dienstprogrammmethoden. Es hat viele nützliche Funktionen, die DRY Ihren Code verbessern.
Versuchen Sie diesen Code:
Array.isArray(argument)
Ich denke, diese Frage hat mehrere gute Antworten, aber der Vollständigkeit halber möchte ich noch eine Option hinzufügen, die zuvor nicht vorgeschlagen wurde.
Um zu überprüfen, ob etwas ein Array ist, können Sie das native Modul Node.js util
und seine Funktion isArray()
verwenden.
Beispiel:
var util = require('util');
util.isArray([]); // true
util.isArray(new Array); // true
util.isArray({"0":"string","1":"string","length":"2"}); // false
Bei dieser Methode müssen Sie sich keine Sorgen um die von V8 implementierten JS-Standards machen, da sie immer die richtige Antwort zeigen.
Wie wäre es mit:
your_object instanceof Array
In V8 in Chrome bekomme ich
[] instanceof Array
> true
({}) instanceof Array
> false
({"0":"string","1":"string","length":"2"}) instanceof Array
> false
Versuchen Sie es so:
console.log (Object.prototype.toString.call (arg) .replace (/ ^ [object (. +)] $ /, '$ 1'). toLowerCase ())