JavaScript: détecte si l’argument est un tableau plutôt qu’un object (Node.JS)

Comment devrais-je détecter si l’argument est un tableau, car typeof [] renvoie 'object' et je veux distinguer les tableaux et les objects.

Il est possible que l’object ressemble à {"0":"ssortingng","1":"ssortingng","length":"2"} mais je ne veux pas qu’il apparaisse comme un tableau s’il se trouve dans fait un object ressemblant à un tableau.

JSON.parse et JSON.ssortingngify peuvent faire cette distinction. Comment puis-je le faire?

J’utilise Node.JS qui est basé sur V8 identique à Chrome.

    • Array.isArray

    fonction V8 native. C’est rapide, c’est toujours correct. Cela fait partie de ES5.

    • arr instanceof Array

    Vérifie si l’object a été créé avec le constructeur de tableau.

    • _.isArray // underscore method.

    Une méthode de soulignement. Voici un extrait de la source

     var toSsortingng = Object.prototype.toSsortingng, nativeIsArray = Array.isArray; _.isArray = nativeIsArray || function(obj) { return toSsortingng.call(obj) === '[object Array]'; }; 

    Cette méthode prend un object et appelle la méthode Object.prototype.toSsortingng . Cela retournera toujours [object Array] pour les tableaux.

    Dans mon expérience personnelle, je trouve que demander la méthode toSsortingng est le plus efficace, mais pas aussi court ou lisible que instanceof Array ni aussi vite que Array.isArray mais c’est du code ES5 et j’ai tendance à ne pas l’utiliser pour la portabilité.

    Personnellement, je vous recommande d’essayer d’utiliser le underscore , qui est une bibliothèque avec des méthodes utilitaires communes. Il a beaucoup de fonctions utiles qui DRY votre code.

    Essayez ce code:

     Array.isArray(argument) 

    J’ai l’impression que cette question a plusieurs bonnes réponses, mais pour être complet, j’appendais une autre option, qui n’a pas été suggérée plus tôt.

    Afin de vérifier si quelque chose est un tableau, vous pouvez utiliser le module isArray() Node.js util et sa fonction isArray() .

    Exemple:

     var util = require('util'); util.isArray([]); // true util.isArray(new Array); // true util.isArray({"0":"ssortingng","1":"ssortingng","length":"2"}); // false 

    Avec cette méthode, vous n’avez pas à vous soucier des normes JS implémentées par V8, car elles afficheront toujours la bonne réponse.

    Que diriez-vous:

     your_object instanceof Array 

    En V8 en Chrome je reçois

     [] instanceof Array > true ({}) instanceof Array > false ({"0":"ssortingng","1":"ssortingng","length":"2"}) instanceof Array > false 

    Essayez de cette façon:
    console.log (Object.prototype.toSsortingng.call (arg) .replace (/ ^ [object (. +)] $ /, ‘$ 1’). toLowerCase ())